@securecode-ai/mcp 0.6.1 → 0.8.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/README.md +32 -3
- package/dist/api/types.d.ts +27 -0
- package/dist/approval/policy.js +7 -2
- package/dist/approval/policy.js.map +1 -1
- package/dist/attack/agentCorroboration.d.ts +14 -0
- package/dist/attack/agentCorroboration.js +98 -0
- package/dist/attack/agentCorroboration.js.map +1 -0
- package/dist/attack/agentLoop.js +9 -6
- package/dist/attack/agentLoop.js.map +1 -1
- package/dist/attack/agentScanExecutor.d.ts +6 -2
- package/dist/attack/agentScanExecutor.js +62 -21
- package/dist/attack/agentScanExecutor.js.map +1 -1
- package/dist/attack/agentScanLoop.js +130 -94
- package/dist/attack/agentScanLoop.js.map +1 -1
- package/dist/attack/agentScanProtocol.d.ts +13 -4
- package/dist/attack/agentScanProtocol.js.map +1 -1
- package/dist/attack/architectureScoutLoop.js +1 -1
- package/dist/attack/architectureScoutLoop.js.map +1 -1
- package/dist/attack/investigationState.d.ts +32 -4
- package/dist/attack/investigationState.js +98 -10
- package/dist/attack/investigationState.js.map +1 -1
- package/dist/attack/observationLimits.d.ts +12 -0
- package/dist/attack/observationLimits.js +16 -0
- package/dist/attack/observationLimits.js.map +1 -0
- package/dist/attack/policy.d.ts +1 -0
- package/dist/attack/policy.js +1 -0
- package/dist/attack/policy.js.map +1 -1
- package/dist/attack/probeRules.d.ts +51 -0
- package/dist/attack/probeRules.js +291 -0
- package/dist/attack/probeRules.js.map +1 -0
- package/dist/attack/protocol.d.ts +16 -0
- package/dist/attack/qualityMetrics.js +3 -0
- package/dist/attack/qualityMetrics.js.map +1 -1
- package/dist/attack/report.d.ts +3 -1
- package/dist/attack/report.js +4 -2
- package/dist/attack/report.js.map +1 -1
- package/dist/attack/runtimeProbe.d.ts +71 -0
- package/dist/attack/runtimeProbe.js +300 -0
- package/dist/attack/runtimeProbe.js.map +1 -0
- package/dist/attack/scanScheduler.d.ts +7 -0
- package/dist/attack/scanScheduler.js +58 -33
- package/dist/attack/scanScheduler.js.map +1 -1
- package/dist/audit/findingReviewQueue.d.ts +1 -1
- package/dist/audit/findingReviewQueue.js.map +1 -1
- package/dist/auth/credentialStore.js +1 -1
- package/dist/auth/credentialStore.js.map +1 -1
- package/dist/auth/keychain.js +80 -80
- package/dist/auth/keychain.js.map +1 -1
- package/dist/mcp/server.js +5 -1
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools.js +8 -9
- package/dist/mcp/tools.js.map +1 -1
- package/dist/project-map/architectureContext.d.ts +1 -1
- package/dist/project-map/architectureContext.js +1 -1
- package/dist/project-map/scanCache.d.ts +6 -1
- package/dist/project-map/scanCache.js +6 -1
- package/dist/project-map/scanCache.js.map +1 -1
- package/dist/tools/agentScan.d.ts +9 -1
- package/dist/tools/agentScan.js +156 -5
- package/dist/tools/agentScan.js.map +1 -1
- package/dist/tools/attack.js +1 -1
- package/dist/tools/attack.js.map +1 -1
- package/dist/tools/map.js +1 -1
- package/dist/utils/verificationSandbox.js +43 -2
- package/dist/utils/verificationSandbox.js.map +1 -1
- package/package.json +62 -62
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Runtime probe verdict rules — port of api/src/services/sandboxRules.ts.
|
|
4
|
+
*
|
|
5
|
+
* Seven deterministic response rules (zero LLM) that evaluate whether a probe
|
|
6
|
+
* plan's attack request actually worked against the user's local dev server.
|
|
7
|
+
* Pure functions: (attack request, attack response, baseline) → verdict.
|
|
8
|
+
* No side effects, no I/O. Kept in semantic parity with the API's sandbox
|
|
9
|
+
* rules — the same inputs must yield the same verdicts and rule identifiers.
|
|
10
|
+
*
|
|
11
|
+
* Verdict vocabulary:
|
|
12
|
+
* 'confirmed-bypass' → PROVEN (the exploit worked)
|
|
13
|
+
* 'refuted' → UNPROVEN (the control held)
|
|
14
|
+
* 'inconclusive' → needs AI adjudicator
|
|
15
|
+
* 'spawn-failed' → server never came up
|
|
16
|
+
*/
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.SECRET_PATTERN = exports.REJECTION_STATUSES = void 0;
|
|
19
|
+
exports.passesLuhn = passesLuhn;
|
|
20
|
+
exports.applyProbeRules = applyProbeRules;
|
|
21
|
+
exports.REJECTION_STATUSES = [400, 401, 403, 404, 405, 409, 415, 422, 429];
|
|
22
|
+
const REJECTION_STATUS_SET = new Set(exports.REJECTION_STATUSES);
|
|
23
|
+
exports.SECRET_PATTERN = '(' +
|
|
24
|
+
'sk-[A-Za-z0-9]{20,}' +
|
|
25
|
+
'|AKIA[0-9A-Z]{16}' +
|
|
26
|
+
'|ghp_[A-Za-z0-9]{36}' +
|
|
27
|
+
'|eyJ[A-Za-z0-9_-]{10,}\\.[A-Za-z0-9_-]{10,}\\.[A-Za-z0-9_-]{10,}' +
|
|
28
|
+
'|-----BEGIN [A-Z ]*PRIVATE KEY-----' +
|
|
29
|
+
'|password["\']?\\s*[:=]\\s*["\'][^"\']{4,}' +
|
|
30
|
+
'|api[_-]?key["\']?\\s*[:=]\\s*["\'][^"\']{8,}' +
|
|
31
|
+
'|secret["\']?\\s*[:=]\\s*["\'][^"\']{8,}' +
|
|
32
|
+
')';
|
|
33
|
+
const SECRET_REGEX_GLOBAL = new RegExp(exports.SECRET_PATTERN, 'gi');
|
|
34
|
+
const EMAIL_REGEX = /[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}/g;
|
|
35
|
+
const PHONE_REGEX = /(?:\+\d{1,3}[\s.-]\d{2,4}[\s.-]?\d{3,4}[\s.-]\d{3,4}|\(\d{3}\)\s?\d{3}[\s.-]\d{4}|\b\d{3}[\s.-]\d{3}[\s.-]\d{4}\b)/g;
|
|
36
|
+
const CREDIT_CARD_REGEX = /\b(?:\d[ -]?){12,18}\d\b/g;
|
|
37
|
+
const STACKTRACE_REGEX = /at\s+[A-Za-z0-9_.]+\s+\(.*?:\d+:\d+\)|Traceback \(most recent call last\)|\bError:\s.+\n\s+at\b|stack\s+trace/i;
|
|
38
|
+
const MATCH_ANYTHING = new Set(['', '.*', '.+', '(.*)', '(.+)', '[\\s\\S]*', '[\\s\\S]+']);
|
|
39
|
+
function isMatchAnything(pattern) {
|
|
40
|
+
return MATCH_ANYTHING.has(pattern.trim().replace(/^\^/, '').replace(/\$$/, ''));
|
|
41
|
+
}
|
|
42
|
+
function bodySignatureMatches(pattern, body) {
|
|
43
|
+
if (!pattern || isMatchAnything(pattern))
|
|
44
|
+
return false;
|
|
45
|
+
try {
|
|
46
|
+
return new RegExp(pattern, 'i').test(body);
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function headerSignatureMatches(patterns, headers) {
|
|
53
|
+
if (!patterns)
|
|
54
|
+
return false;
|
|
55
|
+
const entries = Object.entries(patterns);
|
|
56
|
+
if (entries.length === 0)
|
|
57
|
+
return false;
|
|
58
|
+
const lower = {};
|
|
59
|
+
for (const [k, v] of Object.entries(headers))
|
|
60
|
+
lower[k.toLowerCase()] = v;
|
|
61
|
+
return entries.every(([name, regex]) => {
|
|
62
|
+
const value = lower[name.toLowerCase()];
|
|
63
|
+
if (value === undefined)
|
|
64
|
+
return false;
|
|
65
|
+
try {
|
|
66
|
+
return new RegExp(regex, 'i').test(value);
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
function passesLuhn(digits) {
|
|
74
|
+
if (digits.length < 13 || digits.length > 19)
|
|
75
|
+
return false;
|
|
76
|
+
let sum = 0, double = false;
|
|
77
|
+
for (let i = digits.length - 1; i >= 0; i--) {
|
|
78
|
+
let d = digits.charCodeAt(i) - 48;
|
|
79
|
+
if (double) {
|
|
80
|
+
d *= 2;
|
|
81
|
+
if (d > 9)
|
|
82
|
+
d -= 9;
|
|
83
|
+
}
|
|
84
|
+
sum += d;
|
|
85
|
+
double = !double;
|
|
86
|
+
}
|
|
87
|
+
return sum % 10 === 0;
|
|
88
|
+
}
|
|
89
|
+
function extractPii(text) {
|
|
90
|
+
const strong = new Set();
|
|
91
|
+
const weak = new Set();
|
|
92
|
+
for (const m of text.match(EMAIL_REGEX) || [])
|
|
93
|
+
strong.add(m);
|
|
94
|
+
for (const m of text.match(CREDIT_CARD_REGEX) || []) {
|
|
95
|
+
if (passesLuhn(m.replace(/[^0-9]/g, '')))
|
|
96
|
+
strong.add(m);
|
|
97
|
+
}
|
|
98
|
+
for (const m of text.match(PHONE_REGEX) || [])
|
|
99
|
+
weak.add(m);
|
|
100
|
+
return { strong, weak };
|
|
101
|
+
}
|
|
102
|
+
function newSecrets(baselineBody, attackBody) {
|
|
103
|
+
const baseMatches = new Set();
|
|
104
|
+
if (baselineBody) {
|
|
105
|
+
for (const m of baselineBody.match(SECRET_REGEX_GLOBAL) || [])
|
|
106
|
+
baseMatches.add(m);
|
|
107
|
+
}
|
|
108
|
+
SECRET_REGEX_GLOBAL.lastIndex = 0;
|
|
109
|
+
const attackMatches = new Set();
|
|
110
|
+
for (const m of attackBody.match(SECRET_REGEX_GLOBAL) || [])
|
|
111
|
+
attackMatches.add(m);
|
|
112
|
+
return [...attackMatches].filter(m => !baseMatches.has(m));
|
|
113
|
+
}
|
|
114
|
+
function samplePii(items) {
|
|
115
|
+
return items.slice(0, 3).join(', ') + (items.length > 3 ? ` (+${items.length - 3} more)` : '');
|
|
116
|
+
}
|
|
117
|
+
const NOT_CONFIRMED = { confirmed: false, reason: '' };
|
|
118
|
+
function evaluateExploitSignature(request, attack) {
|
|
119
|
+
const basis = request.successConfirmedBy ?? 'signature';
|
|
120
|
+
if (basis === 'multi-request') {
|
|
121
|
+
return {
|
|
122
|
+
confirmed: false, reason: '',
|
|
123
|
+
declined: request.successEvidenceNeeded
|
|
124
|
+
|| 'This vulnerability class cannot be decided from one request and one response.',
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
if (!request.successStatus || request.successStatus.length === 0)
|
|
128
|
+
return NOT_CONFIRMED;
|
|
129
|
+
if (!request.successStatus.includes(attack.statusCode))
|
|
130
|
+
return NOT_CONFIRMED;
|
|
131
|
+
if (basis === 'latency') {
|
|
132
|
+
const window = request.successLatencyMs;
|
|
133
|
+
if (!window || window.gte === undefined) {
|
|
134
|
+
return {
|
|
135
|
+
confirmed: false, reason: '',
|
|
136
|
+
declined: 'This class is detected by an induced delay, but the pattern declared no latency threshold.',
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
if (attack.latencyMs < window.gte)
|
|
140
|
+
return NOT_CONFIRMED;
|
|
141
|
+
if (window.lte !== undefined && attack.latencyMs > window.lte)
|
|
142
|
+
return NOT_CONFIRMED;
|
|
143
|
+
if (request.successBodyPattern && !isMatchAnything(request.successBodyPattern) &&
|
|
144
|
+
!bodySignatureMatches(request.successBodyPattern, attack.body))
|
|
145
|
+
return NOT_CONFIRMED;
|
|
146
|
+
return {
|
|
147
|
+
confirmed: true,
|
|
148
|
+
reason: `Response took ${attack.latencyMs}ms against the pattern's ${window.gte}ms threshold at status ${attack.statusCode}.`,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
const hasBody = !!request.successBodyPattern && !isMatchAnything(request.successBodyPattern);
|
|
152
|
+
const hasHeaders = !!request.successHeaders && Object.keys(request.successHeaders).length > 0;
|
|
153
|
+
if (!hasBody && !hasHeaders) {
|
|
154
|
+
return {
|
|
155
|
+
confirmed: false, reason: '',
|
|
156
|
+
declined: 'The attack pattern declared no evidence beyond a status code, and status is what an ordinary endpoint returns.',
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
if (hasBody && !bodySignatureMatches(request.successBodyPattern, attack.body))
|
|
160
|
+
return NOT_CONFIRMED;
|
|
161
|
+
if (hasHeaders && !headerSignatureMatches(request.successHeaders, attack.headers))
|
|
162
|
+
return NOT_CONFIRMED;
|
|
163
|
+
const evidence = [
|
|
164
|
+
hasBody ? `body matching /${request.successBodyPattern}/` : '',
|
|
165
|
+
hasHeaders ? `headers matching ${JSON.stringify(request.successHeaders)}` : '',
|
|
166
|
+
].filter(Boolean).join(' and ');
|
|
167
|
+
return {
|
|
168
|
+
confirmed: true,
|
|
169
|
+
reason: `Response matched the attack pattern's documented success signature (status ${attack.statusCode}, ${evidence}).`,
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
function applyProbeRules(attack, attackResp, baseline, baselineResp, env = process.env) {
|
|
173
|
+
if (!attackResp) {
|
|
174
|
+
return {
|
|
175
|
+
verdict: 'inconclusive', rule: 'none',
|
|
176
|
+
reason: 'Attack request errored — no response to evaluate.',
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
const expected = attack.expectedStatus || [];
|
|
180
|
+
// Auth-precheck
|
|
181
|
+
if (attack.authRequired && attackResp.statusCode === 200 &&
|
|
182
|
+
attack.authEnvVars && attack.authEnvVars.length > 0) {
|
|
183
|
+
const configured = attack.authEnvVars.every(v => !!env[v]);
|
|
184
|
+
if (!configured) {
|
|
185
|
+
return {
|
|
186
|
+
verdict: 'inconclusive', rule: 'auth-precheck',
|
|
187
|
+
reason: `Endpoint flagged auth-required but auth env (${attack.authEnvVars.join(', ')}) is not set in the sandbox.`,
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
// Rule 0: exploit signature
|
|
192
|
+
const signature = evaluateExploitSignature(attack, attackResp);
|
|
193
|
+
if (signature.confirmed) {
|
|
194
|
+
return { verdict: 'confirmed-bypass', rule: 'exploit-signature', reason: signature.reason, requiredEvidence: ['exploit-signature-matched'] };
|
|
195
|
+
}
|
|
196
|
+
// Rule 1: status mismatch
|
|
197
|
+
if (expected.length > 0 && !expected.includes(attackResp.statusCode)) {
|
|
198
|
+
const predictedBlocked = expected.every(s => s === 401 || s === 403 || s === 404 || s >= 500);
|
|
199
|
+
if (predictedBlocked && attackResp.statusCode >= 200 && attackResp.statusCode < 300) {
|
|
200
|
+
return {
|
|
201
|
+
verdict: 'confirmed-bypass', rule: 'status-mismatch',
|
|
202
|
+
reason: `Predicted blocked (${expected.join('/')}) but got ${attackResp.statusCode}.`,
|
|
203
|
+
requiredEvidence: ['baseline-returned-blocked-status', 'exploit-returned-success-status'],
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
// Rule 2: auth bypass
|
|
208
|
+
if (baselineResp && (baselineResp.statusCode === 401 || baselineResp.statusCode === 403) &&
|
|
209
|
+
attackResp.statusCode >= 200 && attackResp.statusCode < 300) {
|
|
210
|
+
if (!attackResp.body || attackResp.body.trim().length === 0) {
|
|
211
|
+
return {
|
|
212
|
+
verdict: 'inconclusive', rule: 'auth-bypass',
|
|
213
|
+
reason: `Baseline returned ${baselineResp.statusCode}, attack returned ${attackResp.statusCode}, but response body is empty — cannot confirm protected resource was accessed.`,
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
return {
|
|
217
|
+
verdict: 'confirmed-bypass', rule: 'auth-bypass',
|
|
218
|
+
reason: `Baseline returned ${baselineResp.statusCode}, attack returned ${attackResp.statusCode} with ${attackResp.body.length} bytes of response body.`,
|
|
219
|
+
requiredEvidence: ['baseline-returned-auth-error', 'exploit-returned-success', 'response-body-non-empty'],
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
// Rule 3: secret leak
|
|
223
|
+
const leakedSecrets = newSecrets(baselineResp?.body ?? null, attackResp.body);
|
|
224
|
+
if (leakedSecrets.length > 0) {
|
|
225
|
+
return {
|
|
226
|
+
verdict: baselineResp ? 'confirmed-bypass' : 'inconclusive', rule: 'secret-leak',
|
|
227
|
+
reason: baselineResp
|
|
228
|
+
? 'Attack response body contains a secret that the baseline did not return.'
|
|
229
|
+
: 'Attack response body matches a secret pattern, but there is no baseline.',
|
|
230
|
+
requiredEvidence: ['baseline-no-secret', 'exploit-secret-present'],
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
// Rule 4: PII leak
|
|
234
|
+
const atkPii = extractPii(attackResp.body);
|
|
235
|
+
if (baselineResp) {
|
|
236
|
+
const basePii = extractPii(baselineResp.body);
|
|
237
|
+
const leakedStrong = [...atkPii.strong].filter(p => !basePii.strong.has(p));
|
|
238
|
+
if (leakedStrong.length > 0) {
|
|
239
|
+
return {
|
|
240
|
+
verdict: 'confirmed-bypass', rule: 'pii-leak',
|
|
241
|
+
reason: `Attack response leaked PII not present in baseline: ${samplePii(leakedStrong)}.`,
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
const leakedWeak = [...atkPii.weak].filter(p => !basePii.weak.has(p));
|
|
245
|
+
if (leakedWeak.length > 0) {
|
|
246
|
+
return {
|
|
247
|
+
verdict: 'inconclusive', rule: 'pii-leak',
|
|
248
|
+
reason: `Attack response contains phone-shaped values absent from the baseline (${samplePii(leakedWeak)}).`,
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
else if (atkPii.strong.size > 0 || atkPii.weak.size > 0) {
|
|
253
|
+
return {
|
|
254
|
+
verdict: 'inconclusive', rule: 'pii-leak',
|
|
255
|
+
reason: 'Attack response contains PII, but there is no baseline to tell a leak from normal output.',
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
// Rule 5: stacktrace disclosure
|
|
259
|
+
if (attackResp.statusCode >= 500 && STACKTRACE_REGEX.test(attackResp.body)) {
|
|
260
|
+
return {
|
|
261
|
+
verdict: 'inconclusive', rule: 'stacktrace-disclosure',
|
|
262
|
+
reason: `Server returned ${attackResp.statusCode} with a stack trace — info leak.`,
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
// Rule 6: blocked
|
|
266
|
+
if (expected.length > 0 && expected.includes(attackResp.statusCode)) {
|
|
267
|
+
return {
|
|
268
|
+
verdict: 'refuted', rule: 'blocked',
|
|
269
|
+
reason: `Attack returned ${attackResp.statusCode} (expected ${expected.join('/')}) with no leak — the control held.`,
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
if (attack.successStatus && attack.successStatus.length > 0 &&
|
|
273
|
+
REJECTION_STATUS_SET.has(attackResp.statusCode)) {
|
|
274
|
+
return {
|
|
275
|
+
verdict: 'refuted', rule: 'blocked',
|
|
276
|
+
reason: `Attack was rejected with ${attackResp.statusCode} and never matched its success signature — the payload does not work.`,
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
// Fallback
|
|
280
|
+
if (signature.declined) {
|
|
281
|
+
return {
|
|
282
|
+
verdict: 'inconclusive', rule: 'none',
|
|
283
|
+
reason: `Not confirmable from a single request (status ${attackResp.statusCode}). ${signature.declined}`,
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
return {
|
|
287
|
+
verdict: 'inconclusive', rule: 'none',
|
|
288
|
+
reason: `No deterministic rule fired (status ${attackResp.statusCode}, no leak detected).`,
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
//# sourceMappingURL=probeRules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"probeRules.js","sourceRoot":"","sources":["../../src/attack/probeRules.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,19 @@
|
|
|
1
1
|
export type AgentHttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'HEAD' | 'OPTIONS';
|
|
2
|
+
/** Optional success signature the runtime probe rules can corroborate. */
|
|
3
|
+
export interface AgentHttpExpect {
|
|
4
|
+
successStatus?: number[];
|
|
5
|
+
successBodyPattern?: string;
|
|
6
|
+
successHeaders?: Record<string, string>;
|
|
7
|
+
successLatencyMs?: {
|
|
8
|
+
gte?: number;
|
|
9
|
+
lte?: number;
|
|
10
|
+
};
|
|
11
|
+
successConfirmedBy?: 'signature' | 'latency' | 'multi-request';
|
|
12
|
+
successEvidenceNeeded?: string;
|
|
13
|
+
expectedStatus?: number[];
|
|
14
|
+
authRequired?: boolean;
|
|
15
|
+
authEnvVars?: string[];
|
|
16
|
+
}
|
|
2
17
|
export interface AgentHttpRequestAction {
|
|
3
18
|
type: 'http_request';
|
|
4
19
|
method: AgentHttpMethod;
|
|
@@ -6,6 +21,7 @@ export interface AgentHttpRequestAction {
|
|
|
6
21
|
headers?: Record<string, string>;
|
|
7
22
|
body?: unknown;
|
|
8
23
|
rationale: string;
|
|
24
|
+
expect?: AgentHttpExpect;
|
|
9
25
|
}
|
|
10
26
|
export interface AgentFinding {
|
|
11
27
|
category: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qualityMetrics.js","sourceRoot":"","sources":["../../src/attack/qualityMetrics.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"qualityMetrics.js","sourceRoot":"","sources":["../../src/attack/qualityMetrics.ts"],"names":[],"mappings":"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"}
|
package/dist/attack/report.d.ts
CHANGED
|
@@ -4,6 +4,8 @@ export interface ReportedAgentFinding extends AgentFinding {
|
|
|
4
4
|
rule?: string;
|
|
5
5
|
reason?: string;
|
|
6
6
|
}
|
|
7
|
+
export type ReportableAgentFinding = AgentFinding & Partial<Pick<ReportedAgentFinding, 'confirmation' | 'rule' | 'reason'>>;
|
|
8
|
+
export declare const SUSPECTED_FINDING_REASON = "Agent-reported finding (deterministic verification not yet implemented)";
|
|
7
9
|
export interface AttackReport {
|
|
8
10
|
status: AgentRunStatus;
|
|
9
11
|
findings: ReportedAgentFinding[];
|
|
@@ -13,4 +15,4 @@ export interface AttackReport {
|
|
|
13
15
|
costSpentUsd: number;
|
|
14
16
|
}
|
|
15
17
|
export declare function redactText(text: string): string;
|
|
16
|
-
export declare function buildReport(status: AgentRunStatus, findings:
|
|
18
|
+
export declare function buildReport(status: AgentRunStatus, findings: ReportableAgentFinding[], transcript: AgentTranscriptStep[], stepsUsed: number, costSpentUsd: number, summary?: string): AttackReport;
|
package/dist/attack/report.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SUSPECTED_FINDING_REASON = void 0;
|
|
3
4
|
exports.redactText = redactText;
|
|
4
5
|
exports.buildReport = buildReport;
|
|
6
|
+
exports.SUSPECTED_FINDING_REASON = 'Agent-reported finding (deterministic verification not yet implemented)';
|
|
5
7
|
const JWT_RE = /eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+/g;
|
|
6
8
|
const API_KEY_RE = /\b[A-Za-z0-9]{32,}\b/g;
|
|
7
9
|
const EMAIL_RE = /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g;
|
|
@@ -18,8 +20,8 @@ function buildReport(status, findings, transcript, stepsUsed, costSpentUsd, summ
|
|
|
18
20
|
status,
|
|
19
21
|
findings: findings.map((f) => ({
|
|
20
22
|
...f,
|
|
21
|
-
confirmation: 'suspected',
|
|
22
|
-
reason:
|
|
23
|
+
confirmation: f.confirmation ?? 'suspected',
|
|
24
|
+
reason: f.reason ?? exports.SUSPECTED_FINDING_REASON,
|
|
23
25
|
})),
|
|
24
26
|
transcript: transcript.map((step) => ({
|
|
25
27
|
action: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/attack/report.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/attack/report.ts"],"names":[],"mappings":";;;AA0BA,gCAMC;AAED,kCA8BC;AAtDY,QAAA,wBAAwB,GAAG,yEAAyE,CAAC;AAWlH,MAAM,MAAM,GAAG,oDAAoD,CAAC;AACpE,MAAM,UAAU,GAAG,uBAAuB,CAAC;AAC3C,MAAM,QAAQ,GAAG,iDAAiD,CAAC;AACnE,MAAM,SAAS,GAAG,4BAA4B,CAAC;AAE/C,SAAgB,UAAU,CAAC,IAAY;IACnC,OAAO,IAAI;SACN,OAAO,CAAC,SAAS,EAAE,mBAAmB,CAAC;SACvC,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC;SACjC,OAAO,CAAC,QAAQ,EAAE,kBAAkB,CAAC;SACrC,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,EAAE,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACpI,CAAC;AAED,SAAgB,WAAW,CACvB,MAAsB,EACtB,QAAkC,EAClC,UAAiC,EACjC,SAAiB,EACjB,YAAoB,EACpB,OAAgB;IAEhB,OAAO;QACH,MAAM;QACN,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3B,GAAG,CAAC;YACJ,YAAY,EAAE,CAAC,CAAC,YAAY,IAAK,WAAqB;YACtD,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,gCAAwB;SAC/C,CAAC,CAAC;QACH,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAClC,MAAM,EAAE;gBACJ,GAAG,IAAI,CAAC,MAAM;gBACd,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;aAC9C;YACD,WAAW,EAAE;gBACT,GAAG,IAAI,CAAC,WAAW;gBACnB,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;gBAChD,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;aAC1C;SACJ,CAAC,CAAC;QACH,OAAO;QACP,SAAS;QACT,YAAY;KACf,CAAC;AACN,CAAC;AAED,SAAS,aAAa,CAAC,OAAgC;IACnD,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IACxB,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3C,IAAI,yCAAyC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACpD,GAAG,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC;QAC1B,CAAC;aAAM,CAAC;YACJ,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACf,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime probe engine — executes a small baseline + attack HTTP plan against
|
|
3
|
+
* the user's local dev server (127.0.0.1) and applies deterministic rules for
|
|
4
|
+
* a PROVEN / UNPROVEN / INCONCLUSIVE verdict.
|
|
5
|
+
*
|
|
6
|
+
* Fires when sandbox verification cannot exercise an HTTP-endpoint-shaped
|
|
7
|
+
* finding (e.g. "Effect-TS module requires full runtime", "Test timed out
|
|
8
|
+
* after 12 rounds"): the probe replays the decisive requests against the
|
|
9
|
+
* real listener instead of a sandboxed boot.
|
|
10
|
+
*/
|
|
11
|
+
import type { AgentHttpExpect } from './protocol';
|
|
12
|
+
export interface ProbeRequest {
|
|
13
|
+
role: 'baseline' | 'attack';
|
|
14
|
+
method: string;
|
|
15
|
+
path: string;
|
|
16
|
+
headers?: Record<string, string>;
|
|
17
|
+
body?: unknown;
|
|
18
|
+
expect?: AgentHttpExpect;
|
|
19
|
+
}
|
|
20
|
+
export interface ProbePlan {
|
|
21
|
+
host: string;
|
|
22
|
+
port: number;
|
|
23
|
+
requests: ProbeRequest[];
|
|
24
|
+
}
|
|
25
|
+
export interface ProbeRequestObservation {
|
|
26
|
+
role: 'baseline' | 'attack';
|
|
27
|
+
method: string;
|
|
28
|
+
path: string;
|
|
29
|
+
statusCode: number;
|
|
30
|
+
latencyMs: number;
|
|
31
|
+
}
|
|
32
|
+
export interface ProbeResult {
|
|
33
|
+
verdict: 'PROVEN' | 'UNPROVEN' | 'INCONCLUSIVE';
|
|
34
|
+
rule?: string;
|
|
35
|
+
reason: string;
|
|
36
|
+
baselineStatus?: number;
|
|
37
|
+
attackStatus?: number;
|
|
38
|
+
evidence: string;
|
|
39
|
+
requests: ProbeRequestObservation[];
|
|
40
|
+
}
|
|
41
|
+
export interface DevServerTarget {
|
|
42
|
+
host: string;
|
|
43
|
+
port: number;
|
|
44
|
+
source: 'config' | 'env' | 'autodetect';
|
|
45
|
+
}
|
|
46
|
+
/** Vulnerability types a runtime probe can exercise (pocRouter HTTP list + xss). */
|
|
47
|
+
export declare const PROBE_ELIGIBLE_TYPES: ReadonlySet<string>;
|
|
48
|
+
/** URL-encode the path so SQLi/XSS payloads with spaces/quotes survive the request. */
|
|
49
|
+
export declare function encodeProbePath(rawPath: string): string;
|
|
50
|
+
export declare function detectDevServer(workspaceRoot: string, opts?: {
|
|
51
|
+
candidatePorts?: number[];
|
|
52
|
+
}): Promise<DevServerTarget | null>;
|
|
53
|
+
export declare function executeProbePlan(plan: ProbePlan, opts?: {
|
|
54
|
+
signal?: AbortSignal;
|
|
55
|
+
}): Promise<ProbeResult>;
|
|
56
|
+
export interface ProbeEndpointCandidate {
|
|
57
|
+
method: string;
|
|
58
|
+
path: string;
|
|
59
|
+
line: number;
|
|
60
|
+
[key: string]: unknown;
|
|
61
|
+
}
|
|
62
|
+
export declare function matchEndpointForFinding(finding: {
|
|
63
|
+
type: string;
|
|
64
|
+
line: number;
|
|
65
|
+
lineEnd?: number;
|
|
66
|
+
}, endpointContext: unknown[] | undefined): ProbeEndpointCandidate | null;
|
|
67
|
+
export declare function isProbeEligible(finding: {
|
|
68
|
+
type: string;
|
|
69
|
+
line: number;
|
|
70
|
+
lineEnd?: number;
|
|
71
|
+
}, verifyReason: string, endpointContext: unknown[] | undefined): boolean;
|