llm-security/tests
Kjell Tore Guttormsen 0d37f5a628
fix(scan-orchestrator): honor .llm-security-ignore only for the caller's own working tree
A foreign or freshly-cloned scan target could ship its own
.llm-security-ignore with `**` and silently turn a real finding into
ALLOW (0 findings) -- only the undocumented envelope.suppressed count
revealed it. Same defect class the v8.0.0 commons-root fix closed: a
hostile repo should never be able to empty its own detection output.

Valgt X fordi Y: honor the ignore file only when realpath(target)
equals or is nested under realpath(process.cwd()), and never when the
target resolves under os.tmpdir() -- defense-in-depth for the case a
caller's own cwd happens to sit under tmpdir, matching where
git-clone.mjs materializes clones. A foreign target with an ignore
file now gets one stderr line saying it was not honored (loud, not
silent).

Red test first (tests/scanners/ignore-file-scope.test.mjs): a known
HIGH entropy finding (random-bytes base64, built at test time) that
must survive on a foreign/cloned target and stay suppressed on the
caller's own working tree. Verified red on b6edfa3, green after the
fix. Self-scan invariant reverified on three independent fresh clones
today: WARNING 61/100, 58 findings, 382 suppressed -- identical on
patched and unpatched clones, so the own-tree path is unchanged.

Suite 2276/2270 pass/0 fail/6 skip (jetbrains-parser after-hook flake
listed, not counted -- known). Golden unchanged (109/7/4, 61/61).
av-surface 6/6 green, unchanged.

Open, not fixed this session (scope was the ignore file only):
policy-loader.mjs's loadPolicy() also reads .llm-security/policy.json
from the scanned target, independently re-read by entropy-scanner.mjs
and signature-scanner.mjs -- same defect class, not yet measured red.
Logged in PLAN.md S3b for a follow-up order.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-22 14:53:54 +02:00
..
e2e test(llm-security): build poisoned fixtures at test time, never on disk 2026-09-22 13:07:38 +02:00
fixtures test(ast-taint): materialize the ast-scan fixtures at test time 2026-09-22 14:11:27 +02:00
golden refactor(llm-security): build the SIG ruleset from vendored commons (malware-signatures 0.1.0) 2026-08-13 21:28:14 +02:00
helpers test(ast-taint): materialize the ast-scan fixtures at test time 2026-09-22 14:11:27 +02:00
hooks refactor(llm-security): build the secret table from vendored commons (secret-egress 0.3.0) 2026-08-13 21:10:14 +02:00
lib fix(git-clone): accept HTTPS repo URLs on any host, not just GitHub 2026-09-22 14:14:39 +02:00
scanners fix(scan-orchestrator): honor .llm-security-ignore only for the caller's own working tree 2026-09-22 14:53:54 +02:00
av-surface.test.mjs test(ast-taint): materialize the ast-scan fixtures at test time 2026-09-22 14:11:27 +02:00