Repository navigation
Commit f34af2b
fix: redact non-SQL content echoed in safety threat messages
The main-only Sanity (Verdaccio) security test 6/15 (`altimate check
../../../../etc/passwd` must not reflect file contents) fails since #1090:
surfacing real `ThreatFinding` messages exposed that the engine's
`multi_statement` rule quotes the raw "statement type" token verbatim —
for non-SQL input that is the file's content (`Disallowed statement type:
ROOT:X:0:0:…`), an information-disclosure echo. The sanity job is skipped
on PRs, so #1090's CI could not catch it.
Fix at the dispatcher boundary (covers CLI, tools, and review):
- `EngineCoerce.redactThreatText`: keeps SQL-keyword-like statement types
(`DROP`, `ALTER TABLE`) and replaces arbitrary content with
`<non-SQL content redacted>` in threat message/detail.
- `multi_statement` threats also redact `matched_pattern` — for that rule
the pattern IS the raw input line. Injection rules keep their SQL-shaped
patterns. Diff-scoping keys stay consistent (base and head redact
identically).
- Applied in the `altimate_core.safety` handler and the composite check.
Tests: unit coverage for the redaction (keyword kept / content redacted /
unrelated messages untouched) plus real-engine tests proving passwd-like
input no longer echoes through either handler while `DROP` survives in
messages. Verified the exact sanity scenario locally: CLI output now shows
`<non-SQL content redacted>`.
Filed upstream for the engine-side echo: to be linked.
Closes #1110
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>1 parent da952c1 commit f34af2b
3 files changed
Lines changed: 106 additions & 2 deletions
File tree
- packages/opencode
- src/altimate/native
- test/altimate
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
42 | 42 | | |
43 | 43 | | |
44 | 44 | | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
45 | 59 | | |
46 | 60 | | |
47 | 61 | | |
| |||
114 | 128 | | |
115 | 129 | | |
116 | 130 | | |
117 | | - | |
| 131 | + | |
118 | 132 | | |
119 | 133 | | |
120 | 134 | | |
| |||
193 | 207 | | |
194 | 208 | | |
195 | 209 | | |
196 | | - | |
| 210 | + | |
197 | 211 | | |
198 | 212 | | |
199 | 213 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
59 | 59 | | |
60 | 60 | | |
61 | 61 | | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
62 | 81 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
0 commit comments