Repository navigation
Conversation
PyJWT before 2.14.0 does not revalidate redirect destinations against the JWKS trust boundary in PyJWKClient, so a trusted JWKS endpoint that returns an attacker-influenced redirect can lead to disclosed credentials or substituted verification keys (CVE-2026-102267). The remediation version is 2.15.0. Raise the existing direct pyjwt floor from 2.13.0 to 2.15.0 and update the lockfile: pyjwt 2.13.0 -> 2.15.1. No other package changes. Co-Authored-By: Claude Code <noreply@anthropic.com>
Three example manifests still pinned the affected PyJWT 2.13.0, so following their instructions installs a vulnerable version, and the unpinned splunk-ao in the requirements files would conflict with the new pyjwt floor after the next release. Earlier vulnerability fixes updated example pins in the same PR. - examples/logging-samples/openai-responses/requirements.txt: pyjwt 2.15.1 - examples/agent/startup-simulator-3000/requirements.txt: pyjwt 2.15.1 - examples/agent/langgraph-fsi-agent/before/poetry.lock: pyjwt 2.15.1 (lock refresh only; no other package changes) Co-Authored-By: Claude Code <noreply@anthropic.com>
etserend
commented
Oct 21, 2026
etserend
left a comment
Contributor
Author
There was a problem hiding this comment.
🤖 This review was generated by the Astra agent (claude-opus-5-5). It may contain mistakes.
Verdict: approve — The PyJWT floor, the root lock and all three example manifests now exclude the affected versions. The lock diff changes only pyjwt.
Addressed before this review
- The vulnerable
pyjwt==2.13.0stayed pinned in theopenai-responsesandstartup-simulator-3000requirements files, and in thelanggraph-fsi-agent/before/poetry.lockfile. Fixed in 4ad8640: all three now resolve to 2.15.1.
etserend
marked this pull request as ready for review
October 21, 2026 02:08
This branch has not been deployed
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
Raises the
pyjwtfloor from 2.13.0 to 2.15.0 and updates the lockfile (2.13.0 -> 2.15.1) to fix CVE-2026-102267.In PyJWT before 2.14.0,
PyJWKClientdoes not revalidate redirect destinations against the JWKS trust boundary. If a configured, trusted JWKS endpoint returns an attacker-influenced redirect, the client follows it and uses the redirected response as key material. Forwarded credentials may be disclosed, or verification keys may be substituted. The scanner's remediation version is 2.15.0.Exposure in this repository
src/has no direct PyJWT use.mcp,galileo-coreandcrewai) referencesPyJWKClient.splunk-aowith other libraries that usePyJWKClient, so the published package should not allow an affected version.Changes
examples/logging-samples/openai-responses/requirements.txtandexamples/agent/startup-simulator-3000/requirements.txtnow pinpyjwt==2.15.1, andexamples/agent/langgraph-fsi-agent/before/poetry.locklocks pyjwt2.15.1(lock refresh only, no other package changes; its dependent allows>=2.8.0,<3.0.0). These were the only other tracked files pinning an affected version. Earlier vulnerability fixes (fix(deps): bump python-dotenv to 1.2.2 for VULN-88817 #151, fix(deps): bump requests to 2.33.0 for VULN-88819 #152, fix(deps): require aiohttp >=3.14.1 for VULN-88795 #123) updated example pins in the same PR.pyproject.toml:pyjwt = ">=2.13.0,<3.0.0"->">=2.15.0,<3.0.0". This raises an existing direct dependency's floor; nothing new is added.poetry.lock: pyjwt2.13.0->2.15.1, plus the content-hash. No other package changes.crewai >=2.9.0,galileo-core >=2.8.0,<3.0.0,mcp >=2.10.1.Test plan
poetry check --lock: passestests/test_deployment.py: 32 passed (pyjwt 2.15.1 installed in the test environment)main, so the change adds and fixes none of them.invoke type-check: no issues in 118 source filespoetry.lock,uv.lock,requirements*.txt) scanned: none pins pyjwt below 2.15.0pip install --dry-run -r examples/agent/startup-simulator-3000/requirements.txtresolves with the new pinpoetry update pyjwt --lockon a copy of the langgraph-fsi-agent example changes only pyjwt (6 lines, content-hash unchanged)Limits:
examples/logging-samples/openai-responses/requirements.txtdoes not resolve withpip install -ronmaineither, because it pinsgalileo-core==3.84.0while the unpinnedsplunk-aorequires>=4.4.0. That conflict exists before this change and is unrelated to pyjwt, so it is not addressed here. Also: no test exercisesPyJWKClientor its redirect handling, so the tests show nothing broke at 2.15.1 but do not demonstrate the vulnerable path itself.ruff check src testsreports existing findings in files this PR does not touch.This PR and the anyio upgrade PR (#281) both change the content-hash line in
poetry.lock. Whichever merges second needs a one-linepoetry lockrefresh.🤖 Generated with Claude Code