feat(evidence): deterministic Ricochet-store probe with sudo, joined into the derivation #21
Loading…
Reference in a new issue
No description provided.
Delete branch "fm/dse-security-reports-ricochet-store-probe"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
The Ricochet deployment stores hold the deployed application virtualenvs, and every earlier inventory missed them: the stores are root-only, so a permission-denied subtree silently contributed nothing to
find, and that miss is exactly what let a false-positive verdict through on the first pass and turned it into a confirmed finding only on the second. This change originates from the pyjwt verification work (preserved worktree commit b620538, authored on6afae77) and adds a deterministic, read-only Ricochet-store probe to the evidence collector so that gap can never silently recur. The probe usessudo -n(documented in the script header: the evidence account holds NOPASSWD sudo), a refused store is recorded as an explicit gap with a non-zeroprobeExit-- never as an absence -- and both derivation lanes joinricochetInstalled/claimedVersionRicochetInstalled/ricochetGapper finding, with ricochet-verified claims counting as installed for scanner agreement.What changed
scripts/ssh_evidence.sh-- bounded read-only Ricochet-store probe (sudo -nover the live/var/lib/ricochet/data/contentstore and the separate-filesystem backup/opt/data/backup/ricochet), jwt dist-info capture per store, running-deployment process list plus/procmountinfo mapping every/work/.venvprocess to its source bundle, a bounded ricochet-only refresh for cached evidence predating the probe, and the full collection now appends the probe and parses it into the evidence payload (header documents the sudo use and the NOPASSWD basis)scripts/derive_findings.py-- stdlib derivation lane joins the ricochet evidence:ricochetInstalled/claimedVersionRicochetInstalled/ricochetGapper finding, and ricochet evidence counts toward scanner agreement (rpm OR pip OR ricochet => trivy-silent)src/dse_security_reports/derive.py-- polars lane mirrors the same join byte-identicallytests/test_derive.py-- tests for the store parsing across both layouts and for the refusal path (a refused store is a recorded gap, never an absence)AGENTS.md-- one-clause note in the evidence-pipeline entry documenting the probe and its never-an-absence ruleBehaviour change
A root-only Ricochet store that earlier rounds read as "not present" now surfaces as an explicit gap in the derived findings, and a pyjwt claim backed by a Ricochet-store dist-info reads as installed. The fixture lane is unaffected:
just all,just repro,just py-crosscheckand the test suite all pass offline. The only port from the preserved patch: two hunks were adapted to the sharedssh_common.shresolution (SSH_ALIAS/SSH_TARGET/SSH_OPTS) that landed with the interactive ssh shorthands; everything else is the preserved patch verbatim.Instructions-PR: none