Repository navigation
[AAASM-6240] 🐛 (deps): Clear the uncovered critical pyjwt alert plus urllib3 and oauthlib - #658
Merged
Chisanan232 merged 3 commits intoOct 1, 2026
Conversation
The only directory in this repo still on pyjwt 2.13.0, and the only one with no Dependabot pull request covering it, so GHSA-ffc3-869f-jxw9 (critical, asymmetric-PEM detection bypass) was live here with nothing in flight to fix it. 2.15.1 also clears GHSA-42vr-xj54-vc7v, which 2.14.0 does not. Verified that exactly one package version moved: pyjwt 2.13.0 -> 2.15.1. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
GHSA-vp3f-5p7w-v63m (high) covers urllib3 < 2.8.0. Every python example resolved 2.7.0, so the advisory was live in all 13 directories at once. No Dependabot security-update pull request exists for any of them. Verified per lock that exactly one package version moved, urllib3 2.7.0 -> 2.8.0, with no package added or removed in any of the 13. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
GHSA-hj66-6f7g-4r5v and GHSA-xpv3-w29h-x7cv both declare 4.0.0 as the only patched release, and GHSA-xpv3-w29h-x7cv's range is >= 3.0.0, < 4.0.0, so no 3.x version escapes either. The major is forced, not chosen. oauthlib arrives transitively via kubernetes 36.0.2 -> requests-oauthlib 2.0.0, which declares oauthlib>=3.0.0 and so admits 4.x. Verified it is not merely resolvable but behaviourally identical on every surface requests-oauthlib and kubernetes touch: a fixed-nonce OAuth1 signature hashes the same under both 3.3.1 and 4.0.0, authorization_url emits a byte-identical query string, and kubernetes.config.kube_config imports its OIDC loader clean. Verified exactly one package version moved: oauthlib 3.3.1 -> 4.0.0. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
Chisanan232
deleted the
v0.0.1/AAASM-6240/fix/clear_pyjwt_urllib3_oauthlib
branch
October 1, 2026 06:24
This was referenced Oct 1, 2026
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.



What changed
Three lock-only commits across 14
uv.lockfiles. No manifest, no source, no workflow.a799546pyjwt 2.13.0 -> 2.15.1python/semantic-kernel-tool-policy5d3f40burllib3 2.7.0 -> 2.8.0python/*fc3211boauthlib 3.3.1 -> 4.0.0python/crewai-research-crewWhy
These are open Dependabot alerts that no Dependabot pull request has ever been opened for, including this repository's only critical alert. The alerts are raised correctly; what is missing is any remediation PR, so they are fixed at source rather than waited on.
.github/dependabot.ymlsetsopen-pull-requests-limit: 10onpip. A version-update PR is throttled by that limit; a security-update PR is not. With 19 Python bumps wanted and the version-update slots saturated, coverage is throttled while the critical sits open. Every alert sharescreated_at = 2026-10-01, so this is a single bulk advisory ingestion plus a saturated limit — not a disabled surface. Dependabot, code scanning and secret scanning are all enabled and readable here.The critical, and why the obvious floor is wrong
GHSA-ffc3-869f-jxw9(critical),PyJWT <= 2.13.0, transitive, inpython/semantic-kernel-tool-policy/uv.lock. Thirteen distinct pyjwt advisories land in that one manifest, and two of them break the naive reading:GHSA-gvp8-978c-rx2q>= 2.11.0, <= 2.13.0GHSA-42vr-xj54-vc7v>= 2.0.0a1, <= 2.14.02.15.0<= 2.13.02.14.0GHSA-gvp8-978c-rx2qdeclares no patched version, but its range ends at 2.13.0 — anything above escapes it. A missing declared patch is not the same as unfixable. ConverselyGHSA-42vr-xj54-vc7vis not cleared by 2.14.0, even though eleven siblings say 2.14.0 is enough.The floor is therefore the maximum over advisories and a separate range-escape check: 2.15.0. Taking 2.14.0 would have left one advisory open; concluding "no fix available" from the first row would have left the critical open.
Verification
Each change is minimal
Every
name -> versionpair in each lock was compared before and after by parsing the TOML, not by reading the diff. In all 14 locks exactly one package version moved, with nothing added and nothing removed:with
pyjwt: ('2.13.0', '2.15.1')andoauthlib: ('3.3.1', '4.0.0')as the sole changes in their respective locks. Diffstat: 14 files, 42 insertions / 42 deletions, every hunk a version string.Each lock still installs and agrees with its manifest
uv sync --locked --all-extrasin all 13 directories, with the exit status ofuvitself captured rather than a pipeline tail:--lockedis the load-bearing flag: it makesuvrefuse rather than silently relock, so a green run proves the committed lock is what got installed. The resolved versions are read back from the installed environment, not from the lock that produced it.Worth noting from that table: ten directories were already on a safe
pyjwt >= 2.15.0. Onlysemantic-kernel-tool-policywas behind, which is exactly what the alert data said — the fix is targeted, not a blanket sweep.The oauthlib major is verified, not assumed
oauthlibarrives transitively viakubernetes 36.0.2 -> requests-oauthlib 2.0.0, andrequests-oauthlib 2.0.0declaresoauthlib>=3.0.0, so 4.x is admissible to the resolver. For a major, admissible is not the same as safe —requests-oauthlib 2.0.0predates oauthlib 4. So behaviour was compared directly in two isolated venvs pinned torequests-oauthlib==2.0.0+kubernetes==36.0.2, differing only in the oauthlib version:Authorizationheader, fixed noncen0+ timestamp1700000000, sha256 prefix9c2de00c9c86a37fb5c6eaf89c2de00c9c86a37fb5c6eaf8authorization_urlquery string?response_type=code&client_id=cid&redirect_uri=https%3A%2F%2Fx%2Fcb&scope=openid&state=STkubernetes.config.kube_configOIDC loader importThe nonce and timestamp are pinned precisely so the signature is deterministic and the two runs are comparable; without that, HMAC output differs every call and the comparison would prove nothing. Identical signature bytes mean the signing path — the part
requests-oauthlibactually drives — is unchanged across the major.Deliberately held, not ignored
The 7
@grpc/grpc-jshigh alerts (>= 1.14.0, < 1.14.5,CVE-2026-101916, improper certificate validation) innode/*/pnpm-lock.yamlandscenarios/live-core-enforcement/node-agent/pnpm-lock.yamlare not in this PR. Eight Dependabot PRs are currently rebasing against those same lockfiles. Editing them here would conflict with the bot's own work, and per bot-PR policy a lockfile conflict is the bot's to resolve. They are tracked in AAASM-6240 AC7 and will be re-checked once those PRs land.This PR is confined to
python/**, so it is line-disjoint from every in-flight node PR.No screenshots or recordings are attached: this workstation's data-handling policy keeps visual artifacts local, and the evidence above is complete without them.
Closes AAASM-6240.
🤖 Generated with Claude Code