docs(security): note CVE-2026-43868 in thrift Rust crate; ci: skip docs-only PRs#4
Merged
Merged
Conversation
GitHub Dependabot flagged the Apache Thrift "Memory Allocation with Excessive Size Value" advisory (CVE-2026-43868 / GHSA-2f9f-gq7v-9h6m), which lists the Rust `thrift` crate ≤ 0.22.0 as affected. We can't actually fix it: the latest published version on crates.io is 0.17.0 (from Nov 2022), and Apache Thrift's "0.23.0 fix" is in the C++/Java/Python bindings only — no patched Rust crate has been published. We pull thrift transitively via `parquet` in hyperdb-mcp (parquet metadata parsing of operator-supplied local files). Add forward-looking comments to deny.toml and .cargo/audit.toml so a future maintainer sees the situation. No waiver yet — RustSec hasn't issued a RUSTSEC-2026-NNNN ID, so cargo-audit / cargo-deny aren't failing on it. The comments document what to do when the ID lands.
Pure-prose changes (top-level *.md, docs/**, LICENSE files, GitHub issue/PR templates) don't affect Rust compilation, lint output, advisory checks, or the publish dry-run. Add paths-ignore to ci.yml push and pull_request triggers so docs-only PRs don't burn CI minutes. Deliberately excluded from the ignore list: - deny.toml and .cargo/audit.toml — these configure the security checks themselves; a typo would silently disable them. - .github/workflows/** — workflow edits should run CI. - examples/**.rs — these are Rust source compiled by cargo build --examples and validated as part of the test job. GitHub Actions doesn't reliably support YAML anchors, so the same list is duplicated under push and pull_request — keep them in sync. Mixed PRs (docs + code) still trigger CI because paths-ignore only suppresses the workflow when ALL changed files match.
f4f79f0 to
c04f07d
Compare
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.
Summary
Two related changes in this branch:
docs(security): note CVE-2026-43868 in thrift Rust crate— GitHub Dependabot flagged the Apache Thrift "Memory Allocation with Excessive Size Value" advisory (CVE-2026-43868 / GHSA-2f9f-gq7v-9h6m), which lists the Rustthriftcrate ≤ 0.22.0 as affected. We can't fix it by upgrading, so this commit adds forward-looking comments todeny.tomland.cargo/audit.tomldocumenting what to do when RustSec eventually issues aRUSTSEC-2026-NNNNID.ci: skip CI for docs-only changes via paths-ignore— addspaths-ignorefilters toci.yml'spushandpull_requesttriggers so future docs-only PRs (e.g. README typo fixes, prose updates indocs/) don't burn CI minutes.The two are bundled because this PR is itself the kind of mostly-prose / config-only change that motivates the second commit. Note that this PR still triggers CI —
ci.ymlitself is modified, which (correctly) doesn't matchpaths-ignore.Commit 1:
docs(security): note CVE-2026-43868 in thrift Rust crateWhy we can't just bump the version
thriftRust crate≤ 0.22.0thrift 0.17.0(Nov 2022)parquet 58.2.0(used byhyperdb-mcpfor parquet metadata parsing)cargo tree --invert thrift@0.17.0confirms the path:Why CI isn't currently failing on this
Both our advisory checks (
cargo auditandcargo deny check advisories) consume the RustSec advisory-db. As of this commit, RustSec hasn't ingested the GHSA into aRUSTSEC-2026-NNNNID, so neither tool flags it.When RustSec does ingest it (typically days to weeks after a GHSA lands), the
auditanddenyjobs will start failing. The forward-looking comments tell the next maintainer exactly what to do at that point.What changes (commit 1)
Two files, comments only:
deny.toml— block comment after the existing[advisories].ignorelist explaining the situation and instructing how to add the waiver when RustSec issues an ID..cargo/audit.toml— same explanation, shorter form, since this file mirrorsdeny.toml's ignore list.No code changes. No version bumps.
Threat model
For context (so the future waiver rationale is coherent):
thriftdirectly. It comes in only throughparquet, which uses it for parsing parquet file metadata.hyperdb-mcpexposes parquet viaload_file/query_file/exporttools. The inputs are operator-supplied local file paths — there's no remote endpoint that ingests untrusted parquet over the wire.Commit 2:
ci: skip CI for docs-only changes via paths-ignoreRationale
Pure-prose changes (top-level
*.md,docs/**, LICENSE files, GitHub issue/PR templates) don't affect Rust compilation, lint output, advisory checks, or the publish dry-run. Withoutpaths-ignore, every typo fix in a README runs the full test matrix on three platforms.What changes (commit 2)
ci.yml'spush:andpull_request:triggers gainpaths-ignorefilters:Deliberately NOT in the ignore list
deny.tomland.cargo/audit.toml— these configure the security checks themselves; a typo would silently disable them..github/workflows/**— workflow edits should run CI.examples/**.rs— these are Rust source compiled bycargo build --examplesand validated as part of the test job.Cargo.toml/Cargo.lock/package.json— affect compilation and dependency graphs.Edge cases verified
paths-ignoreonly suppresses the workflow when ALL changed files match.pushandpull_request. A maintenance comment in the file says to keep them in sync.mainhas no required-status-checks rule today, so docs-only PRs that skip CI will merge cleanly. If required checks are added later, the right pattern is to mark them as "required if run" rather than strictly required.Why bundle this commit with the thrift docs
This branch is itself a comments-only / config-only change — exactly the kind of PR that motivates
paths-ignore. The next pure-prose PR after this lands will benefit. (This PR still triggers CI becauseci.ymlitself is modified.)Recommended follow-ups (out of scope for this PR)
apache/arrow-rsasking when parquet will switch offthrift(the alternativeparquet2crate doesn't use thrift at all).RUSTSEC-2026-NNNNID; when it lands, follow the in-file instructions indeny.toml/.cargo/audit.tomlto add the waiver.Test plan
ci.ymlis modified, so the full matrix runs.cargo deny checkandcargo audit --deny warningscontinue to pass (TOML comment-only changes shouldn't affect either).*.mdfile and confirm CI does NOT trigger on it.*.md+*.rschanges and confirm CI DOES trigger on it.