security: remediate Rafter scan (deps + FP triage + tarball hardening) [sable-qsig] - #184
Merged
Conversation
…ening) Triage + remediation of the Rafter scan on main (bead sable-qsig). The large majority of the 780 findings are context-blind SAST false positives for a local CLI (fs/path ops on the user's own filesystem, an XXE rule firing on code that parses no XML, status-string compares flagged as timing attacks, git-diff parsing flagged as URL validation) and intentional demo/fixture secrets. Those are documented and suppressed in a new repo-root .rafter.yml — each entry traced input->sink first, honored by both the local engines and remote `rafter run`. Real fixes applied: - Node dependency CVE bumps via pnpm workspace overrides + direct deps, re-locked: axios 1.13.6->1.18.1, hono 4.12.8->4.12.27, tar ->7.5.17, js-yaml ->4.3.0, fast-uri, path-to-regexp, form-data, follow-redirects, ip-address, qs, brace-expansion all bumped past their fixed versions (~50 CVEs). tsc build clean; affected suites pass. - Python direct-dep floors bumped in pyproject (requests ^2.33.0, urllib3 >=2.7.0, python-dotenv ^1.2.2). Transitive CVEs (via mcp) need `poetry lock` on a box with poetry -> tracked in sable-i7ll. - skill_remote.extract_npm_tarball: skip non-file/dir members (symlink/hardlink/ device) as defense-in-depth on top of the existing zip-slip guard. Local secrets rescan after: 0 active, 488 suppressed (all triaged fixtures). Refs sable-qsig. Follow-ups: sable-i7ll (python poetry lock), sable-ufd9 (backend FP rules behind GH #178/#182). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Merged
Rome-1
added a commit
that referenced
this pull request
Jun 28, 2026
Patch release bundling the unreleased changes on main since 0.8.9: - Claude Code PostToolUse matcher narrowed .* -> Bash|Write|Edit|MultiEdit (#183) - Hooks tolerate harness-appended flags, e.g. --hook-json (#180) - Dependency CVE re-lock (axios, hono, tar, js-yaml, +transitives) and remote-skill tarball extraction hardening (#184) Bumps node/package.json + python/pyproject.toml to 0.8.10 (parity), the rafter-security skill resource version (node + python), and finalizes the CHANGELOG 0.8.10 section. Refs sable-ehb1 Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
This was referenced Jun 28, 2026
Rome-1
added a commit
to Minh-Nguyen-2k7/rafter-cli
that referenced
this pull request
Jun 30, 2026
The PR's regenerated pnpm-lock.yaml/poetry.lock dropped the pnpm-workspace.yaml CVE-remediation 'overrides' floor (sable-qsig/Raftersecurity#184) and downgraded ip-address below the >=10.1.1 floor, @hono/node-server, and fast-uri — desyncing the lockfile from pnpm-workspace.yaml so every --frozen-lockfile CI job would fail. Reverted both lockfiles to main. Feature itself (dop_v1_ DigitalOcean PAT pattern + tests, Node+Python) is unchanged. Restored PEP8 spacing/trailing comma in secret_patterns.py. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Triage + remediation of the Rafter scan report on
main(780 findings, score 50.7). Bead sable-qsig.Triage summary (decide-first: real vs false positive)
Each class was traced input→sink before action.
mcptracked in sable-i7ll)$HOME/cwd/CLI args; no external taint. The one real external path (remote-tarball extract) is zip-slip-guarded. Suppressed w/ rationale in.rafter.yml.mkdir/read_text/for-loops.startswith('b/')/endswith('.git')is git-diff/URL parsing.[SECRET]/🔑display labels.Changes
.rafter.yml(new) — documentedignore:triage for the FP classes above; honored by local engines and remoterafter run. Nothing leaves the audit trail (recoverable via_suppressed).pnpm-workspace.yamloverrides +node/package.json, re-locked: axios 1.13.6→1.18.1, hono 4.12.8→4.12.27, tar→7.5.17, js-yaml→4.3.0, fast-uri/path-to-regexp/form-data/follow-redirects/ip-address/qs/brace-expansion past fixed (~50 CVEs).pyproject.tomlfloors: requests^2.33.0, urllib3>=2.7.0, python-dotenv^1.2.2.skill_remote.extract_npm_tarball— defense-in-depth: only extract regular files/dirs.poetry lockon a box with poetry (absent here) + mcp-compat check. Most are unreachable in stdio MCP usage.Testing
tscbuild clean;platform-integration(most dep-sensitive) 77/77 in isolation; python skill_remote/extract 87 passed.rafter runnot executed —RAFTER_API_KEYunset in this env; please run on CI to confirm the new score.🤖 Generated with Claude Code