PyPI supply chain monitoring
Attestd monitors 27,459 PyPI packages for malicious publishes, yanked versions with security annotations, and OSV-confirmed malicious advisories. Coverage spans LLM and AI SDKs, data science libraries, web frameworks, cloud SDKs, orchestration tools, and all packages above approximately 500,000 weekly downloads.
PyPI does not require two-factor authentication for all publishers, making account takeover the most common attack vector for high-profile packages. Typosquatting (registering names similar to popular packages) and dependency confusion (publishing a public package that shadows an internal package name) are also active threats. Attestd ingests OSV malicious-package advisories, PyPI yank events with security annotations, and manually verified reports from the Attestd registry.
PyPI attack patterns
Account takeover
An attacker gains control of a PyPI maintainer account through credential phishing or credential stuffing. They publish a new version containing malicious code under the legitimate package name. This is the highest-impact attack class because the malicious version inherits all existing trust from the package.
Typosquatting
An attacker registers a package with a name similar to a popular package (e.g. `requets` instead of `requests`). Users who mistype the package name in `pip install` or `requirements.txt` install the malicious version. PyPI does not block similar-looking names.
AI-hallucinated package names
Coding agents invent plausible package names that do not exist, or conflate two real packages into one (slopsquatting). Attackers and defenders race to claim those names. Attestd flags the invented name via the typosquat signal with kind hallucination and returns the packages the requester likely meant.
Dependency confusion
An attacker discovers an internal package name (through leaked `requirements.txt` files, job postings, or error messages) and publishes a public PyPI package with the same name at a higher version number. Pip resolves the public package over an internal registry if both sources are configured.
CI/CD script injection
A package's `setup.py`, `pyproject.toml` build hooks, or post-install scripts execute arbitrary code during `pip install`. A compromised package can run commands in the CI/CD environment at install time, before the package is ever imported.
Checking a PyPI package
Use the exact PyPI package name as the product parameter. Package names are case-insensitive but lowercase is preferred:
-H "Authorization: Bearer YOUR_API_KEY"
A supply_chain.compromised: false response means the package is monitored and no malicious publish was found at the last ingestion. A supply_chain_monitored: false (or supply_chain: null) response means the package is not in the PyPI watchlist. That is not a clean signal.
Featured packages
The packages below have individual monitoring pages with API examples and attack surface details. The full watchlist covers 27,459 packages.
LLM / AI frameworks (17)
litellmLiteLLM
langchainLangChain
langchain-coreLangChain Core
langgraphLangGraph
langgraph-checkpointLangGraph Checkpoint
autogen-agentchatAutoGen AgentChat
autogen-coreAutoGen Core
crewaiCrewAI
transformersHuggingFace Transformers
openaiOpenAI SDK (Python)
anthropicAnthropic SDK (Python)
google-generativeaiGoogle Generative AI SDK
cohereCohere SDK
mistralaiMistralAI SDK
togetherTogether AI SDK
ollamaOllama Python SDK
guardrails-aiGuardrails AI