You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
High-severity Dependabot alert on transitive cryptography has no PR — grouped weekly config may starve security updates #334
Surfaced as a push warning ("GitHub found 1 vulnerability on hive's default branch (1 high)"), which is easy to scroll past.
Actual exposure: low, but that is not the point
cryptography is transitive, not a direct dependency: fastmcp -> authlib -> cryptography. Hive does not decrypt PKCS#7 EnvelopedData anywhere, so the vulnerable code path is not reached. The bump is hygiene, not an incident.
The real finding is the gap in the update pipeline, which will bite on an alert that does matter.
Suspected cause
.github/dependabot.yml configures the pip ecosystem as a single weekly grouped PR with open-pull-requests-limit: 1. Two candidate explanations, both worth confirming:
The limit is suppressing the security PR. Grouped version-update PRs and security-update PRs interact with open-pull-requests-limit in ways that can starve the latter.
Transitive bumps are not reachable.cryptography appears in uv.lock only as a dependency of authlib. If Dependabot will not lift a transitive pin in the lock without a corresponding manifest entry, no configuration change will produce this PR and the fix has to come via fastmcp/authlib — meaning we need a different mechanism (or an explicit floor in pyproject.toml) to respond to transitive advisories at all.
What to do
Determine which of the two causes applies.
If (1): adjust the config so security updates are not starved by the grouped version-update limit.
If (2): decide the policy for transitive advisories — either add explicit security floors to pyproject.toml when an advisory lands, or document that transitive alerts are triaged manually and how.
Either way, resolve alert 57 (bump to cryptography >= 50.0.0 in the lock).
Why file rather than just bump
A one-off uv lock --upgrade-package cryptography closes this alert and leaves the pipeline gap intact. The next transitive high-severity advisory would be equally silent, and the only reason this one was noticed is that someone happened to read a push warning.
Related: #126 (added the Dependabot config), ADR referenced pin policy for mcp in the same file.
Nothing blocks the resolution. cryptography is transitive-only (required by authlib, joserfc, pyjwt, secretstorage; absent from pyproject.toml), but no constraint pins it below 50.
And Dependabot has already done exactly this bump in this repo: #137, "bump cryptography from 46.0.5 to 46.0.7", changed only uv.lock (+45/-45) — transitive then too. So transitive updates through uv.lock are demonstrably within its reach.
Cause 1 (the limit starves it) — also not it
automated-security-fixes is enabled=true, paused=false, and vulnerability alerts are on. Per GitHub's docs, security updates are not subject to open-pull-requests-limit anyway.
The actual difference: major vs patch
#137 was 46.0.5 -> 46.0.7, a patch. This alert needs 48.0.1 -> 50.0.0, a major. And the only group in the pip block claims every dependency while permitting only two update types:
groups:
python-all:
patterns:
- "*"# claims every dependencyupdate-types:
- "minor"
- "patch"# ...but never major
No ignore entry covers cryptography, and no major bump appears anywhere in the sampled Dependabot history for this repo — only minor/patch (joserfc x2, pyjwt, mcp). Consistent with a structural exclusion rather than a one-off.
This is not just cryptography — two ecosystems are affected
ecosystem
group
patterns
update-types
pip
python-all
*
minor, patch only
npm (/site)
site-all
*
minor, patch only
github-actions
actions-all
*
all types
docker
docker-all
*
all types
So neither the Python dependencies nor the Astro site can receive a major bump via Dependabot at all — security or routine. github-actions and docker are fine. That is the bug; this alert is a symptom of it.
Proposed fix
Add "version-update:semver-major" to python-all and site-all. Keeping majors inside the group is preferable to letting them flow ungrouped, because open-pull-requests-limit: 1 would then fight them — and the config's stated rationale is explicitly to avoid the "20 stale Dependabot PRs" pattern. A grouped major is still a reviewable single PR, which is what the comment in the file asks for.
The mcp major-version ignore stays as-is — that one is deliberate and documented (_compat.py patches mcp internals). Worth noting while here: that ignore block still cites upstream #2610, which is no longer the tracker for the shim (see #127 and #336) — the pin comment deserves the same correction.
I cannot observe Dependabot's internal decision for a security update from outside, so I cannot prove the group filter is what suppressed this specific PR rather than something else in the security path. But a *-pattern group that permits only minor/patch is wrong on its own terms regardless of the security question, and fixing it is cheap — so the fix is worth making whether or not it fully explains this alert. If a security PR still fails to appear after the config change, the remaining suspect is the security-update path itself and that needs GitHub support rather than more local inspection.
Actual exposure remains low: hive never decrypts PKCS#7 EnvelopedData, so the vulnerable path is unreachable. The pipeline gap is the thing worth fixing.
Activity
mlorentedev commentedon Aug 8, 2026
Root cause found — and it is broader than this alert
I filed this with two candidate causes and no decision. Both are now settled, and the real answer was neither.
Cause 2 (transitive bumps unreachable) — falsified
Nothing blocks the resolution.
cryptographyis transitive-only (required byauthlib,joserfc,pyjwt,secretstorage; absent frompyproject.toml), but no constraint pins it below 50.And Dependabot has already done exactly this bump in this repo: #137, "bump cryptography from 46.0.5 to 46.0.7", changed only
uv.lock(+45/-45) — transitive then too. So transitive updates throughuv.lockare demonstrably within its reach.Cause 1 (the limit starves it) — also not it
automated-security-fixesisenabled=true, paused=false, and vulnerability alerts are on. Per GitHub's docs, security updates are not subject toopen-pull-requests-limitanyway.The actual difference: major vs patch
#137 was
46.0.5 -> 46.0.7, a patch. This alert needs48.0.1 -> 50.0.0, a major. And the only group in thepipblock claims every dependency while permitting only two update types:No
ignoreentry coverscryptography, and no major bump appears anywhere in the sampled Dependabot history for this repo — only minor/patch (joserfcx2,pyjwt,mcp). Consistent with a structural exclusion rather than a one-off.This is not just
cryptography— two ecosystems are affectedpippython-all*npm(/site)site-all*github-actionsactions-all*dockerdocker-all*So neither the Python dependencies nor the Astro site can receive a major bump via Dependabot at all — security or routine.
github-actionsanddockerare fine. That is the bug; this alert is a symptom of it.Proposed fix
Add
"version-update:semver-major"topython-allandsite-all. Keeping majors inside the group is preferable to letting them flow ungrouped, becauseopen-pull-requests-limit: 1would then fight them — and the config's stated rationale is explicitly to avoid the "20 stale Dependabot PRs" pattern. A grouped major is still a reviewable single PR, which is what the comment in the file asks for.The
mcpmajor-versionignorestays as-is — that one is deliberate and documented (_compat.pypatches mcp internals). Worth noting while here: that ignore block still cites upstream #2610, which is no longer the tracker for the shim (see #127 and #336) — the pin comment deserves the same correction.Then refresh the lock to clear this alert:
uv lock --upgrade-package cryptography # 48.0.1 -> 50.0.0Honest limit of this analysis
I cannot observe Dependabot's internal decision for a security update from outside, so I cannot prove the group filter is what suppressed this specific PR rather than something else in the security path. But a
*-pattern group that permits only minor/patch is wrong on its own terms regardless of the security question, and fixing it is cheap — so the fix is worth making whether or not it fully explains this alert. If a security PR still fails to appear after the config change, the remaining suspect is the security-update path itself and that needs GitHub support rather than more local inspection.Actual exposure remains low: hive never decrypts PKCS#7 EnvelopedData, so the vulnerable path is unreachable. The pipeline gap is the thing worth fixing.
fix(deps): let major bumps reach pip and npm, and clear the cryptogra…
docs(lessons): a group filter that excludes rather than batches (#340)