
Security News
/Research
Wallet-Draining npm Package Impersonates Nodemailer to Hijack Crypto Transactions
Malicious npm package impersonates Nodemailer and drains wallets by hijacking crypto transactions across multiple blockchains.
TypeScript implementation of SSVC (Stakeholder-Specific Vulnerability Categorization). A prioritization framework to triage CVE vulnerabilities as an alternative or compliment to CVSS
A prioritization framework to triage CVE vulnerabilities as an alternative or compliment to CVSS.
We've added a new AI/LLM Triage methodology specifically designed for assessing AI and LLM vulnerabilities. This methodology addresses the unique security considerations of AI systems including model security, data poisoning, prompt injection, and AI-specific attack vectors.
Features:
See the AI/LLM Triage Documentation for detailed usage and examples.
This library implements a standardized YAML schema for SSVC methodologies, staying true to SSVC's core design principle of being "Stakeholder-Specific" while enabling interoperability and portability:
# Validate your YAML methodologies against the schema
just validate-methodologies
# or
npx ts-node scripts/validate-methodologies.ts
See the Schema Documentation for complete details on creating schema-compliant YAML methodologies.
This library features a plugin-based architecture that allows for easy integration of different SSVC methodologies. It includes built-in support for 6 methodologies:
Methodology | Description | Documentation | Official Source |
---|---|---|---|
AI LLM Triage | AI-specific vulnerability triage for LLMs | docs/ai_llm_triage.md | NIST AI Risk Management |
CISA | CISA Stakeholder-Specific Vulnerability Categorization | docs/cisa.md | CISA SSVC Guide |
Coordinator Triage | CERT/CC Coordinator Triage Decision Model | docs/coordinator_triage.md | CERT/CC Coordinator Triage |
Coordinator Publication | CERT/CC Coordinator Publication Decision Model | docs/coordinator_publication.md | CERT/CC Publication Decision |
Supplier | CERT/CC Supplier Decision Model for patch prioritization | docs/supplier.md | CERT/CC Supplier Tree |
Deployer | CERT/CC Deployer Decision Model for patch deployment | docs/deployer.md | CERT/CC Deployer Tree |
All methodologies support both quantitative (structured decision trees) and qualitative (expert judgment) approaches, with the library providing the quantitative framework while allowing for qualitative override based on domain expertise.
Check out the Python implementation of SSVC
Golang is currently in development
npm install ssvc
import { createDecision, listMethodologies } from 'ssvc';
// See available methodologies
console.log(listMethodologies());
// ['CISA', 'AI/LLM Triage', 'Coordinator Triage', 'Coordinator Publication', 'Supplier', 'Deployer']
// Critical vulnerability requiring immediate action
const criticalDecision = createDecision('CISA', {
exploitation: 'active', // Active exploitation detected
automatable: 'yes', // Can be automated
technical_impact: 'total', // Complete system compromise possible
mission_wellbeing: 'high' // High impact on mission/business
});
const result = criticalDecision.evaluate();
console.log(result); // { action: 'act', priority: 'immediate' }
// Lower priority vulnerability for comparison
const lowPriorityDecision = createDecision('CISA', {
exploitation: 'none', // No known exploitation
automatable: 'no', // Manual exploitation required
technical_impact: 'partial', // Limited impact
mission_wellbeing: 'low' // Minimal business impact
});
const lowResult = lowPriorityDecision.evaluate();
console.log(lowResult); // { action: 'track', priority: 'low' }
// AI-specific vulnerability assessment
const aiVulnDecision = createDecision('AI/LLM Triage', {
model_access: 'direct', // Direct model access possible
data_poisoning: 'confirmed', // Training data compromised
ai_system_impact: 'full_compromise', // Complete AI system compromise
traditional_exploit: 'yes' // Also exploitable via traditional methods
});
const aiResult = aiVulnDecision.evaluate();
console.log(aiResult); // { action: 'act', priority: 'immediate' }
The schema validation system ensures all SSVC methodologies follow a consistent hierarchical tree structure while preserving the flexibility that makes SSVC "Stakeholder-Specific":
SSVC's Design Philosophy: The name "Stakeholder-Specific Vulnerability Categorization" explicitly recognizes that different organizations have different priorities, risk tolerances, and operational contexts. However, this flexibility should not come at the cost of interoperability.
Benefits of Schema Compliance:
# Validate all methodologies
just validate-methodologies
# Output example:
🔍 Validating SSVC Methodology Files...
Validating cisa.yaml...
✅ cisa.yaml is valid
Validating custom-methodology.yaml...
❌ custom-methodology.yaml has errors:
• Inconsistent tree depth: found depths 3, 4. All paths should have the same depth.
• Action 'REVIEW' has no priority mapping
All YAML methodologies must follow these structural requirements:
See Schema Documentation for detailed requirements and examples.
The library supports a flexible plugin system where each methodology is a separate plugin. This allows for:
The CISA Stakeholder-Specific Vulnerability Categorization framework:
import { createDecision } from 'ssvc';
const cisaDecision = createDecision('CISA', {
exploitation: 'active', // 'none' | 'poc' | 'active'
automatable: 'yes', // 'yes' | 'no'
technical_impact: 'total', // 'partial' | 'total'
mission_wellbeing: 'high' // 'low' | 'medium' | 'high'
});
const outcome = cisaDecision.evaluate();
// Returns: { action: 'act', priority: 'immediate' }
Possible Actions:
track
→ Low prioritytrack*
→ Medium priorityattend
→ Medium priorityact
→ Immediate priorityThe AI/LLM Triage methodology addresses the unique security considerations of AI systems, including model vulnerabilities, data poisoning, prompt injection, and AI-specific attack vectors:
import { createDecision } from 'ssvc';
const aiDecision = createDecision('AI/LLM Triage', {
model_access: 'api', // 'none' | 'local' | 'api' | 'direct'
data_poisoning: 'confirmed', // 'none' | 'suspected' | 'confirmed'
ai_system_impact: 'full_compromise', // 'minimal' | 'degraded' | 'full_compromise'
traditional_exploit: 'yes' // 'yes' | 'no'
});
const outcome = aiDecision.evaluate();
// Returns: { action: 'act', priority: 'immediate' }
Possible Actions:
track
→ Low prioritymonitor
→ Medium priorityinvestigate
→ High priorityact
→ Immediate priorityAI-Specific Considerations:
The CERT/CC Coordinator Triage Decision Model for vulnerability coordinators:
import { createDecision } from 'ssvc';
const coordinatorDecision = createDecision('Coordinator Triage', {
report_public: 'yes', // 'yes' | 'no'
supplier_contacted: 'yes', // 'yes' | 'no'
report_credibility: 'credible', // 'credible' | 'not_credible'
supplier_cardinality: 'multiple', // 'one' | 'multiple'
utility: 'super_effective', // 'laborious' | 'efficient' | 'super_effective'
public_safety_impact: 'significant' // 'minimal' | 'significant'
});
const outcome = coordinatorDecision.evaluate();
// Returns: { action: 'coordinate', priority: 'high' }
Possible Actions:
decline
→ Low prioritytrack
→ Medium prioritycoordinate
→ High priorityThe CERT/CC Coordinator Publication Decision Model for publication decisions:
const publicationDecision = createDecision('Coordinator Publication', {
supplier_involvement: 'fix_ready', // 'fix_ready' | 'cooperative' | 'uncooperative_unresponsive'
exploitation: 'active', // 'none' | 'public_poc' | 'active'
public_value_added: 'precedence' // 'limited' | 'amplificative' | 'precedence'
});
const outcome = publicationDecision.evaluate();
// Returns: { action: 'publish', priority: 'high' }
Possible Actions:
don't_publish
→ Low prioritypublish
→ High priorityThe CERT/CC Supplier Decision Model for patch development prioritization:
const supplierDecision = createDecision('Supplier', {
exploitation: 'active', // 'none' | 'public_poc' | 'active'
utility: 'super_effective', // 'laborious' | 'efficient' | 'super_effective'
technical_impact: 'total', // 'partial' | 'total'
public_safety_impact: 'significant' // 'minimal' | 'significant'
});
const outcome = supplierDecision.evaluate();
// Returns: { action: 'immediate', priority: 'immediate' }
Possible Actions:
defer
→ Low priorityscheduled
→ Medium priorityout_of_cycle
→ High priorityimmediate
→ Immediate priorityThe CERT/CC Deployer Decision Model for patch deployment prioritization:
const deployerDecision = createDecision('Deployer', {
exploitation: 'active', // 'none' | 'public_poc' | 'active'
system_exposure: 'open', // 'small' | 'controlled' | 'open'
utility: 'super_effective', // 'laborious' | 'efficient' | 'super_effective'
human_impact: 'very_high' // 'low' | 'medium' | 'high' | 'very_high'
});
const outcome = deployerDecision.evaluate();
// Returns: { action: 'immediate', priority: 'immediate' }
Possible Actions:
defer
→ Low priorityscheduled
→ Medium priorityout_of_cycle
→ High priorityimmediate
→ Immediate prioritySSVC supports both approaches to vulnerability prioritization:
The library provides structured decision trees with specific criteria and outcomes. This ensures:
Domain experts can override quantitative results using expert judgment when:
import { DecisionCisa, CISAExploitationStatus, CISAAutomatableStatus } from 'ssvc';
const decision = new DecisionCisa({
exploitation: CISAExploitationStatus.ACTIVE,
automatable: CISAAutomatableStatus.YES,
technicalImpact: 'total',
missionWellbeingImpact: 'high'
});
const outcome = decision.evaluate();
import { PluginRegistry, SSVCPlugin } from 'ssvc';
// Register a custom plugin
const registry = PluginRegistry.getInstance();
registry.register(new MyCustomPlugin());
// List all registered methodologies
const methodologies = registry.list();
You can add new methodologies by creating schema-compliant YAML configuration files and generating TypeScript plugins:
methodologies/
directory:name: "My Custom Methodology"
description: "Custom vulnerability categorization"
version: "1.0"
enums:
SeverityLevel:
- LOW
- MEDIUM
- HIGH
priorityMap:
IGNORE: low
MONITOR: medium
PATCH: high
decisionTree:
type: SeverityLevel
children:
HIGH: PATCH
MEDIUM: MONITOR
LOW: IGNORE
defaultAction: IGNORE
just validate-methodologies
yarn generate-plugins
const decision = createDecision('My Custom Methodology', {
severity: 'high'
});
Your YAML methodology must follow these requirements:
type
and children
objects (not flat arrays)See the Schema Documentation for detailed validation rules and migration guides.
Each methodology includes auto-generated documentation with:
See the docs/
directory for detailed methodology documentation, including:
The library maintains backward compatibility with the previous hardcoded API:
// Legacy API (still works)
import { Decision, Exploitation, Automatable } from 'ssvc';
const decision = new Decision({
methodology: 'CISA',
exploitation: Exploitation.ACTIVE,
automatable: Automatable.YES,
technical_impact: 'total',
mission_wellbeing: 'high'
});
// New Plugin API (recommended)
import { createDecision } from 'ssvc';
const decision = createDecision('CISA', {
exploitation: 'active',
automatable: 'yes',
technical_impact: 'total',
mission_wellbeing: 'high'
});
flowchart LR
0{ExploitationStatus}
1{AutomatableStatus}
2{TechnicalImpactLevel}
3{MissionWellbeingImpactLevel}
4[ATTEND]
5{MissionWellbeingImpactLevel}
6[ATTEND]
7{TechnicalImpactLevel}
8{MissionWellbeingImpactLevel}
9[TRACK_STAR]
10{MissionWellbeingImpactLevel}
11[TRACK_STAR]
12{AutomatableStatus}
13{TechnicalImpactLevel}
14{MissionWellbeingImpactLevel}
15[TRACK_STAR]
16[ATTEND]
17{MissionWellbeingImpactLevel}
18[ATTEND]
19{TechnicalImpactLevel}
20{MissionWellbeingImpactLevel}
21[TRACK_STAR]
22{MissionWellbeingImpactLevel}
23[TRACK_STAR]
24[ATTEND]
25{AutomatableStatus}
26{TechnicalImpactLevel}
27{MissionWellbeingImpactLevel}
28[ATTEND]
29[ATTEND]
30[ACT]
31{MissionWellbeingImpactLevel}
32[ATTEND]
33[ACT]
34[ACT]
35{TechnicalImpactLevel}
36{MissionWellbeingImpactLevel}
37[ATTEND]
38{MissionWellbeingImpactLevel}
39[ATTEND]
40[ACT]
0 -->|NONE| 1
1 -->|YES| 2
2 -->|PARTIAL| 3
3 -->|HIGH| 4
2 -->|TOTAL| 5
5 -->|HIGH| 6
1 -->|NO| 7
7 -->|PARTIAL| 8
8 -->|HIGH| 9
7 -->|TOTAL| 10
10 -->|HIGH| 11
0 -->|POC| 12
12 -->|YES| 13
13 -->|TOTAL| 14
14 -->|MEDIUM| 15
14 -->|HIGH| 16
13 -->|PARTIAL| 17
17 -->|HIGH| 18
12 -->|NO| 19
19 -->|PARTIAL| 20
20 -->|HIGH| 21
19 -->|TOTAL| 22
22 -->|MEDIUM| 23
22 -->|HIGH| 24
0 -->|ACTIVE| 25
25 -->|YES| 26
26 -->|PARTIAL| 27
27 -->|LOW| 28
27 -->|MEDIUM| 29
27 -->|HIGH| 30
26 -->|TOTAL| 31
31 -->|LOW| 32
31 -->|MEDIUM| 33
31 -->|HIGH| 34
25 -->|NO| 35
35 -->|PARTIAL| 36
36 -->|HIGH| 37
35 -->|TOTAL| 38
38 -->|MEDIUM| 39
38 -->|HIGH| 40
yarn build
yarn test
just validate-methodologies
This validates all YAML files in methodologies/
against the schema and checks for:
yarn generate-plugins
This will:
methodologies/
src/plugins/
docs/
methodologies/
just validate-methodologies
yarn generate-plugins
See the Schema Documentation for detailed requirements and validation rules.
MIT
FAQs
TypeScript implementation of SSVC (Stakeholder-Specific Vulnerability Categorization). A prioritization framework to triage CVE vulnerabilities as an alternative or compliment to CVSS
The npm package ssvc receives a total of 12 weekly downloads. As such, ssvc popularity was classified as not popular.
We found that ssvc demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
/Research
Malicious npm package impersonates Nodemailer and drains wallets by hijacking crypto transactions across multiple blockchains.
Security News
This episode explores the hard problem of reachability analysis, from static analysis limits to handling dynamic languages and massive dependency trees.
Security News
/Research
Malicious Nx npm versions stole secrets and wallet info using AI CLI tools; Socket’s AI scanner detected the supply chain attack and flagged the malware.