vaspera 2.14.0 → 2.15.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.
- package/CHANGELOG.md +45 -0
- package/README.md +15 -2
- package/dist/__tests__/certification/agent-certificate-e2e.test.d.ts +2 -0
- package/dist/__tests__/certification/agent-certificate-e2e.test.d.ts.map +1 -0
- package/dist/__tests__/certification/agent-certificate-e2e.test.js +90 -0
- package/dist/__tests__/certification/agent-certificate-e2e.test.js.map +1 -0
- package/dist/__tests__/certification/agent-certificate-map.test.d.ts +2 -0
- package/dist/__tests__/certification/agent-certificate-map.test.d.ts.map +1 -0
- package/dist/__tests__/certification/agent-certificate-map.test.js +107 -0
- package/dist/__tests__/certification/agent-certificate-map.test.js.map +1 -0
- package/dist/__tests__/certification/agent-certificate.test.d.ts +2 -0
- package/dist/__tests__/certification/agent-certificate.test.d.ts.map +1 -0
- package/dist/__tests__/certification/agent-certificate.test.js +78 -0
- package/dist/__tests__/certification/agent-certificate.test.js.map +1 -0
- package/dist/__tests__/certification/verify-endpoint.test.d.ts +2 -0
- package/dist/__tests__/certification/verify-endpoint.test.d.ts.map +1 -0
- package/dist/__tests__/certification/verify-endpoint.test.js +81 -0
- package/dist/__tests__/certification/verify-endpoint.test.js.map +1 -0
- package/dist/__tests__/compliance/ai-frameworks.test.d.ts +2 -0
- package/dist/__tests__/compliance/ai-frameworks.test.d.ts.map +1 -0
- package/dist/__tests__/compliance/ai-frameworks.test.js +87 -0
- package/dist/__tests__/compliance/ai-frameworks.test.js.map +1 -0
- package/dist/__tests__/eval/llm-analyzer.test.d.ts +2 -0
- package/dist/__tests__/eval/llm-analyzer.test.d.ts.map +1 -0
- package/dist/__tests__/eval/llm-analyzer.test.js +93 -0
- package/dist/__tests__/eval/llm-analyzer.test.js.map +1 -0
- package/dist/__tests__/eval/redteam-harness.test.d.ts +2 -0
- package/dist/__tests__/eval/redteam-harness.test.d.ts.map +1 -0
- package/dist/__tests__/eval/redteam-harness.test.js +136 -0
- package/dist/__tests__/eval/redteam-harness.test.js.map +1 -0
- package/dist/__tests__/evidence/evidence.test.d.ts +2 -0
- package/dist/__tests__/evidence/evidence.test.d.ts.map +1 -0
- package/dist/__tests__/evidence/evidence.test.js +240 -0
- package/dist/__tests__/evidence/evidence.test.js.map +1 -0
- package/dist/__tests__/history/decisions.test.d.ts +2 -0
- package/dist/__tests__/history/decisions.test.d.ts.map +1 -0
- package/dist/__tests__/history/decisions.test.js +54 -0
- package/dist/__tests__/history/decisions.test.js.map +1 -0
- package/dist/__tests__/http-auth.test.d.ts +2 -0
- package/dist/__tests__/http-auth.test.d.ts.map +1 -0
- package/dist/__tests__/http-auth.test.js +55 -0
- package/dist/__tests__/http-auth.test.js.map +1 -0
- package/dist/__tests__/http-policy.test.d.ts +2 -0
- package/dist/__tests__/http-policy.test.d.ts.map +1 -0
- package/dist/__tests__/http-policy.test.js +69 -0
- package/dist/__tests__/http-policy.test.js.map +1 -0
- package/dist/__tests__/http-server-transport.test.d.ts +2 -0
- package/dist/__tests__/http-server-transport.test.d.ts.map +1 -0
- package/dist/__tests__/http-server-transport.test.js +132 -0
- package/dist/__tests__/http-server-transport.test.js.map +1 -0
- package/dist/__tests__/integration/destructive-guards.test.d.ts +2 -0
- package/dist/__tests__/integration/destructive-guards.test.d.ts.map +1 -0
- package/dist/__tests__/integration/destructive-guards.test.js +49 -0
- package/dist/__tests__/integration/destructive-guards.test.js.map +1 -0
- package/dist/__tests__/logger-redaction.test.d.ts +2 -0
- package/dist/__tests__/logger-redaction.test.d.ts.map +1 -0
- package/dist/__tests__/logger-redaction.test.js +74 -0
- package/dist/__tests__/logger-redaction.test.js.map +1 -0
- package/dist/__tests__/manifest-schema.test.d.ts +2 -0
- package/dist/__tests__/manifest-schema.test.d.ts.map +1 -0
- package/dist/__tests__/manifest-schema.test.js +43 -0
- package/dist/__tests__/manifest-schema.test.js.map +1 -0
- package/dist/__tests__/scanners/builtin-rules.test.d.ts +2 -0
- package/dist/__tests__/scanners/builtin-rules.test.d.ts.map +1 -0
- package/dist/__tests__/scanners/builtin-rules.test.js +51 -0
- package/dist/__tests__/scanners/builtin-rules.test.js.map +1 -0
- package/dist/__tests__/scanners/runtime/golden-path-runner.test.js +13 -1
- package/dist/__tests__/scanners/runtime/golden-path-runner.test.js.map +1 -1
- package/dist/__tests__/tool-guard.test.d.ts +2 -0
- package/dist/__tests__/tool-guard.test.d.ts.map +1 -0
- package/dist/__tests__/tool-guard.test.js +97 -0
- package/dist/__tests__/tool-guard.test.js.map +1 -0
- package/dist/__tests__/util/contained-file.test.d.ts +2 -0
- package/dist/__tests__/util/contained-file.test.d.ts.map +1 -0
- package/dist/__tests__/util/contained-file.test.js +78 -0
- package/dist/__tests__/util/contained-file.test.js.map +1 -0
- package/dist/__tests__/util/subprocess.test.d.ts +2 -0
- package/dist/__tests__/util/subprocess.test.d.ts.map +1 -0
- package/dist/__tests__/util/subprocess.test.js +48 -0
- package/dist/__tests__/util/subprocess.test.js.map +1 -0
- package/dist/action/diff-mode.d.ts.map +1 -1
- package/dist/action/diff-mode.js +31 -12
- package/dist/action/diff-mode.js.map +1 -1
- package/dist/certification/agent-certificate-map.d.ts +51 -0
- package/dist/certification/agent-certificate-map.d.ts.map +1 -0
- package/dist/certification/agent-certificate-map.js +265 -0
- package/dist/certification/agent-certificate-map.js.map +1 -0
- package/dist/certification/agent-certificate-sample.d.ts +25 -0
- package/dist/certification/agent-certificate-sample.d.ts.map +1 -0
- package/dist/certification/agent-certificate-sample.js +207 -0
- package/dist/certification/agent-certificate-sample.js.map +1 -0
- package/dist/certification/agent-certificate.d.ts +1981 -0
- package/dist/certification/agent-certificate.d.ts.map +1 -0
- package/dist/certification/agent-certificate.js +309 -0
- package/dist/certification/agent-certificate.js.map +1 -0
- package/dist/certification/autofix.d.ts.map +1 -1
- package/dist/certification/autofix.js +5 -3
- package/dist/certification/autofix.js.map +1 -1
- package/dist/certification/store.d.ts.map +1 -1
- package/dist/certification/store.js +5 -2
- package/dist/certification/store.js.map +1 -1
- package/dist/certification/verify-endpoint.d.ts +48 -0
- package/dist/certification/verify-endpoint.d.ts.map +1 -0
- package/dist/certification/verify-endpoint.js +79 -0
- package/dist/certification/verify-endpoint.js.map +1 -0
- package/dist/compliance/index.d.ts +2 -0
- package/dist/compliance/index.d.ts.map +1 -1
- package/dist/compliance/index.js +4 -0
- package/dist/compliance/index.js.map +1 -1
- package/dist/compliance/iso42001.d.ts +21 -0
- package/dist/compliance/iso42001.d.ts.map +1 -0
- package/dist/compliance/iso42001.js +160 -0
- package/dist/compliance/iso42001.js.map +1 -0
- package/dist/compliance/mapper.d.ts.map +1 -1
- package/dist/compliance/mapper.js +12 -0
- package/dist/compliance/mapper.js.map +1 -1
- package/dist/compliance/nist-ai-rmf.d.ts +20 -0
- package/dist/compliance/nist-ai-rmf.d.ts.map +1 -0
- package/dist/compliance/nist-ai-rmf.js +140 -0
- package/dist/compliance/nist-ai-rmf.js.map +1 -0
- package/dist/config/flags.d.ts +4 -4
- package/dist/eval/fixtures.d.ts.map +1 -1
- package/dist/eval/fixtures.js +161 -119
- package/dist/eval/fixtures.js.map +1 -1
- package/dist/eval/fixtures.test.js +4 -2
- package/dist/eval/fixtures.test.js.map +1 -1
- package/dist/eval/llm-analyzer.d.ts +40 -0
- package/dist/eval/llm-analyzer.d.ts.map +1 -0
- package/dist/eval/llm-analyzer.js +154 -0
- package/dist/eval/llm-analyzer.js.map +1 -0
- package/dist/eval/redteam-harness.d.ts +95 -0
- package/dist/eval/redteam-harness.d.ts.map +1 -0
- package/dist/eval/redteam-harness.js +137 -0
- package/dist/eval/redteam-harness.js.map +1 -0
- package/dist/evidence/collector.d.ts.map +1 -1
- package/dist/evidence/collector.js +21 -1
- package/dist/evidence/collector.js.map +1 -1
- package/dist/evidence/store.d.ts.map +1 -1
- package/dist/evidence/store.js +29 -5
- package/dist/evidence/store.js.map +1 -1
- package/dist/evidence/types.d.ts +16 -9
- package/dist/evidence/types.d.ts.map +1 -1
- package/dist/history/decisions.d.ts +63 -0
- package/dist/history/decisions.d.ts.map +1 -0
- package/dist/history/decisions.js +60 -0
- package/dist/history/decisions.js.map +1 -0
- package/dist/history/index.d.ts +2 -0
- package/dist/history/index.d.ts.map +1 -1
- package/dist/history/index.js +2 -0
- package/dist/history/index.js.map +1 -1
- package/dist/history/types.d.ts +34 -5
- package/dist/history/types.d.ts.map +1 -1
- package/dist/history/types.js +2 -0
- package/dist/history/types.js.map +1 -1
- package/dist/http-auth.d.ts +22 -0
- package/dist/http-auth.d.ts.map +1 -0
- package/dist/http-auth.js +58 -0
- package/dist/http-auth.js.map +1 -0
- package/dist/http-policy.d.ts +30 -0
- package/dist/http-policy.d.ts.map +1 -0
- package/dist/http-policy.js +54 -0
- package/dist/http-policy.js.map +1 -0
- package/dist/http-server.js +195 -12
- package/dist/http-server.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +247 -15
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +56 -2
- package/dist/logger.js.map +1 -1
- package/dist/plugins/types.d.ts +2 -2
- package/dist/scanners/agent/prompt-injection-fuzzer.d.ts.map +1 -1
- package/dist/scanners/agent/prompt-injection-fuzzer.js +26 -0
- package/dist/scanners/agent/prompt-injection-fuzzer.js.map +1 -1
- package/dist/scanners/agent/types.d.ts +10 -10
- package/dist/scanners/bandit.d.ts.map +1 -1
- package/dist/scanners/bandit.js +35 -29
- package/dist/scanners/bandit.js.map +1 -1
- package/dist/scanners/binary-analysis.d.ts.map +1 -1
- package/dist/scanners/binary-analysis.js +24 -49
- package/dist/scanners/binary-analysis.js.map +1 -1
- package/dist/scanners/brakeman.d.ts.map +1 -1
- package/dist/scanners/brakeman.js +19 -33
- package/dist/scanners/brakeman.js.map +1 -1
- package/dist/scanners/builtin-rules.d.ts +24 -0
- package/dist/scanners/builtin-rules.d.ts.map +1 -0
- package/dist/scanners/builtin-rules.js +175 -0
- package/dist/scanners/builtin-rules.js.map +1 -0
- package/dist/scanners/dast.d.ts.map +1 -1
- package/dist/scanners/dast.js +24 -34
- package/dist/scanners/dast.js.map +1 -1
- package/dist/scanners/deploy/types.d.ts +6 -6
- package/dist/scanners/eslint.d.ts.map +1 -1
- package/dist/scanners/eslint.js +15 -24
- package/dist/scanners/eslint.js.map +1 -1
- package/dist/scanners/gosec.d.ts.map +1 -1
- package/dist/scanners/gosec.js +14 -62
- package/dist/scanners/gosec.js.map +1 -1
- package/dist/scanners/index.d.ts.map +1 -1
- package/dist/scanners/index.js +38 -7
- package/dist/scanners/index.js.map +1 -1
- package/dist/scanners/memory-safety.d.ts.map +1 -1
- package/dist/scanners/memory-safety.js +27 -28
- package/dist/scanners/memory-safety.js.map +1 -1
- package/dist/scanners/openapi.d.ts.map +1 -1
- package/dist/scanners/openapi.js +14 -22
- package/dist/scanners/openapi.js.map +1 -1
- package/dist/scanners/race-condition.d.ts.map +1 -1
- package/dist/scanners/race-condition.js +17 -16
- package/dist/scanners/race-condition.js.map +1 -1
- package/dist/scanners/runtime/types.d.ts +4 -4
- package/dist/scanners/rust.d.ts.map +1 -1
- package/dist/scanners/rust.js +38 -37
- package/dist/scanners/rust.js.map +1 -1
- package/dist/scanners/scale/types.d.ts +16 -16
- package/dist/scanners/secrets.d.ts.map +1 -1
- package/dist/scanners/secrets.js +66 -78
- package/dist/scanners/secrets.js.map +1 -1
- package/dist/scanners/semgrep.d.ts +2 -0
- package/dist/scanners/semgrep.d.ts.map +1 -1
- package/dist/scanners/semgrep.js +12 -0
- package/dist/scanners/semgrep.js.map +1 -1
- package/dist/scanners/terraform.d.ts.map +1 -1
- package/dist/scanners/terraform.js +47 -40
- package/dist/scanners/terraform.js.map +1 -1
- package/dist/scanners/trivy.d.ts.map +1 -1
- package/dist/scanners/trivy.js +38 -30
- package/dist/scanners/trivy.js.map +1 -1
- package/dist/tool-guard.d.ts +40 -0
- package/dist/tool-guard.d.ts.map +1 -0
- package/dist/tool-guard.js +55 -0
- package/dist/tool-guard.js.map +1 -0
- package/dist/util/index.d.ts +2 -1
- package/dist/util/index.d.ts.map +1 -1
- package/dist/util/index.js +2 -1
- package/dist/util/index.js.map +1 -1
- package/dist/util/paths.d.ts +20 -3
- package/dist/util/paths.d.ts.map +1 -1
- package/dist/util/paths.js +84 -4
- package/dist/util/paths.js.map +1 -1
- package/dist/util/subprocess.d.ts +51 -0
- package/dist/util/subprocess.d.ts.map +1 -0
- package/dist/util/subprocess.js +77 -0
- package/dist/util/subprocess.js.map +1 -0
- package/package.json +12 -2
- package/dist/eval/fixtures/healthcare/audit-gaps.d.ts +0 -28
- package/dist/eval/fixtures/healthcare/audit-gaps.d.ts.map +0 -1
- package/dist/eval/fixtures/healthcare/audit-gaps.js +0 -90
- package/dist/eval/fixtures/healthcare/audit-gaps.js.map +0 -1
- package/dist/eval/fixtures/healthcare/consent-bypass.d.ts +0 -31
- package/dist/eval/fixtures/healthcare/consent-bypass.d.ts.map +0 -1
- package/dist/eval/fixtures/healthcare/consent-bypass.js +0 -61
- package/dist/eval/fixtures/healthcare/consent-bypass.js.map +0 -1
- package/dist/eval/fixtures/healthcare/phi-in-logs.d.ts +0 -24
- package/dist/eval/fixtures/healthcare/phi-in-logs.d.ts.map +0 -1
- package/dist/eval/fixtures/healthcare/phi-in-logs.js +0 -41
- package/dist/eval/fixtures/healthcare/phi-in-logs.js.map +0 -1
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM security analyzer for the accuracy benchmark.
|
|
3
|
+
*
|
|
4
|
+
* Runs the LLM layer (Anthropic, optionally OpenAI for cross-model
|
|
5
|
+
* consensus) over a code sample and returns structured findings in the
|
|
6
|
+
* same shape the eval harness matches against ground truth. This lets
|
|
7
|
+
* the benchmark measure the *full pipeline*, not just the deterministic
|
|
8
|
+
* scanners — and it's where the logic/semantic classes (auth-bypass,
|
|
9
|
+
* RLS, deserialization) the scanners miss should get caught.
|
|
10
|
+
*
|
|
11
|
+
* Providers are loaded via dynamic import so neither SDK is a hard
|
|
12
|
+
* runtime dependency (openai is only needed for consensus).
|
|
13
|
+
*
|
|
14
|
+
* @module eval/llm-analyzer
|
|
15
|
+
*/
|
|
16
|
+
import { parseJson } from "../util/json.js";
|
|
17
|
+
const ANTHROPIC_MODEL = process.env.VASPERA_ANTHROPIC_MODEL || "claude-opus-4-8";
|
|
18
|
+
const OPENAI_MODEL = process.env.VASPERA_OPENAI_MODEL || "gpt-4o";
|
|
19
|
+
const SYSTEM_PROMPT = `You are a precise application-security code reviewer. \
|
|
20
|
+
Identify only REAL, exploitable security vulnerabilities in the given code — \
|
|
21
|
+
not style issues, not theoretical concerns. For each, give the 1-indexed line \
|
|
22
|
+
of the dangerous sink, a category, a severity, and a short description. \
|
|
23
|
+
Do not report safe/parameterized/validated code. Prefer precision over recall: \
|
|
24
|
+
if you are not confident it is exploitable, omit it.`;
|
|
25
|
+
const INSTRUCTIONS = `Analyze this file for security vulnerabilities. \
|
|
26
|
+
Categories to consider: sql-injection, xss, command-injection, ssrf, \
|
|
27
|
+
path-traversal, auth-bypass, broken-access-control, rls-bypass, \
|
|
28
|
+
insecure-deserialization, xxe, hardcoded-secret, pii-exposure, \
|
|
29
|
+
prompt-injection, excessive-agency, exfil-path. \
|
|
30
|
+
Return JSON only.`;
|
|
31
|
+
/** JSON schema for the structured response (Anthropic output_config). */
|
|
32
|
+
const RESPONSE_SCHEMA = {
|
|
33
|
+
type: "object",
|
|
34
|
+
properties: {
|
|
35
|
+
findings: {
|
|
36
|
+
type: "array",
|
|
37
|
+
items: {
|
|
38
|
+
type: "object",
|
|
39
|
+
properties: {
|
|
40
|
+
line: { type: "integer" },
|
|
41
|
+
category: { type: "string" },
|
|
42
|
+
severity: {
|
|
43
|
+
type: "string",
|
|
44
|
+
enum: ["critical", "high", "medium", "low", "info"],
|
|
45
|
+
},
|
|
46
|
+
description: { type: "string" },
|
|
47
|
+
},
|
|
48
|
+
required: ["line", "category", "severity", "description"],
|
|
49
|
+
additionalProperties: false,
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
required: ["findings"],
|
|
54
|
+
additionalProperties: false,
|
|
55
|
+
};
|
|
56
|
+
function toActualFindings(provider, file, parsed) {
|
|
57
|
+
return (parsed.findings || []).map((f) => ({
|
|
58
|
+
scanner: `llm:${provider}`,
|
|
59
|
+
ruleId: `${provider}:${f.category}`,
|
|
60
|
+
file,
|
|
61
|
+
line: f.line,
|
|
62
|
+
severity: f.severity,
|
|
63
|
+
message: `${f.category}: ${f.description}`,
|
|
64
|
+
confidence: 100,
|
|
65
|
+
}));
|
|
66
|
+
}
|
|
67
|
+
function userPrompt(file, code) {
|
|
68
|
+
return `${INSTRUCTIONS}\n\n## File: ${file}\n\`\`\`\n${code}\n\`\`\``;
|
|
69
|
+
}
|
|
70
|
+
/** Whether a given provider can run (API key present). */
|
|
71
|
+
export function providerAvailable(provider) {
|
|
72
|
+
return provider === "anthropic"
|
|
73
|
+
? !!process.env.ANTHROPIC_API_KEY
|
|
74
|
+
: !!process.env.OPENAI_API_KEY;
|
|
75
|
+
}
|
|
76
|
+
async function analyzeWithAnthropic(file, code) {
|
|
77
|
+
const { default: Anthropic } = await import("@anthropic-ai/sdk");
|
|
78
|
+
const client = new Anthropic();
|
|
79
|
+
const response = await client.messages.create({
|
|
80
|
+
model: ANTHROPIC_MODEL,
|
|
81
|
+
max_tokens: 4096,
|
|
82
|
+
system: SYSTEM_PROMPT,
|
|
83
|
+
output_config: { format: { type: "json_schema", schema: RESPONSE_SCHEMA } },
|
|
84
|
+
messages: [{ role: "user", content: userPrompt(file, code) }],
|
|
85
|
+
});
|
|
86
|
+
const block = response.content.find((b) => b.type === "text");
|
|
87
|
+
const text = block?.text ?? "{\"findings\":[]}";
|
|
88
|
+
const parsed = parseJson(text, "anthropic analysis");
|
|
89
|
+
return toActualFindings("anthropic", file, parsed);
|
|
90
|
+
}
|
|
91
|
+
async function analyzeWithOpenAI(file, code) {
|
|
92
|
+
// Variable specifier: keeps `openai` an OPTIONAL dependency — not in the
|
|
93
|
+
// build, loaded only if installed (`npm install openai`) for consensus.
|
|
94
|
+
const pkg = "openai";
|
|
95
|
+
const mod = (await import(pkg));
|
|
96
|
+
const client = new mod.default();
|
|
97
|
+
const response = await client.chat.completions.create({
|
|
98
|
+
model: OPENAI_MODEL,
|
|
99
|
+
// Structured outputs: force the EXACT same {findings:[...]} shape
|
|
100
|
+
// Anthropic returns. Plain json_object mode does not enforce a schema
|
|
101
|
+
// — OpenAI would otherwise return {vulnerabilities:[...]} and nothing
|
|
102
|
+
// would ever match for consensus. strict requires every property in
|
|
103
|
+
// `required` and additionalProperties:false (RESPONSE_SCHEMA already
|
|
104
|
+
// satisfies both).
|
|
105
|
+
response_format: {
|
|
106
|
+
type: "json_schema",
|
|
107
|
+
json_schema: { name: "security_findings", strict: true, schema: RESPONSE_SCHEMA },
|
|
108
|
+
},
|
|
109
|
+
messages: [
|
|
110
|
+
{ role: "system", content: SYSTEM_PROMPT },
|
|
111
|
+
{ role: "user", content: userPrompt(file, code) },
|
|
112
|
+
],
|
|
113
|
+
});
|
|
114
|
+
const text = response.choices[0]?.message?.content ?? "{\"findings\":[]}";
|
|
115
|
+
const parsed = parseJson(text, "openai analysis");
|
|
116
|
+
return toActualFindings("openai", file, parsed);
|
|
117
|
+
}
|
|
118
|
+
/** Analyze a single file with one provider. */
|
|
119
|
+
export async function analyzeCode(file, code, provider) {
|
|
120
|
+
return provider === "anthropic"
|
|
121
|
+
? analyzeWithAnthropic(file, code)
|
|
122
|
+
: analyzeWithOpenAI(file, code);
|
|
123
|
+
}
|
|
124
|
+
/** Line proximity (in lines) within which two findings are "the same spot". */
|
|
125
|
+
const CONSENSUS_LINE_TOLERANCE = 3;
|
|
126
|
+
/**
|
|
127
|
+
* Two findings agree if they name the same file, the same category, and a
|
|
128
|
+
* line within tolerance. Category is the part after the `<provider>:`
|
|
129
|
+
* prefix in ruleId, so cross-provider findings compare correctly.
|
|
130
|
+
*/
|
|
131
|
+
export function findingsAgree(a, b) {
|
|
132
|
+
return (a.file === b.file &&
|
|
133
|
+
a.ruleId.split(":")[1] === b.ruleId.split(":")[1] &&
|
|
134
|
+
Math.abs(a.line - b.line) <= CONSENSUS_LINE_TOLERANCE);
|
|
135
|
+
}
|
|
136
|
+
/** The findings from `primary` that at least one `other` finding agrees with. */
|
|
137
|
+
export function consensusOf(primary, other) {
|
|
138
|
+
return primary.filter((a) => other.some((b) => findingsAgree(a, b)));
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Cross-model consensus: run both providers and keep findings both agree
|
|
142
|
+
* on (same file, category, and line within tolerance). Trades recall for
|
|
143
|
+
* confidence — every kept finding has two-model corroboration. That's the
|
|
144
|
+
* value proposition of multi-model consensus for certification.
|
|
145
|
+
*/
|
|
146
|
+
export async function analyzeWithConsensus(file, code) {
|
|
147
|
+
const [anthropic, openai] = await Promise.all([
|
|
148
|
+
analyzeCode(file, code, "anthropic"),
|
|
149
|
+
analyzeCode(file, code, "openai"),
|
|
150
|
+
]);
|
|
151
|
+
const consensus = consensusOf(anthropic, openai);
|
|
152
|
+
return { consensus, byProvider: { anthropic, openai } };
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=llm-analyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-analyzer.js","sourceRoot":"","sources":["../../src/eval/llm-analyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Red-Team Resistance Harness.
|
|
3
|
+
*
|
|
4
|
+
* The accuracy benchmark (`run-benchmark`, `run-llm-benchmark`) measures
|
|
5
|
+
* how well the engine *detects* vulnerabilities in code. This harness
|
|
6
|
+
* measures the complementary thing the roadmap calls for: a reproducible
|
|
7
|
+
* **behavioral resistance score** for an agent / MCP target — how well it
|
|
8
|
+
* survives a prompt-injection battery, plus the tool-scope / exfiltration
|
|
9
|
+
* surface it exposes.
|
|
10
|
+
*
|
|
11
|
+
* It is a scoring layer over primitives that already exist
|
|
12
|
+
* (`runAgentScanners` → the prompt-injection fuzzer, exfil-path graph,
|
|
13
|
+
* sandbox audit, credential-scope audit, manifest audit). Those scanners
|
|
14
|
+
* are deterministic and the payload corpus is fixed, so the score is
|
|
15
|
+
* reproducible run-to-run for a given manifest — a number you can put on a
|
|
16
|
+
* slide and a gate you can fail a build on.
|
|
17
|
+
*
|
|
18
|
+
* Two deliberately separate measures, because they behave differently:
|
|
19
|
+
*
|
|
20
|
+
* - **Injection resistance (headline):** the share of tools that resisted
|
|
21
|
+
* every payload in the battery. A behavioral, normalized 0–100 score.
|
|
22
|
+
* - **Exposure surface (context):** counts of exfil paths / sandbox
|
|
23
|
+
* escapes / over-scoped credentials / manifest issues. These scale with
|
|
24
|
+
* tool count and breadth — a broad security tool legitimately has a
|
|
25
|
+
* large surface (which is exactly why our own self-cert *exempts* the
|
|
26
|
+
* sandbox/exfil scanners as false-positive-heavy for this codebase). So
|
|
27
|
+
* they are reported as surface, NOT folded into the resistance score
|
|
28
|
+
* where raw counts would meaninglessly floor it to zero.
|
|
29
|
+
*
|
|
30
|
+
* Honest scope: this is the reproducible, offline/static floor (tool
|
|
31
|
+
* surface, manifest hygiene, susceptibility patterns), not a live agent
|
|
32
|
+
* executing payloads against a running model. A live-runtime battery is a
|
|
33
|
+
* future extension.
|
|
34
|
+
*
|
|
35
|
+
* @module eval/redteam-harness
|
|
36
|
+
*/
|
|
37
|
+
import type { AgentScannerType, MCPManifest } from "../scanners/agent/types.js";
|
|
38
|
+
import type { DeterministicFinding } from "../scanners/types.js";
|
|
39
|
+
import type { Severity } from "../certification/types.js";
|
|
40
|
+
/** Exposure dimensions and the scanner that feeds each. */
|
|
41
|
+
export declare const EXPOSURE_DIMENSIONS: ReadonlyArray<{
|
|
42
|
+
dimension: string;
|
|
43
|
+
scanner: AgentScannerType;
|
|
44
|
+
}>;
|
|
45
|
+
export interface InjectionResistance {
|
|
46
|
+
/** 0–100: share of tools that resisted every payload in the battery. */
|
|
47
|
+
score: number;
|
|
48
|
+
grade: string;
|
|
49
|
+
toolsTested: number;
|
|
50
|
+
vulnerableTools: number;
|
|
51
|
+
resistantTools: number;
|
|
52
|
+
}
|
|
53
|
+
export interface ExposureDimension {
|
|
54
|
+
dimension: string;
|
|
55
|
+
scanner: AgentScannerType;
|
|
56
|
+
findingCount: number;
|
|
57
|
+
/** critical + high findings — the ones worth triage. */
|
|
58
|
+
criticalHigh: number;
|
|
59
|
+
bySeverity: Record<Severity, number>;
|
|
60
|
+
clean: boolean;
|
|
61
|
+
}
|
|
62
|
+
export interface RedTeamReport {
|
|
63
|
+
target: string;
|
|
64
|
+
manifestName: string;
|
|
65
|
+
manifestVersion?: string;
|
|
66
|
+
corpus: "quick" | "standard" | "thorough";
|
|
67
|
+
injectionResistance: InjectionResistance;
|
|
68
|
+
exposure: ExposureDimension[];
|
|
69
|
+
/** Headline resistance score (== injectionResistance.score). */
|
|
70
|
+
overallScore: number;
|
|
71
|
+
grade: string;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Tool-level injection resistance from the fuzzer's findings: a tool is
|
|
75
|
+
* "vulnerable" if it has any per-tool prompt-injection finding (the
|
|
76
|
+
* `prompt-injection:summary` aggregate is excluded). Resistance is the
|
|
77
|
+
* share of tested tools with no such finding. Pure and deterministic.
|
|
78
|
+
*/
|
|
79
|
+
export declare function injectionResistanceScore(findings: DeterministicFinding[], toolsTested: number): InjectionResistance;
|
|
80
|
+
/** Summarize one exposure dimension's findings (counts, not a 0–100 score). */
|
|
81
|
+
export declare function summarizeExposure(dimension: string, scanner: AgentScannerType, findings: DeterministicFinding[]): ExposureDimension;
|
|
82
|
+
export interface RedTeamOptions {
|
|
83
|
+
manifest: MCPManifest;
|
|
84
|
+
target?: string;
|
|
85
|
+
corpus?: "quick" | "standard" | "thorough";
|
|
86
|
+
/** Source path for the source-reading scanners (sandbox audit). */
|
|
87
|
+
sourcePath?: string;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Run the red-team battery against a manifest and return a reproducible
|
|
91
|
+
* resistance report. Runs only the behavioral / red-team-relevant agent
|
|
92
|
+
* scanners (no supply-chain network calls, no baseline-dependent drift).
|
|
93
|
+
*/
|
|
94
|
+
export declare function runRedTeamBenchmark(options: RedTeamOptions): Promise<RedTeamReport>;
|
|
95
|
+
//# sourceMappingURL=redteam-harness.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redteam-harness.d.ts","sourceRoot":"","sources":["../../src/eval/redteam-harness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAGH,OAAO,KAAK,EACV,gBAAgB,EAChB,WAAW,EACZ,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAG1D,2DAA2D;AAC3D,eAAO,MAAM,mBAAmB,EAAE,aAAa,CAAC;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,gBAAgB,CAAC;CAC3B,CAKA,CAAC;AAeF,MAAM,WAAW,mBAAmB;IAClC,wEAAwE;IACxE,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,wDAAwD;IACxD,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACrC,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,OAAO,GAAG,UAAU,GAAG,UAAU,CAAC;IAC1C,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,gEAAgE;IAChE,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,oBAAoB,EAAE,EAChC,WAAW,EAAE,MAAM,GAClB,mBAAmB,CAkBrB;AAED,+EAA+E;AAC/E,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,oBAAoB,EAAE,GAC/B,iBAAiB,CAWnB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,WAAW,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,UAAU,CAAC;IAC3C,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,aAAa,CAAC,CA6CxB"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Red-Team Resistance Harness.
|
|
3
|
+
*
|
|
4
|
+
* The accuracy benchmark (`run-benchmark`, `run-llm-benchmark`) measures
|
|
5
|
+
* how well the engine *detects* vulnerabilities in code. This harness
|
|
6
|
+
* measures the complementary thing the roadmap calls for: a reproducible
|
|
7
|
+
* **behavioral resistance score** for an agent / MCP target — how well it
|
|
8
|
+
* survives a prompt-injection battery, plus the tool-scope / exfiltration
|
|
9
|
+
* surface it exposes.
|
|
10
|
+
*
|
|
11
|
+
* It is a scoring layer over primitives that already exist
|
|
12
|
+
* (`runAgentScanners` → the prompt-injection fuzzer, exfil-path graph,
|
|
13
|
+
* sandbox audit, credential-scope audit, manifest audit). Those scanners
|
|
14
|
+
* are deterministic and the payload corpus is fixed, so the score is
|
|
15
|
+
* reproducible run-to-run for a given manifest — a number you can put on a
|
|
16
|
+
* slide and a gate you can fail a build on.
|
|
17
|
+
*
|
|
18
|
+
* Two deliberately separate measures, because they behave differently:
|
|
19
|
+
*
|
|
20
|
+
* - **Injection resistance (headline):** the share of tools that resisted
|
|
21
|
+
* every payload in the battery. A behavioral, normalized 0–100 score.
|
|
22
|
+
* - **Exposure surface (context):** counts of exfil paths / sandbox
|
|
23
|
+
* escapes / over-scoped credentials / manifest issues. These scale with
|
|
24
|
+
* tool count and breadth — a broad security tool legitimately has a
|
|
25
|
+
* large surface (which is exactly why our own self-cert *exempts* the
|
|
26
|
+
* sandbox/exfil scanners as false-positive-heavy for this codebase). So
|
|
27
|
+
* they are reported as surface, NOT folded into the resistance score
|
|
28
|
+
* where raw counts would meaninglessly floor it to zero.
|
|
29
|
+
*
|
|
30
|
+
* Honest scope: this is the reproducible, offline/static floor (tool
|
|
31
|
+
* surface, manifest hygiene, susceptibility patterns), not a live agent
|
|
32
|
+
* executing payloads against a running model. A live-runtime battery is a
|
|
33
|
+
* future extension.
|
|
34
|
+
*
|
|
35
|
+
* @module eval/redteam-harness
|
|
36
|
+
*/
|
|
37
|
+
import { runAgentScanners } from "../scanners/agent/index.js";
|
|
38
|
+
import { getGrade } from "./metrics.js";
|
|
39
|
+
/** Exposure dimensions and the scanner that feeds each. */
|
|
40
|
+
export const EXPOSURE_DIMENSIONS = [
|
|
41
|
+
{ dimension: "exfil-path", scanner: "exfil-path-graph" },
|
|
42
|
+
{ dimension: "sandbox", scanner: "sandbox-audit" },
|
|
43
|
+
{ dimension: "credential-scope", scanner: "credential-scope-audit" },
|
|
44
|
+
{ dimension: "manifest-hygiene", scanner: "manifest-audit" },
|
|
45
|
+
];
|
|
46
|
+
function emptySeverityCount() {
|
|
47
|
+
return { critical: 0, high: 0, medium: 0, low: 0, info: 0 };
|
|
48
|
+
}
|
|
49
|
+
function countBySeverity(findings) {
|
|
50
|
+
const bySeverity = emptySeverityCount();
|
|
51
|
+
for (const f of findings) {
|
|
52
|
+
const severity = (f.severity ?? "info");
|
|
53
|
+
bySeverity[severity] = (bySeverity[severity] ?? 0) + 1;
|
|
54
|
+
}
|
|
55
|
+
return bySeverity;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Tool-level injection resistance from the fuzzer's findings: a tool is
|
|
59
|
+
* "vulnerable" if it has any per-tool prompt-injection finding (the
|
|
60
|
+
* `prompt-injection:summary` aggregate is excluded). Resistance is the
|
|
61
|
+
* share of tested tools with no such finding. Pure and deterministic.
|
|
62
|
+
*/
|
|
63
|
+
export function injectionResistanceScore(findings, toolsTested) {
|
|
64
|
+
const vulnerable = new Set();
|
|
65
|
+
for (const f of findings) {
|
|
66
|
+
if (!f.ruleId.startsWith("prompt-injection:"))
|
|
67
|
+
continue;
|
|
68
|
+
if (f.ruleId === "prompt-injection:summary")
|
|
69
|
+
continue;
|
|
70
|
+
const tool = f.metadata?.tool ?? f.message;
|
|
71
|
+
vulnerable.add(tool);
|
|
72
|
+
}
|
|
73
|
+
const vulnerableTools = vulnerable.size;
|
|
74
|
+
const resistantTools = Math.max(0, toolsTested - vulnerableTools);
|
|
75
|
+
const score = toolsTested === 0 ? 0 : Math.round((100 * resistantTools) / toolsTested);
|
|
76
|
+
return {
|
|
77
|
+
score,
|
|
78
|
+
grade: getGrade(score / 100),
|
|
79
|
+
toolsTested,
|
|
80
|
+
vulnerableTools,
|
|
81
|
+
resistantTools,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/** Summarize one exposure dimension's findings (counts, not a 0–100 score). */
|
|
85
|
+
export function summarizeExposure(dimension, scanner, findings) {
|
|
86
|
+
const bySeverity = countBySeverity(findings);
|
|
87
|
+
const criticalHigh = bySeverity.critical + bySeverity.high;
|
|
88
|
+
return {
|
|
89
|
+
dimension,
|
|
90
|
+
scanner,
|
|
91
|
+
findingCount: findings.length,
|
|
92
|
+
criticalHigh,
|
|
93
|
+
bySeverity,
|
|
94
|
+
clean: findings.length === 0,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Run the red-team battery against a manifest and return a reproducible
|
|
99
|
+
* resistance report. Runs only the behavioral / red-team-relevant agent
|
|
100
|
+
* scanners (no supply-chain network calls, no baseline-dependent drift).
|
|
101
|
+
*/
|
|
102
|
+
export async function runRedTeamBenchmark(options) {
|
|
103
|
+
const corpus = options.corpus ?? "quick";
|
|
104
|
+
const result = await runAgentScanners({
|
|
105
|
+
target: { manifest: options.manifest, sourcePath: options.sourcePath },
|
|
106
|
+
authorized: true,
|
|
107
|
+
scanners: {
|
|
108
|
+
promptInjection: true,
|
|
109
|
+
exfilPath: true,
|
|
110
|
+
sandboxAudit: true,
|
|
111
|
+
credentialScope: true,
|
|
112
|
+
manifestAudit: true,
|
|
113
|
+
toolDrift: false,
|
|
114
|
+
permissionMinimiser: false,
|
|
115
|
+
supplyChain: false,
|
|
116
|
+
},
|
|
117
|
+
fuzzerCorpus: corpus,
|
|
118
|
+
createBaselineIfMissing: false,
|
|
119
|
+
});
|
|
120
|
+
const findingsByScanner = new Map();
|
|
121
|
+
for (const scan of result.scanners) {
|
|
122
|
+
findingsByScanner.set(scan.scanner, scan.findings);
|
|
123
|
+
}
|
|
124
|
+
const injectionResistance = injectionResistanceScore(findingsByScanner.get("prompt-injection-fuzzer") ?? [], options.manifest.tools.length);
|
|
125
|
+
const exposure = EXPOSURE_DIMENSIONS.filter((d) => findingsByScanner.has(d.scanner)).map((d) => summarizeExposure(d.dimension, d.scanner, findingsByScanner.get(d.scanner) ?? []));
|
|
126
|
+
return {
|
|
127
|
+
target: options.target ?? options.manifest.name,
|
|
128
|
+
manifestName: options.manifest.name,
|
|
129
|
+
manifestVersion: options.manifest.version,
|
|
130
|
+
corpus,
|
|
131
|
+
injectionResistance,
|
|
132
|
+
exposure,
|
|
133
|
+
overallScore: injectionResistance.score,
|
|
134
|
+
grade: injectionResistance.grade,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=redteam-harness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redteam-harness.js","sourceRoot":"","sources":["../../src/eval/redteam-harness.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collector.d.ts","sourceRoot":"","sources":["../../src/evidence/collector.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"collector.d.ts","sourceRoot":"","sources":["../../src/evidence/collector.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,OAAO,KAAK,EACV,cAAc,EACd,gBAAgB,EAIhB,sBAAsB,EACtB,qBAAqB,EACtB,MAAM,YAAY,CAAC;AAqMpB;;GAEG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,qBAAqB,CAAC,CAuLhC;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAG3E;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CA6D7E"}
|
|
@@ -10,6 +10,7 @@ import { join, basename } from "path";
|
|
|
10
10
|
import { createHash, randomUUID } from "crypto";
|
|
11
11
|
import { platform, release, hostname } from "os";
|
|
12
12
|
import { logger } from "../logger.js";
|
|
13
|
+
import { signContent } from "../sbom/signing.js";
|
|
13
14
|
const VASPERA_DIR = ".vaspera";
|
|
14
15
|
const DEFAULT_MAX_INLINE_SIZE = 50 * 1024; // 50KB
|
|
15
16
|
/**
|
|
@@ -183,7 +184,7 @@ function createInlineArtifact(content, type, name, description) {
|
|
|
183
184
|
* Collect evidence artifacts
|
|
184
185
|
*/
|
|
185
186
|
export async function collectEvidence(options) {
|
|
186
|
-
const { projectPath, certificationId, frameworks = [], includeSbom = true, includeHistory = true, includeScanResults = true, includeConfig = true, maxInlineSize = DEFAULT_MAX_INLINE_SIZE, } = options;
|
|
187
|
+
const { projectPath, certificationId, frameworks = [], includeSbom = true, includeHistory = true, includeScanResults = true, includeConfig = true, sign = false, maxInlineSize = DEFAULT_MAX_INLINE_SIZE, } = options;
|
|
187
188
|
const warnings = [];
|
|
188
189
|
const artifacts = [];
|
|
189
190
|
logger.info("evidence.collect.start", { projectPath, certificationId });
|
|
@@ -270,6 +271,25 @@ export async function collectEvidence(options) {
|
|
|
270
271
|
artifacts,
|
|
271
272
|
bundleDigest,
|
|
272
273
|
};
|
|
274
|
+
// Optionally sign the bundle digest with Sigstore. Mirrors the agent
|
|
275
|
+
// certificate: we sign the bundleDigest (the tamper-evidence anchor) and
|
|
276
|
+
// attach the full Sigstore bundle so verification is independent. Degrades
|
|
277
|
+
// gracefully to unsigned (with a warning) when no OIDC identity is present.
|
|
278
|
+
if (sign) {
|
|
279
|
+
const signed = await signContent(bundleDigest);
|
|
280
|
+
if (signed.signed) {
|
|
281
|
+
bundle.signature = {
|
|
282
|
+
signed: true,
|
|
283
|
+
digest: signed.digest,
|
|
284
|
+
signedAt: signed.signedAt,
|
|
285
|
+
rekorLogIndex: signed.bundle?.verificationMaterial?.tlogEntries?.[0]?.logIndex,
|
|
286
|
+
bundle: signed.bundle,
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
else {
|
|
290
|
+
warnings.push(`Evidence bundle signing requested but produced an unsigned bundle: ${signed.error ?? "no OIDC signing identity available"}`);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
273
293
|
logger.info("evidence.collect.complete", {
|
|
274
294
|
bundleId: bundle.id,
|
|
275
295
|
artifactCount: artifacts.length,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collector.js","sourceRoot":"","sources":["../../src/evidence/collector.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"collector.js","sourceRoot":"","sources":["../../src/evidence/collector.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/evidence/store.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,KAAK,EACV,cAAc,EACd,oBAAoB,EACrB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/evidence/store.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,KAAK,EACV,cAAc,EACd,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAsBpB;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,MAAM,CAAC,CAUjB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAWhC;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAiCpG;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,oBAAoB,CAAC,CAsE/B;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IACnE,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC,CA0CD"}
|
package/dist/evidence/store.js
CHANGED
|
@@ -10,6 +10,7 @@ import { join } from "path";
|
|
|
10
10
|
import { createHash } from "crypto";
|
|
11
11
|
import { logger } from "../logger.js";
|
|
12
12
|
import { calculateBundleDigest } from "./collector.js";
|
|
13
|
+
import { verifySignedArtifact } from "../sbom/signing.js";
|
|
13
14
|
const EVIDENCE_DIR = ".vaspera/evidence";
|
|
14
15
|
/**
|
|
15
16
|
* Ensure evidence directory exists
|
|
@@ -115,13 +116,36 @@ export async function verifyEvidenceBundle(bundle) {
|
|
|
115
116
|
}
|
|
116
117
|
// Note: For non-inline artifacts, we can't verify without accessing the stored file
|
|
117
118
|
}
|
|
118
|
-
// Verify signature if present
|
|
119
|
+
// Verify the Sigstore signature if present — real verification, not just
|
|
120
|
+
// presence. The bundle digest (verified above) is the signed content, so we
|
|
121
|
+
// reconstruct the SignedArtifact and run the same check the certificate path
|
|
122
|
+
// uses (digest match + transparency-log entries).
|
|
119
123
|
if (bundle.signature) {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
124
|
+
const sig = bundle.signature;
|
|
125
|
+
if (sig.signed && sig.bundle) {
|
|
126
|
+
const artifact = {
|
|
127
|
+
content: bundle.bundleDigest,
|
|
128
|
+
digest: sig.digest,
|
|
129
|
+
bundle: sig.bundle,
|
|
130
|
+
signedAt: sig.signedAt,
|
|
131
|
+
signed: true,
|
|
132
|
+
};
|
|
133
|
+
const sigResult = await verifySignedArtifact(artifact);
|
|
134
|
+
result.signatureValid = sigResult.valid;
|
|
135
|
+
if (!sigResult.valid) {
|
|
136
|
+
const detail = sigResult.errors.map((e) => `signature: ${e}`).join("; ");
|
|
137
|
+
result.error = result.error ? `${result.error}; ${detail}` : detail;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
// A signature object that is not actually signed is not valid.
|
|
142
|
+
result.signatureValid = false;
|
|
143
|
+
}
|
|
123
144
|
}
|
|
124
|
-
result.verified =
|
|
145
|
+
result.verified =
|
|
146
|
+
result.artifactsIntact &&
|
|
147
|
+
result.failedArtifacts.length === 0 &&
|
|
148
|
+
result.signatureValid !== false;
|
|
125
149
|
logger.info("evidence.verify.complete", {
|
|
126
150
|
bundleId: bundle.id,
|
|
127
151
|
verified: result.verified,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/evidence/store.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAKtC,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/evidence/store.ts"],"names":[],"mappings":"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"}
|
package/dist/evidence/types.d.ts
CHANGED
|
@@ -101,16 +101,23 @@ export interface EvidenceBundle {
|
|
|
101
101
|
artifacts: EvidenceArtifact[];
|
|
102
102
|
/** Overall bundle digest (SHA-256 of all artifact digests) */
|
|
103
103
|
bundleDigest: string;
|
|
104
|
-
/**
|
|
104
|
+
/**
|
|
105
|
+
* Sigstore signature over the bundle digest. Shaped to mirror the agent
|
|
106
|
+
* certificate's signature so the same verification path (verifySignedArtifact)
|
|
107
|
+
* can be reused: it carries the full Sigstore bundle and the content digest,
|
|
108
|
+
* not just opaque fields.
|
|
109
|
+
*/
|
|
105
110
|
signature?: {
|
|
106
|
-
/**
|
|
107
|
-
|
|
108
|
-
/**
|
|
109
|
-
|
|
110
|
-
/**
|
|
111
|
-
|
|
112
|
-
/** Rekor log
|
|
113
|
-
|
|
111
|
+
/** Whether signing succeeded (only set when it did). */
|
|
112
|
+
signed: boolean;
|
|
113
|
+
/** sha256 of the signed content (the bundle digest). */
|
|
114
|
+
digest: string;
|
|
115
|
+
/** ISO timestamp of signing. */
|
|
116
|
+
signedAt: string;
|
|
117
|
+
/** Rekor transparency-log index, if the bundle was logged. */
|
|
118
|
+
rekorLogIndex?: string;
|
|
119
|
+
/** Full Sigstore bundle (needed to verify; omitted when unsigned). */
|
|
120
|
+
bundle?: unknown;
|
|
114
121
|
};
|
|
115
122
|
/** Bundle metadata */
|
|
116
123
|
metadata?: Record<string, unknown>;
|