agent-security-scanner-mcp 4.0.1 → 4.1.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/code-review-agent/README.md +25 -4
- package/code-review-agent/bin/cr-agent.ts +7 -1
- package/code-review-agent/dist/bin/cr-agent.js +6 -0
- package/code-review-agent/dist/bin/cr-agent.js.map +1 -1
- package/code-review-agent/dist/src/analyzer/engine.d.ts +5 -0
- package/code-review-agent/dist/src/analyzer/engine.d.ts.map +1 -1
- package/code-review-agent/dist/src/analyzer/engine.js +30 -3
- package/code-review-agent/dist/src/analyzer/engine.js.map +1 -1
- package/code-review-agent/dist/src/analyzer/postprocess.d.ts +15 -0
- package/code-review-agent/dist/src/analyzer/postprocess.d.ts.map +1 -0
- package/code-review-agent/dist/src/analyzer/postprocess.js +275 -0
- package/code-review-agent/dist/src/analyzer/postprocess.js.map +1 -0
- package/code-review-agent/dist/src/analyzer/semantic.d.ts +5 -1
- package/code-review-agent/dist/src/analyzer/semantic.d.ts.map +1 -1
- package/code-review-agent/dist/src/analyzer/semantic.js +80 -20
- package/code-review-agent/dist/src/analyzer/semantic.js.map +1 -1
- package/code-review-agent/dist/src/context/assembler.d.ts +8 -2
- package/code-review-agent/dist/src/context/assembler.d.ts.map +1 -1
- package/code-review-agent/dist/src/context/assembler.js +33 -1
- package/code-review-agent/dist/src/context/assembler.js.map +1 -1
- package/code-review-agent/dist/src/context/file.d.ts.map +1 -1
- package/code-review-agent/dist/src/context/file.js +11 -23
- package/code-review-agent/dist/src/context/file.js.map +1 -1
- package/code-review-agent/dist/src/context/security-summary.d.ts +19 -0
- package/code-review-agent/dist/src/context/security-summary.d.ts.map +1 -0
- package/code-review-agent/dist/src/context/security-summary.js +199 -0
- package/code-review-agent/dist/src/context/security-summary.js.map +1 -0
- package/code-review-agent/dist/src/graph/dependency.d.ts.map +1 -1
- package/code-review-agent/dist/src/graph/dependency.js +8 -1
- package/code-review-agent/dist/src/graph/dependency.js.map +1 -1
- package/code-review-agent/dist/src/graph/resolver.d.ts.map +1 -1
- package/code-review-agent/dist/src/graph/resolver.js +14 -5
- package/code-review-agent/dist/src/graph/resolver.js.map +1 -1
- package/code-review-agent/dist/src/index.d.ts +4 -1
- package/code-review-agent/dist/src/index.d.ts.map +1 -1
- package/code-review-agent/dist/src/index.js +2 -0
- package/code-review-agent/dist/src/index.js.map +1 -1
- package/code-review-agent/dist/src/llm/claude-cli.d.ts.map +1 -1
- package/code-review-agent/dist/src/llm/claude-cli.js +2 -1
- package/code-review-agent/dist/src/llm/claude-cli.js.map +1 -1
- package/code-review-agent/dist/src/types/config.d.ts +3 -0
- package/code-review-agent/dist/src/types/config.d.ts.map +1 -1
- package/code-review-agent/dist/src/types/config.js +9 -0
- package/code-review-agent/dist/src/types/config.js.map +1 -1
- package/code-review-agent/src/analyzer/engine.ts +36 -2
- package/code-review-agent/src/analyzer/postprocess.ts +311 -0
- package/code-review-agent/src/analyzer/semantic.ts +87 -18
- package/code-review-agent/src/context/assembler.ts +44 -2
- package/code-review-agent/src/context/file.ts +13 -18
- package/code-review-agent/src/context/security-summary.ts +225 -0
- package/code-review-agent/src/graph/dependency.ts +8 -1
- package/code-review-agent/src/graph/resolver.ts +14 -5
- package/code-review-agent/src/index.ts +4 -0
- package/code-review-agent/src/llm/claude-cli.ts +2 -1
- package/code-review-agent/src/types/config.ts +16 -0
- package/code-review-agent/tests/analyzer/engine.test.ts +5 -0
- package/code-review-agent/tests/analyzer/postprocess.test.ts +450 -0
- package/code-review-agent/tests/analyzer/prompt-routing.test.ts +137 -0
- package/code-review-agent/tests/config-mode.test.ts +71 -0
- package/code-review-agent/tests/context/file.test.ts +16 -1
- package/code-review-agent/tests/context/security-summary.test.ts +181 -0
- package/code-review-agent/tests/fixtures/guarded-agent/router.py +6 -0
- package/code-review-agent/tests/fixtures/guarded-agent/tools/executor.py +10 -0
- package/code-review-agent/tests/fixtures/guarded-agent/tools/guard.py +4 -0
- package/code-review-agent/tests/fixtures/guarded-agent/vuln-tool.py +6 -0
- package/code-review-agent/tests/graph/dependency.test.ts +76 -0
- package/package.json +1 -1
|
@@ -23,14 +23,20 @@ npm run build
|
|
|
23
23
|
### Analyze a project
|
|
24
24
|
|
|
25
25
|
```bash
|
|
26
|
-
# Text output (default)
|
|
26
|
+
# Text output (default — review mode)
|
|
27
27
|
npx tsx bin/cr-agent.ts analyze ./path/to/project
|
|
28
28
|
|
|
29
|
+
# Security-only mode — focused on exploitable vulnerabilities
|
|
30
|
+
npx tsx bin/cr-agent.ts analyze ./path/to/project --mode security
|
|
31
|
+
|
|
32
|
+
# Shorthand for security mode
|
|
33
|
+
npx tsx bin/cr-agent.ts analyze ./path/to/project --security-only
|
|
34
|
+
|
|
29
35
|
# JSON output
|
|
30
36
|
npx tsx bin/cr-agent.ts analyze ./path/to/project --format json
|
|
31
37
|
|
|
32
|
-
# SARIF output
|
|
33
|
-
npx tsx bin/cr-agent.ts analyze ./path/to/project --format sarif
|
|
38
|
+
# SARIF output (recommended with --mode security for CI)
|
|
39
|
+
npx tsx bin/cr-agent.ts analyze ./path/to/project --format sarif --mode security
|
|
34
40
|
|
|
35
41
|
# Custom confidence threshold
|
|
36
42
|
npx tsx bin/cr-agent.ts analyze ./path/to/project --confidence 0.8
|
|
@@ -39,6 +45,17 @@ npx tsx bin/cr-agent.ts analyze ./path/to/project --confidence 0.8
|
|
|
39
45
|
npx tsx bin/cr-agent.ts analyze ./path/to/project --provider openai
|
|
40
46
|
```
|
|
41
47
|
|
|
48
|
+
### Analysis modes
|
|
49
|
+
|
|
50
|
+
| Mode | Description |
|
|
51
|
+
|------|-------------|
|
|
52
|
+
| `review` (default) | Broad semantic review: logic bugs, security, race conditions, null refs, boundary issues, unhandled exceptions |
|
|
53
|
+
| `security` | Focused security scanner: exploitable vulnerabilities only, sink-localized findings, carrier suppression, CWE mapping |
|
|
54
|
+
|
|
55
|
+
**Review mode** is best for human code review workflows where you want to catch all types of real bugs.
|
|
56
|
+
|
|
57
|
+
**Security mode** is best for CI pipelines, SARIF integrations, and security-focused audits where you want clean, actionable vulnerability reports without generic code quality noise.
|
|
58
|
+
|
|
42
59
|
### View intent profile
|
|
43
60
|
|
|
44
61
|
```bash
|
|
@@ -64,6 +81,7 @@ Or create a `.cr-agent.json` in your project root:
|
|
|
64
81
|
|
|
65
82
|
```json
|
|
66
83
|
{
|
|
84
|
+
"mode": "review",
|
|
67
85
|
"provider": "anthropic",
|
|
68
86
|
"model": "claude-sonnet-4-20250514",
|
|
69
87
|
"triageModel": "claude-haiku-4-5-20251001",
|
|
@@ -78,6 +96,8 @@ Or create a `.cr-agent.json` in your project root:
|
|
|
78
96
|
|
|
79
97
|
| Flag | Description | Default |
|
|
80
98
|
|------|-------------|---------|
|
|
99
|
+
| `--mode` | Analysis mode (`review` or `security`) | `review` |
|
|
100
|
+
| `--security-only` | Shorthand for `--mode security` | — |
|
|
81
101
|
| `-p, --provider` | LLM provider (`anthropic` or `openai`) | `anthropic` |
|
|
82
102
|
| `-m, --model` | Analysis model | `claude-sonnet-4-20250514` / `gpt-4o` |
|
|
83
103
|
| `--triage-model` | Triage model | `claude-haiku-4-5-20251001` / `gpt-4o-mini` |
|
|
@@ -92,7 +112,8 @@ Or create a `.cr-agent.json` in your project root:
|
|
|
92
112
|
```
|
|
93
113
|
Pipeline: discover files → build dependency graph → profile intent
|
|
94
114
|
→ triage (parallel, cheap model) → analyze (parallel, analysis model)
|
|
95
|
-
→ dedup → filter
|
|
115
|
+
→ dedup → mode-aware post-filter → carrier suppression (security mode)
|
|
116
|
+
→ filter by confidence → sort by severity → output
|
|
96
117
|
```
|
|
97
118
|
|
|
98
119
|
### Components
|
|
@@ -13,7 +13,7 @@ import { ModelRouter } from '../src/llm/router.js';
|
|
|
13
13
|
import { DependencyGraphBuilder } from '../src/graph/dependency.js';
|
|
14
14
|
import { buildProjectContext } from '../src/context/project.js';
|
|
15
15
|
import { loadConfig, resolveOptions } from '../src/types/config.js';
|
|
16
|
-
import type { AnalysisOptions } from '../src/types/config.js';
|
|
16
|
+
import type { AnalysisOptions, AnalysisMode } from '../src/types/config.js';
|
|
17
17
|
import type { AnalysisResult, Finding } from '../src/index.js';
|
|
18
18
|
|
|
19
19
|
const program = new Command();
|
|
@@ -27,6 +27,8 @@ program
|
|
|
27
27
|
.command('analyze')
|
|
28
28
|
.description('Analyze a file or directory for bugs and vulnerabilities')
|
|
29
29
|
.argument('<target>', 'File or directory to analyze')
|
|
30
|
+
.option('--mode <mode>', 'Analysis mode (review|security)')
|
|
31
|
+
.option('--security-only', 'Shorthand for --mode security')
|
|
30
32
|
.option('-p, --provider <provider>', 'LLM provider (anthropic|openai|claude-cli)')
|
|
31
33
|
.option('-m, --model <model>', 'Model to use for analysis')
|
|
32
34
|
.option('--triage-model <model>', 'Model to use for triage')
|
|
@@ -43,8 +45,12 @@ program
|
|
|
43
45
|
? resolvedTarget
|
|
44
46
|
: findProjectRoot(resolvedTarget);
|
|
45
47
|
const config = loadConfig(targetProjectRoot);
|
|
48
|
+
const mode: AnalysisMode | undefined = flags.securityOnly
|
|
49
|
+
? 'security'
|
|
50
|
+
: (flags.mode as AnalysisMode | undefined);
|
|
46
51
|
const options = resolveOptions(
|
|
47
52
|
{
|
|
53
|
+
mode,
|
|
48
54
|
provider: flags.provider as AnalysisOptions['provider'] | undefined,
|
|
49
55
|
model: flags.model as string | undefined,
|
|
50
56
|
triageModel: flags.triageModel as string | undefined,
|
|
@@ -20,6 +20,8 @@ program
|
|
|
20
20
|
.command('analyze')
|
|
21
21
|
.description('Analyze a file or directory for bugs and vulnerabilities')
|
|
22
22
|
.argument('<target>', 'File or directory to analyze')
|
|
23
|
+
.option('--mode <mode>', 'Analysis mode (review|security)')
|
|
24
|
+
.option('--security-only', 'Shorthand for --mode security')
|
|
23
25
|
.option('-p, --provider <provider>', 'LLM provider (anthropic|openai|claude-cli)')
|
|
24
26
|
.option('-m, --model <model>', 'Model to use for analysis')
|
|
25
27
|
.option('--triage-model <model>', 'Model to use for triage')
|
|
@@ -36,7 +38,11 @@ program
|
|
|
36
38
|
? resolvedTarget
|
|
37
39
|
: findProjectRoot(resolvedTarget);
|
|
38
40
|
const config = loadConfig(targetProjectRoot);
|
|
41
|
+
const mode = flags.securityOnly
|
|
42
|
+
? 'security'
|
|
43
|
+
: flags.mode;
|
|
39
44
|
const options = resolveOptions({
|
|
45
|
+
mode,
|
|
40
46
|
provider: flags.provider,
|
|
41
47
|
model: flags.model,
|
|
42
48
|
triageModel: flags.triageModel,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cr-agent.js","sourceRoot":"","sources":["../../bin/cr-agent.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cr-agent.js","sourceRoot":"","sources":["../../bin/cr-agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,11 @@ export declare class AnalysisEngine {
|
|
|
9
9
|
analyze(targetPath: string): Promise<AnalysisResult>;
|
|
10
10
|
private discoverFiles;
|
|
11
11
|
private dedup;
|
|
12
|
+
/**
|
|
13
|
+
* Generate a dedup signature that's more precise than just category.
|
|
14
|
+
* Priority: CWE (most specific) > normalized title > category fallback.
|
|
15
|
+
*/
|
|
16
|
+
private dedupSignature;
|
|
12
17
|
private mergeOverlapping;
|
|
13
18
|
private countBySeverity;
|
|
14
19
|
private runParallel;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../src/analyzer/engine.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,cAAc,EAGf,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../src/analyzer/engine.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,cAAc,EAGf,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAwB1D,MAAM,MAAM,gBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;AAEvE,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,UAAU,CAAmB;gBAEzB,OAAO,EAAE,eAAe,EAAE,UAAU,CAAC,EAAE,gBAAgB;IAM7D,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAoN1D,OAAO,CAAC,aAAa;IAsCrB,OAAO,CAAC,KAAK;IAoBb;;;OAGG;IACH,OAAO,CAAC,cAAc;IAiBtB,OAAO,CAAC,gBAAgB;IAuCxB,OAAO,CAAC,eAAe;YAQT,WAAW;CAwB1B"}
|
|
@@ -6,6 +6,7 @@ import { SemanticAnalyzer } from './semantic.js';
|
|
|
6
6
|
import { buildProjectContext } from '../context/project.js';
|
|
7
7
|
import { buildFileContext } from '../context/file.js';
|
|
8
8
|
import { DependencyGraphBuilder } from '../graph/dependency.js';
|
|
9
|
+
import { postFilterFindings, suppressCarrierFindings } from './postprocess.js';
|
|
9
10
|
const CODE_EXTENSIONS = new Set([
|
|
10
11
|
'.js', '.mjs', '.cjs', '.jsx',
|
|
11
12
|
'.ts', '.tsx',
|
|
@@ -64,7 +65,7 @@ export class AnalysisEngine {
|
|
|
64
65
|
const graph = graphBuilder.build(targetFiles.map((f) => path.relative(projectRoot, f)));
|
|
65
66
|
this.onProgress('graph', `Graph: ${graph.nodes.size} node(s)`);
|
|
66
67
|
// Create analyzer
|
|
67
|
-
const analyzer = new SemanticAnalyzer(this.router.getAnalysisProvider(), this.router.getTriageProvider());
|
|
68
|
+
const analyzer = new SemanticAnalyzer(this.router.getAnalysisProvider(), this.router.getTriageProvider(), this.options.mode, projectRoot, graph);
|
|
68
69
|
// Triage files in parallel
|
|
69
70
|
this.onProgress('triage', `Triaging ${targetFiles.length} file(s)...`);
|
|
70
71
|
let triageCount = 0;
|
|
@@ -153,6 +154,13 @@ export class AnalysisEngine {
|
|
|
153
154
|
// Dedup
|
|
154
155
|
this.onProgress('finalize', `Deduplicating ${allFindings.length} raw finding(s)`);
|
|
155
156
|
allFindings = this.dedup(allFindings);
|
|
157
|
+
// Mode-aware post-filtering
|
|
158
|
+
const beforePostFilter = allFindings.length;
|
|
159
|
+
allFindings = postFilterFindings(allFindings, this.options.mode);
|
|
160
|
+
if (this.options.mode === 'security') {
|
|
161
|
+
allFindings = suppressCarrierFindings(allFindings);
|
|
162
|
+
this.onProgress('finalize', `Security filter: ${beforePostFilter} → ${allFindings.length}`);
|
|
163
|
+
}
|
|
156
164
|
// Filter by confidence
|
|
157
165
|
const beforeFilter = allFindings.length;
|
|
158
166
|
allFindings = allFindings.filter((f) => f.confidence >= this.options.confidenceThreshold);
|
|
@@ -220,21 +228,39 @@ export class AnalysisEngine {
|
|
|
220
228
|
return files;
|
|
221
229
|
}
|
|
222
230
|
dedup(findings) {
|
|
231
|
+
// Phase 1: group by file + rich signature (CWE > normalized title > category)
|
|
223
232
|
const groups = new Map();
|
|
224
233
|
for (const finding of findings) {
|
|
225
|
-
const key = `${finding.location.file}:${finding
|
|
234
|
+
const key = `${finding.location.file}:${this.dedupSignature(finding)}`;
|
|
226
235
|
const group = groups.get(key) ?? [];
|
|
227
236
|
group.push(finding);
|
|
228
237
|
groups.set(key, group);
|
|
229
238
|
}
|
|
230
239
|
const result = [];
|
|
231
240
|
for (const group of groups.values()) {
|
|
232
|
-
// Merge overlapping line ranges, keep highest confidence
|
|
233
241
|
const merged = this.mergeOverlapping(group);
|
|
234
242
|
result.push(...merged);
|
|
235
243
|
}
|
|
236
244
|
return result;
|
|
237
245
|
}
|
|
246
|
+
/**
|
|
247
|
+
* Generate a dedup signature that's more precise than just category.
|
|
248
|
+
* Priority: CWE (most specific) > normalized title > category fallback.
|
|
249
|
+
*/
|
|
250
|
+
dedupSignature(finding) {
|
|
251
|
+
if (finding.cwe) {
|
|
252
|
+
return `cwe:${finding.cwe.toLowerCase()}`;
|
|
253
|
+
}
|
|
254
|
+
// Normalize the title: lowercase, strip numbers/punctuation, collapse whitespace
|
|
255
|
+
const normalized = finding.title
|
|
256
|
+
.toLowerCase()
|
|
257
|
+
.replace(/\b(line|col|at)\s*\d+/g, '')
|
|
258
|
+
.replace(/[^a-z0-9\s]/g, '')
|
|
259
|
+
.replace(/\s+/g, ' ')
|
|
260
|
+
.trim();
|
|
261
|
+
// Use first 60 chars of normalized title + category for grouping
|
|
262
|
+
return `${finding.category}:${normalized.slice(0, 60)}`;
|
|
263
|
+
}
|
|
238
264
|
mergeOverlapping(findings) {
|
|
239
265
|
if (findings.length <= 1)
|
|
240
266
|
return findings;
|
|
@@ -285,6 +311,7 @@ export class AnalysisEngine {
|
|
|
285
311
|
let index = 0;
|
|
286
312
|
const runNext = async () => {
|
|
287
313
|
while (index < items.length) {
|
|
314
|
+
// Safe: index++ between awaits is non-concurrent in single-threaded JS
|
|
288
315
|
const currentIndex = index++;
|
|
289
316
|
results[currentIndex] = await fn(items[currentIndex]);
|
|
290
317
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../src/analyzer/engine.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../src/analyzer/engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Finding } from '../types/findings.js';
|
|
2
|
+
import type { AnalysisMode } from '../types/config.js';
|
|
3
|
+
/**
|
|
4
|
+
* Apply mode-aware post-filtering to findings.
|
|
5
|
+
* In review mode, returns findings unchanged.
|
|
6
|
+
* In security mode, drops non-security findings and suppresses weak evidence.
|
|
7
|
+
*/
|
|
8
|
+
export declare function postFilterFindings(findings: Finding[], mode: AnalysisMode): Finding[];
|
|
9
|
+
/**
|
|
10
|
+
* Suppress carrier findings when a sink-localized equivalent exists.
|
|
11
|
+
* A carrier finding describes data flowing through a file, while the sink
|
|
12
|
+
* finding describes the actual dangerous operation in a downstream file.
|
|
13
|
+
*/
|
|
14
|
+
export declare function suppressCarrierFindings(findings: Finding[]): Finding[];
|
|
15
|
+
//# sourceMappingURL=postprocess.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postprocess.d.ts","sourceRoot":"","sources":["../../../src/analyzer/postprocess.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAY,MAAM,sBAAsB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AA8CvD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,OAAO,EAAE,EACnB,IAAI,EAAE,YAAY,GACjB,OAAO,EAAE,CAMX;AAmID;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAuFtE"}
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Categories that are never security-relevant on their own.
|
|
3
|
+
* In security mode these are dropped unless they have explicit security evidence.
|
|
4
|
+
*/
|
|
5
|
+
const NON_SECURITY_CATEGORIES = new Set([
|
|
6
|
+
'logic-bug',
|
|
7
|
+
'type-error',
|
|
8
|
+
'unhandled-exception',
|
|
9
|
+
'null-ref',
|
|
10
|
+
'other',
|
|
11
|
+
]);
|
|
12
|
+
/**
|
|
13
|
+
* Categories always kept in security mode.
|
|
14
|
+
*/
|
|
15
|
+
const SECURITY_CATEGORIES = new Set([
|
|
16
|
+
'security',
|
|
17
|
+
'boundary',
|
|
18
|
+
'race-condition',
|
|
19
|
+
]);
|
|
20
|
+
/**
|
|
21
|
+
* Keywords in title/reasoning that indicate security relevance
|
|
22
|
+
* even when the category is generic.
|
|
23
|
+
*/
|
|
24
|
+
const SECURITY_KEYWORDS = /\b(injection|xss|csrf|ssrf|auth|privilege|escal|rce|command.?exec|deserialization|path.?traversal|directory.?traversal|overflow|underflow|sqli|lfi|rfi|open.?redirect|insecure|credential|secret|token.?leak|session.?fixation|sandbox.?escape)\b/i;
|
|
25
|
+
/**
|
|
26
|
+
* Patterns in reasoning/title indicating strong guard evidence.
|
|
27
|
+
* Presence of these + no described bypass → suppress the finding.
|
|
28
|
+
*/
|
|
29
|
+
const STRONG_GUARD_PATTERNS = /\b(allowlist|allow.?list|whitelist|white.?list|hardcoded.*(commands?|hosts?|paths?|domains?)|shell\s*=\s*false|shell.?false|parameterized\s*(query|queries|statement)|bound\s*param|prepared\s*statement|host.?allowlist|scheme.?allowlist|immutable.*(list|set|array)|subprocess\.run\s*\(\s*\[)\b/i;
|
|
30
|
+
/**
|
|
31
|
+
* Patterns suggesting the finding is about a guard module, not a sink.
|
|
32
|
+
*/
|
|
33
|
+
const GUARD_MODULE_PATTERNS = /\b(guard|policy|validator|validation|sanitiz|allowlist|denylist|blocklist|safelist|permission|authorize)\b/i;
|
|
34
|
+
/**
|
|
35
|
+
* Phrases indicating the finding describes a weak/theoretical bypass
|
|
36
|
+
* rather than a concrete exploit path.
|
|
37
|
+
*/
|
|
38
|
+
const WEAK_BYPASS_PHRASES = /\b(could\s+(potentially|theoretically|possibly)|may\s+be\s+bypass\w*|policy\s+(may|could|might)\s+(change|be\s+(expanded|modified|updated))|theoretically|in\s+theory|if\s+the\s+(allowlist|whitelist|policy)\s+(is|were|was)\s+(expanded|changed|modified)|future\s+changes?\s+(could|may|might))\b/i;
|
|
39
|
+
/**
|
|
40
|
+
* Apply mode-aware post-filtering to findings.
|
|
41
|
+
* In review mode, returns findings unchanged.
|
|
42
|
+
* In security mode, drops non-security findings and suppresses weak evidence.
|
|
43
|
+
*/
|
|
44
|
+
export function postFilterFindings(findings, mode) {
|
|
45
|
+
if (mode !== 'security')
|
|
46
|
+
return findings;
|
|
47
|
+
return findings
|
|
48
|
+
.filter((f) => isSecurityRelevant(f))
|
|
49
|
+
.filter((f) => !isWeakGuardFinding(f));
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Detect findings that describe guarded code with no concrete bypass.
|
|
53
|
+
* These are the "policy may be bypassed" false positives.
|
|
54
|
+
*/
|
|
55
|
+
function isWeakGuardFinding(finding) {
|
|
56
|
+
const text = `${finding.title} ${finding.reasoning}`;
|
|
57
|
+
// Check if the finding mentions strong guard evidence
|
|
58
|
+
const hasStrongGuard = STRONG_GUARD_PATTERNS.test(text);
|
|
59
|
+
// Check if the finding is about a guard module rather than a sink
|
|
60
|
+
const isAboutGuard = GUARD_MODULE_PATTERNS.test(finding.title) ||
|
|
61
|
+
GUARD_MODULE_PATTERNS.test(finding.location.file);
|
|
62
|
+
// Check if the bypass description is weak/theoretical
|
|
63
|
+
const hasWeakBypass = WEAK_BYPASS_PHRASES.test(finding.reasoning);
|
|
64
|
+
// Strong guard + weak/theoretical bypass language → suppress
|
|
65
|
+
// Low confidence alone is NOT enough — the model may be cautious but correct
|
|
66
|
+
if (hasStrongGuard && hasWeakBypass) {
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
// Finding is about a guard module + weak bypass language + low confidence → suppress
|
|
70
|
+
if (isAboutGuard && hasWeakBypass && finding.confidence < 0.8) {
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Determines whether a finding should survive security-mode filtering.
|
|
77
|
+
*/
|
|
78
|
+
function isSecurityRelevant(finding) {
|
|
79
|
+
// Always keep explicit security categories
|
|
80
|
+
if (SECURITY_CATEGORIES.has(finding.category))
|
|
81
|
+
return true;
|
|
82
|
+
// For non-security categories, check for evidence of real security impact
|
|
83
|
+
if (NON_SECURITY_CATEGORIES.has(finding.category)) {
|
|
84
|
+
// Has a CWE — the LLM mapped it to a known weakness
|
|
85
|
+
if (finding.cwe)
|
|
86
|
+
return true;
|
|
87
|
+
// Has an OWASP mapping
|
|
88
|
+
if (finding.owasp)
|
|
89
|
+
return true;
|
|
90
|
+
// Title or reasoning contains security-specific language
|
|
91
|
+
if (SECURITY_KEYWORDS.test(finding.title) || SECURITY_KEYWORDS.test(finding.reasoning)) {
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
// Violates intent — could indicate a security issue, but only keep if high confidence
|
|
95
|
+
if (finding.intentAlignment === 'violates-intent' && finding.confidence >= 0.8) {
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
98
|
+
// Not enough security evidence — drop it
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
// Unknown category — keep if it has any security indicator
|
|
102
|
+
return !!(finding.cwe || finding.owasp || SECURITY_KEYWORDS.test(finding.title));
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Patterns in file paths that suggest the file is a carrier/router, not a sink.
|
|
106
|
+
*/
|
|
107
|
+
const CARRIER_FILE_PATTERNS = /\b(router|route|planner|controller|handler|middleware|dispatch|orchestrat|wrapper|proxy|gateway|facade|adapter)\b/i;
|
|
108
|
+
/**
|
|
109
|
+
* Patterns in file paths that suggest the file contains a dangerous sink.
|
|
110
|
+
*/
|
|
111
|
+
const SINK_FILE_PATTERNS = /\b(tool|service|executor|worker|client|db|database|query|fetch|request|command|process|infra|util)\b/i;
|
|
112
|
+
/**
|
|
113
|
+
* Language in finding titles/reasoning that suggests carrier (pass-through) behavior.
|
|
114
|
+
*/
|
|
115
|
+
const CARRIER_LANGUAGE = /\b(passed\s+to|forwarded|through|reaches|via\s+(router|wrapper|handler|middleware|planner|controller)|routed\s+to|dispatched|delegates?\s+to|calls?\s+into|relayed|proxied)\b/i;
|
|
116
|
+
/**
|
|
117
|
+
* Language suggesting the finding is at the actual dangerous operation.
|
|
118
|
+
*/
|
|
119
|
+
const SINK_LANGUAGE = /\b(execut(es?|ed|ing)|calls?\s+(subprocess|exec|eval|system|popen|spawn)|queries|fetche[sd]|request[sd]?\s+(to|from)|writes?\s+to|reads?\s+from|sends?\s+(request|query)|connects?\s+to|opens?\s+(file|connection|socket))\b/i;
|
|
120
|
+
/**
|
|
121
|
+
* CWEs that are typically associated with sinks, not carriers.
|
|
122
|
+
*/
|
|
123
|
+
const SINK_CWES = new Set([
|
|
124
|
+
'cwe-78', // OS command injection
|
|
125
|
+
'cwe-79', // XSS
|
|
126
|
+
'cwe-89', // SQL injection
|
|
127
|
+
'cwe-90', // LDAP injection
|
|
128
|
+
'cwe-91', // XML injection
|
|
129
|
+
'cwe-94', // Code injection
|
|
130
|
+
'cwe-95', // Eval injection
|
|
131
|
+
'cwe-98', // Remote file inclusion
|
|
132
|
+
'cwe-918', // SSRF
|
|
133
|
+
'cwe-22', // Path traversal
|
|
134
|
+
'cwe-77', // Command injection
|
|
135
|
+
'cwe-502', // Deserialization
|
|
136
|
+
'cwe-611', // XXE
|
|
137
|
+
]);
|
|
138
|
+
/**
|
|
139
|
+
* Compute a carrier/sink score for a finding.
|
|
140
|
+
* Positive = more sink-like, negative = more carrier-like.
|
|
141
|
+
*/
|
|
142
|
+
function carrierSinkScore(finding) {
|
|
143
|
+
let score = 0;
|
|
144
|
+
const text = `${finding.title} ${finding.reasoning}`;
|
|
145
|
+
const filePath = finding.location.file.toLowerCase();
|
|
146
|
+
// File path signals
|
|
147
|
+
if (CARRIER_FILE_PATTERNS.test(filePath))
|
|
148
|
+
score -= 2;
|
|
149
|
+
if (SINK_FILE_PATTERNS.test(filePath))
|
|
150
|
+
score += 2;
|
|
151
|
+
// Language signals
|
|
152
|
+
if (CARRIER_LANGUAGE.test(text))
|
|
153
|
+
score -= 2;
|
|
154
|
+
if (SINK_LANGUAGE.test(text))
|
|
155
|
+
score += 2;
|
|
156
|
+
// CWE-based signals — sink CWEs found in a tool/service file are strong sink signals
|
|
157
|
+
if (finding.cwe && SINK_CWES.has(finding.cwe.toLowerCase()))
|
|
158
|
+
score += 1;
|
|
159
|
+
// Confidence as tiebreaker
|
|
160
|
+
score += finding.confidence;
|
|
161
|
+
return score;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Suppress carrier findings when a sink-localized equivalent exists.
|
|
165
|
+
* A carrier finding describes data flowing through a file, while the sink
|
|
166
|
+
* finding describes the actual dangerous operation in a downstream file.
|
|
167
|
+
*/
|
|
168
|
+
export function suppressCarrierFindings(findings) {
|
|
169
|
+
if (findings.length <= 1)
|
|
170
|
+
return findings;
|
|
171
|
+
// Phase 1: group by CWE (cross-file) or per-file title
|
|
172
|
+
const groups = new Map();
|
|
173
|
+
for (const f of findings) {
|
|
174
|
+
const key = findingSignature(f);
|
|
175
|
+
const group = groups.get(key) ?? [];
|
|
176
|
+
group.push(f);
|
|
177
|
+
groups.set(key, group);
|
|
178
|
+
}
|
|
179
|
+
// Phase 2: for no-CWE findings, merge cross-file groups when carrier/sink signals
|
|
180
|
+
// indicate they describe the same issue flowing across files.
|
|
181
|
+
const titleGroups = new Map();
|
|
182
|
+
for (const f of findings) {
|
|
183
|
+
if (f.cwe)
|
|
184
|
+
continue;
|
|
185
|
+
const key = normalizedTitle(f);
|
|
186
|
+
const group = titleGroups.get(key) ?? [];
|
|
187
|
+
group.push(f);
|
|
188
|
+
titleGroups.set(key, group);
|
|
189
|
+
}
|
|
190
|
+
// If a cross-file title group has at least one carrier and one sink signal,
|
|
191
|
+
// collapse it — otherwise leave per-file groups intact.
|
|
192
|
+
const suppressedFiles = new Set();
|
|
193
|
+
for (const group of titleGroups.values()) {
|
|
194
|
+
if (group.length <= 1)
|
|
195
|
+
continue;
|
|
196
|
+
// Check if group spans multiple files
|
|
197
|
+
const files = new Set(group.map((f) => f.location.file));
|
|
198
|
+
if (files.size <= 1)
|
|
199
|
+
continue;
|
|
200
|
+
// Require language signals in the finding text, not just file-path patterns.
|
|
201
|
+
// File path alone is too aggressive — a "Missing authorization check" in
|
|
202
|
+
// controller/users.js and service/admin.js are likely distinct real findings.
|
|
203
|
+
const hasCarrier = group.some((f) => {
|
|
204
|
+
const text = `${f.title} ${f.reasoning}`;
|
|
205
|
+
return CARRIER_LANGUAGE.test(text);
|
|
206
|
+
});
|
|
207
|
+
const hasSink = group.some((f) => {
|
|
208
|
+
const text = `${f.title} ${f.reasoning}`;
|
|
209
|
+
return SINK_LANGUAGE.test(text);
|
|
210
|
+
});
|
|
211
|
+
if (hasCarrier && hasSink) {
|
|
212
|
+
// Collapse: keep the most sink-like finding
|
|
213
|
+
const scored = group.map((f) => ({ finding: f, score: carrierSinkScore(f) }));
|
|
214
|
+
scored.sort((a, b) => b.score - a.score);
|
|
215
|
+
// Mark all but the winner for suppression
|
|
216
|
+
for (let i = 1; i < scored.length; i++) {
|
|
217
|
+
const f = scored[i].finding;
|
|
218
|
+
suppressedFiles.add(`${f.location.file}:${f.location.startLine}:${f.title}`);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
// Phase 3: collapse CWE-based groups as before, and apply no-CWE suppression
|
|
223
|
+
const result = [];
|
|
224
|
+
for (const [key, group] of groups) {
|
|
225
|
+
if (group.length <= 1) {
|
|
226
|
+
const f = group[0];
|
|
227
|
+
const suppKey = `${f.location.file}:${f.location.startLine}:${f.title}`;
|
|
228
|
+
if (!suppressedFiles.has(suppKey)) {
|
|
229
|
+
result.push(f);
|
|
230
|
+
}
|
|
231
|
+
continue;
|
|
232
|
+
}
|
|
233
|
+
// For multi-item groups: filter out suppressed findings first, then score
|
|
234
|
+
const unsuppressed = group.filter((f) => {
|
|
235
|
+
const suppKey = `${f.location.file}:${f.location.startLine}:${f.title}`;
|
|
236
|
+
return !suppressedFiles.has(suppKey);
|
|
237
|
+
});
|
|
238
|
+
if (unsuppressed.length === 0)
|
|
239
|
+
continue;
|
|
240
|
+
if (unsuppressed.length === 1) {
|
|
241
|
+
result.push(unsuppressed[0]);
|
|
242
|
+
continue;
|
|
243
|
+
}
|
|
244
|
+
// CWE groups or remaining multi-item: score and keep best
|
|
245
|
+
const scored = unsuppressed.map((f) => ({ finding: f, score: carrierSinkScore(f) }));
|
|
246
|
+
scored.sort((a, b) => b.score - a.score);
|
|
247
|
+
result.push(scored[0].finding);
|
|
248
|
+
}
|
|
249
|
+
return result;
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Normalize a title for grouping (strips noise, lowercases).
|
|
253
|
+
*/
|
|
254
|
+
function normalizedTitle(f) {
|
|
255
|
+
return f.title
|
|
256
|
+
.toLowerCase()
|
|
257
|
+
.replace(/\b(line|col|at)\s*\d+/g, '')
|
|
258
|
+
.replace(/[^a-z0-9\s]/g, '')
|
|
259
|
+
.replace(/\s+/g, ' ')
|
|
260
|
+
.trim();
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Generate a normalized signature for grouping related findings.
|
|
264
|
+
* CWE-based grouping is cross-file (carrier/sink suppression).
|
|
265
|
+
* Title-based grouping is per-file to avoid collapsing distinct findings
|
|
266
|
+
* with generic titles like "Missing authorization check" in different files.
|
|
267
|
+
*/
|
|
268
|
+
function findingSignature(f) {
|
|
269
|
+
// Use CWE as primary grouping key — cross-file is intentional for carrier/sink dedup
|
|
270
|
+
if (f.cwe)
|
|
271
|
+
return `cwe:${f.cwe.toLowerCase()}`;
|
|
272
|
+
// Per-file title grouping: prevents collapsing distinct findings across files
|
|
273
|
+
return `title:${f.location.file}:${normalizedTitle(f)}`;
|
|
274
|
+
}
|
|
275
|
+
//# sourceMappingURL=postprocess.js.map
|