ship-safe 6.4.0 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -50,6 +50,72 @@ const AGENTIC_MAP = {
50
50
  'ASI10': { soc2: ['CC7.2', 'CC7.4'], iso27001: ['A.8.9', 'A.5.30'], nistAiRmf: ['MANAGE 2.2', 'MANAGE 4.1'] },
51
51
  };
52
52
 
53
+ // =============================================================================
54
+ // OWASP AGENTIC AI TOP 10 (December 2025)
55
+ // =============================================================================
56
+
57
+ const OWASP_AGENTIC_TOP_10 = {
58
+ ASI01: { id: 'ASI01', title: 'Agent Goal Hijacking', description: 'Manipulation of agent objectives through prompt injection, memory poisoning, or instruction override.' },
59
+ ASI02: { id: 'ASI02', title: 'Tool Misuse', description: 'Agent uses tools in unintended or dangerous ways — shell execution, file deletion, network access beyond scope.' },
60
+ ASI03: { id: 'ASI03', title: 'Privilege Abuse', description: 'Agent operates with excessive permissions — writes outside project, accesses secrets, escalates access.' },
61
+ ASI04: { id: 'ASI04', title: 'Agentic Supply Chain', description: 'Compromised skills, MCP servers, or tool packages that the agent depends on.' },
62
+ ASI05: { id: 'ASI05', title: 'Memory & Context Poisoning', description: 'Malicious data persisted in agent memory, rules files, or context that survives sessions.' },
63
+ ASI06: { id: 'ASI06', title: 'Uncontrolled Data Exposure', description: 'Agent leaks code, secrets, or PII through tool outputs, logs, or external API calls.' },
64
+ ASI07: { id: 'ASI07', title: 'Insecure Communication', description: 'Unencrypted MCP transport, HTTP model endpoints, or plaintext inter-agent messaging.' },
65
+ ASI08: { id: 'ASI08', title: 'Missing Human Oversight', description: 'Agent takes destructive or irreversible actions without user confirmation — proactive mode risks.' },
66
+ ASI09: { id: 'ASI09', title: 'Weak Identity & Auth', description: 'Agent sessions without authentication, shared API keys, or no audit trail of actions.' },
67
+ ASI10: { id: 'ASI10', title: 'Rogue Agent Behavior', description: 'Agent deviates from intended behavior — self-modification, stealth mode, output suppression.' },
68
+ };
69
+
70
+ /**
71
+ * Enrich a finding with OWASP Agentic Top 10 metadata.
72
+ * Attaches `agenticRisk` object if the finding maps to ASI01–ASI10.
73
+ * @param {object} finding
74
+ * @returns {object} — finding with agenticRisk attached (or unchanged)
75
+ */
76
+ export function enrichAgenticRisk(finding) {
77
+ const owasp = finding.owasp;
78
+ if (!owasp || !OWASP_AGENTIC_TOP_10[owasp]) return finding;
79
+
80
+ const risk = OWASP_AGENTIC_TOP_10[owasp];
81
+ finding.agenticRisk = {
82
+ id: risk.id,
83
+ title: risk.title,
84
+ description: risk.description,
85
+ };
86
+ return finding;
87
+ }
88
+
89
+ /**
90
+ * Get OWASP Agentic Top 10 summary across all findings.
91
+ * @param {object[]} findings
92
+ * @returns {{ risks: object[], coverage: number }}
93
+ */
94
+ export function getAgenticSummary(findings) {
95
+ const counts = {};
96
+ for (const f of findings) {
97
+ const owasp = f.owasp;
98
+ if (owasp && OWASP_AGENTIC_TOP_10[owasp]) {
99
+ counts[owasp] = (counts[owasp] || 0) + 1;
100
+ }
101
+ }
102
+
103
+ const risks = Object.entries(OWASP_AGENTIC_TOP_10).map(([id, info]) => ({
104
+ ...info,
105
+ findingCount: counts[id] || 0,
106
+ status: counts[id] ? 'flagged' : 'clear',
107
+ }));
108
+
109
+ const flagged = risks.filter(r => r.findingCount > 0).length;
110
+
111
+ return {
112
+ risks,
113
+ flagged,
114
+ total: 10,
115
+ coverage: `${flagged}/10`,
116
+ };
117
+ }
118
+
53
119
  // =============================================================================
54
120
  // PUBLIC API
55
121
  // =============================================================================
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "ship-safe",
3
- "version": "6.4.0",
4
- "description": "AI-powered multi-agent security platform. 18 agents scan 80+ attack classes with LLM-powered deep analysis. Red team your code before attackers do.",
3
+ "version": "7.0.0",
4
+ "description": "AI-powered multi-agent security platform. 19 agents scan 80+ attack classes with LLM-powered deep analysis, OWASP Agentic AI Top 10 mapping, memory poisoning detection, and live advisory feeds. Red team your code before attackers do.",
5
5
  "main": "cli/index.js",
6
6
  "bin": {
7
7
  "ship-safe": "cli/bin/ship-safe.js"