fix: v3.15.3 hotfix — python-multipart CVE + recover from broken v3.15.2 tag#23
Merged
Merged
Conversation
…5.2 tag Two issues bundled into one hotfix release. 1. python-multipart 0.0.26 → 0.0.27: patches a DoS vulnerability in MultipartParser header parsing (unbounded part headers cause CPU exhaustion). Affects every ASGI app in the FastMCP dep chain. The dependabot PR (#21) flagged this; closing it was wrong on my part. 2. v3.15.2 was tagged at 308ed41 (pre-PR-#22 merge) instead of 6b19ec4 because a stale uv.lock blocked the local fast-forward during release scripting. The broken v3.15.2 tag stays as a graveyard. v3.15.3 is the canonical version with both the MCP startup robustness work (PR #22 contents) AND this security bump.
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.
Why a hotfix
Two issues converged.
1. CVE: python-multipart DoS via unbounded part headers
python-multipart0.0.26 (transitive via fastmcp) has a denial-of-service vulnerability inMultipartParserheader parsing. An attacker can send oversized individual header values OR many repeated headers without terminating the header block; both cause CPU exhaustion before request rejection. Affects every ASGI / Starlette / FastAPI app in the dep chain.Patched in 0.0.27 by enforcing default parser limits for max header count and header size.
Dependabot opened PR #21 with this bump. I closed it earlier today thinking it was a routine patch bump — that was the wrong call given it carries a CVE fix. This hotfix re-applies the bump on a current branch.
2. v3.15.2 release was tagged at the wrong commit
PR #22 merged on GitHub at
6b19ec4(with pyproject correctly bumped to 3.15.2 and the v3.15.2 CHANGELOG section). My local main was stuck at308ed41due to a stale uv.lock blocking the fast-forward, so when I rangit tag -a v3.15.2 && git push, the tag landed at308ed41(where pyproject still says 3.15.1, no v3.15.2 CHANGELOG, GitHub release notes empty).The broken v3.15.2 tag stays as a graveyard entry (force-push of a tag that's been live ~10 minutes is destructive; not worth the rewrite). v3.15.3 is the canonical version that bundles BOTH PR #22's contents AND this security fix.
What lands here
uv.lock: python-multipart 0.0.26 → 0.0.27pyproject.toml: 3.15.2 → 3.15.3.claude-plugin/marketplace.json: 3.15.2 → 3.15.3CHANGELOG.md: new v3.15.3 section explaining both issues; v3.15.2 section preserved for history52 targeted tests still pass locally.
Upgrade path
If you're on v3.15.0, v3.15.1, or v3.15.2 — upgrade directly to v3.15.3. Skip v3.15.2 (broken tag).
Process lessons
git tagfrom a working tree that hasn't successfullygit pull'd the merge commit. The release scripting now needs a guard.