Skip to main content
← All vulnerabilities
CVE-2026-107286PYSEC-2026-4285GHSA-6FQQ-452J-QHRPPYSEC-2026-4276

Pydantic AI: Concurrency-limited models can keep their slot when a streamed request ends early

Published
Last modified
published
Not listed in CISA KEV
Fix
Fixed in 2.53.0
None on Exploit-DB, Metasploit or GitHub
  • Exploitation: none
  • Automatable: yes
  • Technical impact: partial

Summary

Pydantic AI is a Python agent framework for building applications and workflows with Generative AI. From 2.10.0 until 2.53.0, streamed requests made through ConcurrencyLimitedModel or limit_model_concurrency can retain shared concurrency slots because anyio.CapacityLimiter associates an acquired slot with the borrowing task while streaming cleanup can run in a different task. Early stream termination, cancellation, consumer exceptions, or complete stream_text() consumption with debounce_by=0.1 can therefore leave capacity occupied, eventually preventing later requests that share the long-lived limiter from proceeding and causing a denial of service. Agent-level max_concurrency and non-streaming model requests are not affected. This issue is fixed in version 2.53.0.

Timeline

  1. CVE published
  2. CISA SSVC assessment

    Exploitation: none · Automatable: yes · Technical impact: partial

  3. Record last updated

Affected versions

  • pydantic pydantic-ai

    From 2.10.0 · fixed in 2.53.0

  • pydantic pydantic-ai-slim

    From 2.10.0 · fixed in 2.53.0

  • pydantic-aiPyPI

    From 2.10.0 · fixed in 2.53.0

  • pydantic-ai-slimPyPI

    From 2.10.0 · fixed in 2.53.0

References 4

GitHub · pydantic/pydantic-ai