All vulnerabilities
CVE-2026-107287GHSA-v36g-jcw9-x7cwPYSEC-2026-4281PYSEC-2026-4290

pydantic-ai: Pydantic AI: Excessive resource use when local web fetching converts nested HTML

pydantic pydantic-aipipLibraries & packages
CVSS
6.5Medium
ExploitationNo known exploitationNot in CISA KEV, which does not prove it is unexploitedCISA KEV
Exploit odds (EPSS)0.28%Chance of exploitation activity in the next 30 days, higher than 19% of CVEs. Scored 23 Oct 2026FIRST EPSS
Fixed in1.107.7Also 2.52.0GitHub
Published8 Oct 2026Updated 15 Oct 2026CVE List

What fixes it

  • 1.107.7pydantic-ai, pipGitHub
  • 2.52.0pydantic-ai, pipGitHub
  • 1.107.7pydantic-ai-slim, pipGitHub
  • 2.52.0pydantic-ai-slim, pipGitHub
  • 1.107.7pydantic-ai, PyPIOSVpip install "pydantic-ai>=1.107.7"
  • 2.52.0pydantic-ai, PyPIOSVpip install "pydantic-ai>=2.52.0"
Show all 8 fixed versions
  • 1.107.7pydantic-ai-slim, PyPIOSVpip install "pydantic-ai-slim>=1.107.7"
  • 2.52.0pydantic-ai-slim, PyPIOSVpip install "pydantic-ai-slim>=2.52.0"

A fixed version on one release line is not the upgrade target for every line. Check your exact version and any vendor backports.

Description

Summary

Applications using Pydantic AI's local web-fetch tool can experience excessive CPU and memory use when it converts attacker-controlled HTML. An agent must fetch the affected page; provider-native web fetching is not affected.

Details

Nested block elements cause HTML-to-Markdown conversion to reprocess accumulated text at each level and can greatly expand the intermediate output. The response-body limit bounds downloaded bytes, while the returned-content limit is applied only after conversion. On current releases, conversion runs in a worker thread but can still consume substantial resources and delay other work in the process. Older releases performed conversion on the event loop.

Mitigation

Upgrade to a patched release of pydantic-ai or pydantic-ai-slim. If you cannot upgrade yet, avoid using local web fetching for attacker-controlled HTML.

Text from GitHub Advisory Database

Affected versions 196

  • pydantic-ai, pip>= 1.77.0, < 1.107.7GitHub
  • pydantic-ai, pip>= 2.0.0b1, < 2.52.0GitHub
  • pydantic-ai-slim, pip>= 1.77.0, < 1.107.7GitHub
  • pydantic-ai-slim, pip>= 2.0.0b1, < 2.52.0GitHub
  • pydantic-aiaffected: >= 1.77.0, < 1.107.7CVE List
  • pydantic-aiaffected: >= 2.0.0b1, < 2.52.0CVE List
  • pydantic-ai-slimaffected: >= 1.77.0, < 1.107.7CVE List
  • pydantic-ai-slimaffected: >= 2.0.0b1, < 2.52.0CVE List
  • pydantic-ai, PyPIfrom 1.77.0, fixed in 1.107.7OSV
  • pydantic-ai, PyPI1.100.0OSV
  • pydantic-ai, PyPI1.101.0OSV
  • pydantic-ai, PyPI1.102.0OSV
  • pydantic-ai, PyPI1.103.0OSV
  • pydantic-ai, PyPI1.104.0OSV
  • pydantic-ai, PyPI1.105.0OSV
  • pydantic-ai, PyPI1.106.0OSV
  • pydantic-ai, PyPI1.107.0OSV
  • pydantic-ai, PyPI1.107.1OSV
  • pydantic-ai, PyPI1.107.2OSV
  • pydantic-ai, PyPI1.107.4OSV
  • pydantic-ai, PyPI1.107.5OSV
  • pydantic-ai, PyPI1.107.6OSV
  • pydantic-ai, PyPI1.77.0OSV
  • pydantic-ai, PyPI1.78.0OSV
  • pydantic-ai, PyPI1.79.0OSV
  • pydantic-ai, PyPI1.80.0OSV
  • pydantic-ai, PyPI1.81.0OSV
  • pydantic-ai, PyPI1.82.0OSV
  • pydantic-ai, PyPI1.83.0OSV
  • pydantic-ai, PyPI1.84.0OSV
  • pydantic-ai, PyPI1.84.1OSV
  • pydantic-ai, PyPI1.85.0OSV
  • pydantic-ai, PyPI1.85.1OSV
  • pydantic-ai, PyPI1.86.0OSV
  • pydantic-ai, PyPI1.86.1OSV
  • pydantic-ai, PyPI1.87.0OSV
  • pydantic-ai, PyPI1.88.0OSV
  • pydantic-ai, PyPI1.89.0OSV
  • pydantic-ai, PyPI1.89.1OSV
  • pydantic-ai, PyPI1.90.0OSV
  • pydantic-ai, PyPI1.91.0OSV
  • pydantic-ai, PyPI1.92.0OSV
  • pydantic-ai, PyPI1.93.0OSV
  • pydantic-ai, PyPI1.94.0OSV
  • pydantic-ai, PyPI1.95.0OSV
  • pydantic-ai, PyPI1.95.1OSV
  • pydantic-ai, PyPI1.96.0OSV
  • pydantic-ai, PyPI1.96.1OSV
  • pydantic-ai, PyPI1.97.0OSV
  • pydantic-ai, PyPI1.98.0OSV
  • pydantic-ai, PyPI1.99.0OSV
  • pydantic-ai, PyPIfrom 2.0.0b1, fixed in 2.52.0OSV
  • pydantic-ai, PyPI2.0.0OSV
  • pydantic-ai, PyPI2.0.0b1OSV
  • pydantic-ai, PyPI2.0.0b2OSV
  • pydantic-ai, PyPI2.0.0b3OSV
  • pydantic-ai, PyPI2.0.0b4OSV
  • pydantic-ai, PyPI2.0.0b5OSV
  • pydantic-ai, PyPI2.0.0b6OSV
  • pydantic-ai, PyPI2.0.0b7OSV
  • pydantic-ai, PyPI2.1.0OSV
  • pydantic-ai, PyPI2.10.0OSV
  • pydantic-ai, PyPI2.11.0OSV
  • pydantic-ai, PyPI2.12.0OSV
  • pydantic-ai, PyPI2.13.0OSV
  • pydantic-ai, PyPI2.14.0OSV
  • pydantic-ai, PyPI2.14.1OSV
  • pydantic-ai, PyPI2.15.0OSV
  • pydantic-ai, PyPI2.16.0OSV
  • pydantic-ai, PyPI2.17.0OSV
  • pydantic-ai, PyPI2.18.0OSV
  • pydantic-ai, PyPI2.19.0OSV
  • pydantic-ai, PyPI2.2.0OSV
  • pydantic-ai, PyPI2.20.0OSV
  • pydantic-ai, PyPI2.21.0OSV
  • pydantic-ai, PyPI2.22.0OSV
  • pydantic-ai, PyPI2.23.0OSV
  • pydantic-ai, PyPI2.24.0OSV
  • pydantic-ai, PyPI2.25.0OSV
  • pydantic-ai, PyPI2.26.0OSV
  • pydantic-ai, PyPI2.27.0OSV
  • pydantic-ai, PyPI2.27.1OSV
  • pydantic-ai, PyPI2.28.0OSV
  • pydantic-ai, PyPI2.29.0OSV
  • pydantic-ai, PyPI2.3.0OSV
  • pydantic-ai, PyPI2.30.0OSV
  • pydantic-ai, PyPI2.31.0OSV
  • pydantic-ai, PyPI2.31.1OSV
  • pydantic-ai, PyPI2.32.0OSV
  • pydantic-ai, PyPI2.32.1OSV
  • pydantic-ai, PyPI2.32.2OSV
  • pydantic-ai, PyPI2.33.0OSV
  • pydantic-ai, PyPI2.34.0OSV
  • pydantic-ai, PyPI2.35.0OSV
  • pydantic-ai, PyPI2.35.1OSV
  • pydantic-ai, PyPI2.35.3OSV
  • pydantic-ai, PyPI2.36.0OSV
  • pydantic-ai, PyPI2.37.0OSV
  • pydantic-ai, PyPI2.38.0OSV
  • pydantic-ai, PyPI2.39.0OSV
  • pydantic-ai, PyPI2.4.0OSV
  • pydantic-ai, PyPI2.40.0OSV
  • pydantic-ai-slim, PyPIfrom 1.77.0, fixed in 1.107.7OSV
  • pydantic-ai-slim, PyPI1.100.0OSV
  • pydantic-ai-slim, PyPI1.101.0OSV
  • pydantic-ai-slim, PyPI1.102.0OSV
  • pydantic-ai-slim, PyPI1.103.0OSV
  • pydantic-ai-slim, PyPI1.104.0OSV
  • pydantic-ai-slim, PyPI1.105.0OSV
  • pydantic-ai-slim, PyPI1.106.0OSV
  • pydantic-ai-slim, PyPI1.107.0OSV
  • pydantic-ai-slim, PyPI1.107.1OSV
  • pydantic-ai-slim, PyPI1.107.2OSV
  • pydantic-ai-slim, PyPI1.107.4OSV
  • pydantic-ai-slim, PyPI1.107.5OSV
  • pydantic-ai-slim, PyPI1.107.6OSV
  • pydantic-ai-slim, PyPI1.77.0OSV
  • pydantic-ai-slim, PyPI1.78.0OSV
  • pydantic-ai-slim, PyPI1.79.0OSV
  • pydantic-ai-slim, PyPI1.80.0OSV
  • pydantic-ai-slim, PyPI1.81.0OSV
  • pydantic-ai-slim, PyPI1.82.0OSV
  • pydantic-ai-slim, PyPI1.83.0OSV
  • pydantic-ai-slim, PyPI1.84.0OSV
  • pydantic-ai-slim, PyPI1.84.1OSV
  • pydantic-ai-slim, PyPI1.85.0OSV
  • pydantic-ai-slim, PyPI1.85.1OSV
  • pydantic-ai-slim, PyPI1.86.0OSV
  • pydantic-ai-slim, PyPI1.86.1OSV
  • pydantic-ai-slim, PyPI1.87.0OSV
  • pydantic-ai-slim, PyPI1.88.0OSV
  • pydantic-ai-slim, PyPI1.89.0OSV
  • pydantic-ai-slim, PyPI1.89.1OSV
  • pydantic-ai-slim, PyPI1.90.0OSV
  • pydantic-ai-slim, PyPI1.91.0OSV
  • pydantic-ai-slim, PyPI1.92.0OSV
  • pydantic-ai-slim, PyPI1.93.0OSV
  • pydantic-ai-slim, PyPI1.94.0OSV
  • pydantic-ai-slim, PyPI1.95.0OSV
  • pydantic-ai-slim, PyPI1.95.1OSV
  • pydantic-ai-slim, PyPI1.96.0OSV
  • pydantic-ai-slim, PyPI1.96.1OSV
  • pydantic-ai-slim, PyPI1.97.0OSV
  • pydantic-ai-slim, PyPI1.98.0OSV
  • pydantic-ai-slim, PyPI1.99.0OSV
  • pydantic-ai-slim, PyPIfrom 2.0.0b1, fixed in 2.52.0OSV
  • pydantic-ai-slim, PyPI2.0.0OSV
  • pydantic-ai-slim, PyPI2.0.0b1OSV
  • pydantic-ai-slim, PyPI2.0.0b2OSV
  • pydantic-ai-slim, PyPI2.0.0b3OSV
  • pydantic-ai-slim, PyPI2.0.0b4OSV
  • pydantic-ai-slim, PyPI2.0.0b5OSV
  • pydantic-ai-slim, PyPI2.0.0b6OSV
  • pydantic-ai-slim, PyPI2.0.0b7OSV
  • pydantic-ai-slim, PyPI2.1.0OSV
  • pydantic-ai-slim, PyPI2.10.0OSV
  • pydantic-ai-slim, PyPI2.11.0OSV
  • pydantic-ai-slim, PyPI2.12.0OSV
  • pydantic-ai-slim, PyPI2.13.0OSV
  • pydantic-ai-slim, PyPI2.14.0OSV
  • pydantic-ai-slim, PyPI2.14.1OSV
  • pydantic-ai-slim, PyPI2.15.0OSV
  • pydantic-ai-slim, PyPI2.16.0OSV
  • pydantic-ai-slim, PyPI2.17.0OSV
  • pydantic-ai-slim, PyPI2.18.0OSV
  • pydantic-ai-slim, PyPI2.19.0OSV
  • pydantic-ai-slim, PyPI2.2.0OSV
  • pydantic-ai-slim, PyPI2.20.0OSV
  • pydantic-ai-slim, PyPI2.21.0OSV
  • pydantic-ai-slim, PyPI2.22.0OSV
  • pydantic-ai-slim, PyPI2.23.0OSV
  • pydantic-ai-slim, PyPI2.24.0OSV
  • pydantic-ai-slim, PyPI2.25.0OSV
  • pydantic-ai-slim, PyPI2.26.0OSV
  • pydantic-ai-slim, PyPI2.27.0OSV
  • pydantic-ai-slim, PyPI2.27.1OSV
  • pydantic-ai-slim, PyPI2.28.0OSV
  • pydantic-ai-slim, PyPI2.29.0OSV
  • pydantic-ai-slim, PyPI2.3.0OSV
  • pydantic-ai-slim, PyPI2.30.0OSV
  • pydantic-ai-slim, PyPI2.31.0OSV
  • pydantic-ai-slim, PyPI2.31.1OSV
  • pydantic-ai-slim, PyPI2.32.0OSV
  • pydantic-ai-slim, PyPI2.32.1OSV
  • pydantic-ai-slim, PyPI2.32.2OSV
  • pydantic-ai-slim, PyPI2.33.0OSV
  • pydantic-ai-slim, PyPI2.34.0OSV
  • pydantic-ai-slim, PyPI2.35.0OSV
  • pydantic-ai-slim, PyPI2.35.1OSV
  • pydantic-ai-slim, PyPI2.35.3OSV
  • pydantic-ai-slim, PyPI2.36.0OSV
  • pydantic-ai-slim, PyPI2.37.0OSV
  • pydantic-ai-slim, PyPI2.38.0OSV
  • pydantic-ai-slim, PyPI2.39.0OSV
  • pydantic-ai-slim, PyPI2.4.0OSV
  • pydantic-ai-slim, PyPI2.40.0OSV

References 8