Repository navigation
fix(security): resolve Dependabot, Scorecard and CodeQL alerts - #1518
Merged
Merged
Conversation
Resolves Dependabot alerts #57-#60 and #66-#69 (GHSA-6966-vjj6-99xv, GHSA-3325-v43h-43rv, GHSA-3jqq-pw4j-pqcj). Both are transitive through the examples extra's jupyter>=1.0; only the lock and its examples.txt export move.
Fixes RUSTSEC-2026-0306 (unsound AVX2 hex_decode_unchecked read past src), reached through gix-hash. Reported by the Scorecard Vulnerabilities check (alert #776); Dependabot did not flag it. The new defmt 0.3 lock entry is an optional feature nothing enables.
Fixes PYSEC-2026-4054 / GHSA-c3mw-737p-c7g2 (5xx request logging leaks token-bearing Referer values). Transitive via the examples extra; reported only by the Scorecard Vulnerabilities check (alert #776).
cargo-deny's default unsound scope covers direct dependencies only, so RUSTSEC-2026-0306 in the transitive faster-hex passed the cargo-deny CI job and surfaced only through Scorecard alert #776. Verified: with unsound = "all" the check fails on main's lockfile and passes here.
Alert #803's source is parse_iso8601's zero accumulator, not a SECONDS_PER_* constant.
CodeQL's Rust taint tracking is field-insensitive on a struct, so the window constants written into Options tainted Options::author_hash_key and surfaced as rust/hard-coded-cryptographic-value (alerts #799-#803). A repo-local model pack excludes that field from the read taint step; store-then-read flow through the field is still tracked. The rationale moves from the HMAC call to the field the model names, which is where a rename would break it.
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #1518 +/- ##
=======================================
Coverage 98.01% 98.02%
=======================================
Files 359 359
Lines 96210 96210
Branches 95779 95779
=======================================
+ Hits 94303 94312 +9
+ Misses 1222 1214 -8
+ Partials 685 684 -1
Flags with carried forward coverage won't be shown. Click here to find out more.
🚀 New features to boost your workflow:
|
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.
Resolves the open GitHub security alerts.
Dependency advisories
The Jupyter packages are transitive through the
examplesextra only, so onlyuv.lockandrequirements/examples.txtmove.faster-hexships inbcathroughgix-hash, which calls only the checkedhex_decode/hex_encode. Thedefmt 0.3.100lock entry it adds is behind a feature nothing enables.An OSV batch query over all 13 lockfiles in the repo (Cargo, uv, npm) reports 0 hits on this branch, and all of #776's advisories on
main. Scorecard only scansmain, so #776 closes on its first run after merge.cargo-deny missed the Rust advisory
The
cargo-denyCI job passed onmainwithfaster-hex0.10.0 for over two weeks: its defaultunsoundscope covers direct dependencies only.deny.tomlnow setsunsound = "all". With that setting the check fails onmain's lockfile and passes here.CodeQL #799–#803 (
rust/hard-coded-cryptographic-value)False positives. CodeQL's Rust taint tracking is field-insensitive on a struct, so the
SECONDS_PER_*window constants andparse_iso8601's zero accumulator, written intoOptions, taintedOptions::author_hash_key. That key is only ever built byAuthorHashKey::newfrom caller-supplied bytes.Rather than leave them dismissed,
.github/codeql/extensions/rust-modelsadds a repo-local model pack that puts the field in CodeQL'sexcludeFieldTaintStepextensible predicate. That removes only the "read any field of a tainted struct" shortcut. Code scanning loads packs in that directory automatically. A comment on the field records that a rename must update the model.Verification
make pre-commit:BCA_GATE: passcargo deny check: advisories, bans, licenses, sources okgit archiveof this branch. This PR's own CodeQL result can't show the fix: PR runs are diff-informed and report only alerts on changed lines, and the alerts' source lines are unchanged.main.--codescanning-config, ascodeql-actiondoes, and the query run with no extra flags: 0 results. The CLI copiedextensions/rust-models/models/vcs.model.ymlinto the database's internal extension pack.extensions/**/*.yamlpattern (the.yamltwin of*.yml) matched nothing.