ci(osv): scan all tracked first-party lockfiles - #39452
Conversation
|
The failing This PR adds The only Critical failing the gate is aiohttp Suggested order:
|
ea01f86 to
fd668c1
Compare
|
Rebased onto current main — this resolves the conflict and shrinks the diff. What it does: adds the first-party whatsapp-bridge lockfile (scripts/whatsapp-bridge/package-lock.json, ~76 KB, previously unscanned) to the OSV scan — as a --lockfile= arg and in the push paths filter — and bumps the workflow comment from "three sources of truth" to "four." Why the diff is smaller than when this was opened: main has since dropped the pull_request paths filter on this workflow so the required check always runs. I deliberately did not re-add a paths filter there; only the push filter and the scan-args needed the new lockfile. Net change is +3/−1 in .github/workflows/osv-scanner.yml. Scope: detection-only — fail-on-vuln: false is unchanged, so this can't block any PR; it only extends coverage to a first-party lockfile. No dependency or remediation changes are bundled. The earlier failing check was a SARIF-upload rate-limit flake (the scanner steps passed; only the code-scanning upload step failed) — the re-run triggered by this push should clear it. |
teknium1
left a comment
There was a problem hiding this comment.
Thanks for extending OSV coverage. The WhatsApp bridge lockfile is a real current gap: .github/workflows/osv-scanner.yml:43-46 still lists only uv.lock, the root npm lockfile, and website/package-lock.json.
Problems
- The proposed fourth entry still leaves the tracked first-party Photon sidecar lockfile uncovered.
plugins/platforms/photon/sidecar/package.json:2-16identifies an@hermes-agent/photon-sidecarnpm package, and its trackedpackage-lock.jsonis not in the explicit OSV list at.github/workflows/osv-scanner.yml:43-46. - The trigger-filter portion is stale. Current CI owns
pull_request/pushin.github/workflows/ci.yml:13-16and invokes the reusable scanner at.github/workflows/ci.yml:126-128; GitHub currently reports this PR as conflicting.
Suggested changes
- Carry the scan-args addition onto current main without restoring direct workflow path filters, and add the Photon sidecar lockfile alongside the WhatsApp bridge lockfile.
- Update the coverage comment to describe all five tracked first-party lockfiles.
Automated hermes-sweeper review.
| scan-args: |- | ||
| --lockfile=uv.lock | ||
| --lockfile=package-lock.json | ||
| --lockfile=website/package-lock.json | ||
| --lockfile=scripts/whatsapp-bridge/package-lock.json |
There was a problem hiding this comment.
Please include --lockfile=plugins/platforms/photon/sidecar/package-lock.json alongside this. Current main tracks an active first-party Photon sidecar lockfile, while the workflow's explicit list omits it; otherwise the revised “four sources of truth” comment still leaves an npm dependency tree unscanned.
fd668c1 to
41031fe
Compare
|
Both points addressed — force-pushed onto current Photon sidecar lockfile — added. Stale trigger filters — dropped, not replayed. The old Worth flagging before merge: enabling the sidecar scan surfaces one existing advisory — I left |
41031fe to
ba9c060
Compare
|
Rebased onto current Re-ran the OSV querybatch pre-flight against both lockfiles at today's On the two red checks: the only failing job is |
ba9c060 to
f90632d
Compare
|
Rebased onto current
I re-ran the OSV pre-flight against both new lockfiles before pushing, and the result moved in a way that seems worth flagging:
Three of those four were published on 2026-07-20, and the resolved package sets are unchanged (163 / 133). So no dependency moved — these are newly-published advisories against versions that were already installed, in the two lockfiles CI isn't scanning. They went unnoticed for five days. That's the case this PR is making, and I'd rather show it than assert it. All are transitive and detection-only; The only red check is Python lints / CI-sensitive file review, which is red by design — this touches a workflow file, so it needs a maintainer-applied Also still on offer, as separate PRs if wanted: bumping |
|
Closing: the coverage this PR argued for is now on main. One cosmetic residue, not worth a PR that would trip the Thanks to everyone who reviewed along the way. |
Adds the two tracked first-party lockfiles OSV wasn't scanning —
scripts/whatsapp-bridge/package-lock.jsonandplugins/platforms/photon/sidecar/package-lock.json— bringing explicit coverage to all five.Rebased onto current
main.osv-scanner.ymlhas moved twice since this branch was last refreshed, so the change is re-expressed against the workflow as it stands today — the pinned reusable-workflow form with an explicitscan-args:block — rather than replayed. Nothing else in the file is touched: the pinned action SHA,results-file-name,fail-on-vuln: false, theemit-statuswrapper and theci.ymlinvocation are all unchanged. This branch also predated05c896cf5 ci: refactor paths & clones, so the stale trigger-filter half stays dropped rather than restored:osv-scanner.ymlisworkflow_call-only now andci.ymlinvokes it with noneeds/ifgate, so the scan already runs on every PR and every push tomain— there is nothing left to path-filter. The diff is one file: the twoscan-argslines plus the two coverage comments.Coverage is now every lockfile tracked in the repo:
uv.lockpackage-lock.jsonwebsite/package-lock.jsonscripts/whatsapp-bridge/package-lock.jsonhermes-whatsapp-bridgeplugins/platforms/photon/sidecar/package-lock.json@hermes-agent/photon-sidecaroptional-skills/finance/dcf-model/requirements.txtis the only other dependency file in the tree, and it stays out of scope deliberately: it pins ranges (openpyxl>=3.0.0,requests>=2.28.0), so it's a manifest rather than a lockfile and doesn't identify installed versions. Scanning ranged manifests is a separate policy call — happy to take it in a follow-up if you want it.What this will surface
I re-queried both new lockfiles' resolved package sets against the OSV API immediately before this push. The result changed since the last refresh of this PR, and the change is the clearest argument for merging it.
WhatsApp bridge — 163 resolved packages, 1 advisory:
body-parser@1.20.5— GHSA-v422-hmwv-36x6. Low, availability-only (an invalidlimitvalue silently disables size enforcement). Transitive, viaexpress@^4.21.0. Fixed in 1.20.6.Photon sidecar — 133 resolved packages, 3 advisories:
@opentelemetry/core@2.7.1— GHSA-8988-4f7v-96qf / CVE-2026-54285. Moderate, availability-only —W3CBaggagePropagator.extract()doesn't bound inboundbaggageheader size. Fixed in 2.8.0. Worth noting the top-levelnode_modules/@opentelemetry/coreis already 2.8.0; the 2.7.1 copies are nested under six@opentelemetry/*packages.protobufjs@8.6.1— GHSA-j3f2-48v5-ccww, moderate, DoS via infinite loop in.protooption parsing. Fixed in 8.6.6.protobufjs@8.6.1— GHSA-jfj6-75fj-8934, moderate, Text Format string-map parsing can mutate the returned map's prototype. Fixed in 8.6.5.Both
protobufjsfindings are transitive, viaspectrum-ts@8.0.0.Three of those four advisories were published on 2026-07-20 — after this PR was last refreshed. The resolved package sets did not change (163 and 133, same as before), so these are not new dependencies: they are newly-published advisories against versions that were already installed and already unscanned. That is precisely the "currently-pinned dep became known-vulnerable" case this workflow's own header says it exists to catch, and it went undetected here for five days because these two lockfiles aren't in
scan-args.Detection-only and unchanged:
fail-on-vuln: false, so the job stays green and theall-checks-passrequired-check story is untouched — findings land in the Security tab as alerts, not merge blocks. Bumping any of these is a separate change; happy to open those if you want them.(The
overridesblock in the sidecar'spackage.jsondoesn't interfere: the npm extractor reads resolved versions out of the lockfile'spackagesmap, so OSV matches what's actually installed.)One note on the scan-args contract, since it constrains future PRs: OSV-Scanner hard-errors on a missing
--lockfilepath (failed to resolve path), andfail-on-vuln: falsedoes not suppress that — it only suppresses findings. So any PR that deletes or renames one of these five packages needs to drop its--lockfileline in the same change. I deliberately did not add "skip if absent" handling, since that would silently weaken the coverage this PR is promising. All five paths are verified present onmainas of this push.