
Supply Chain Advisory
- 77 installs
- 325 repo stars
- Updated August 2, 2026
- athola/claude-night-market
Supply Chain Advisory is an agent skill that guides triage and containment when Python dependencies may be compromised in a supply-chain attack.
About
Supply Chain Advisory is an agent skill for responding to and preventing dependency supply-chain incidents, especially compromised Python packages on PyPI. It ships structured metadata on known bad versions alongside a triage checklist to search lockfiles and virtualenvs, identify malicious file indicators, and contain credential-exfiltration risk without destroying forensic evidence. Solo builders using agents that install packages rapidly benefit because one poisoned dependency can harvest environment variables, SSH keys, cloud tokens, and database passwords. Invoke it when news breaks about a maintainer compromise, when auditing installs after a security bulletin, or when wiring proactive checks at session start. The skill complements generic code review by focusing on package integrity, containment order, and documented severity rather than feature work.
- Curated compromised package version metadata (e.g. litellm 1.82.7–1.82.8) with severity and sources
- Five-minute scope checklist: lockfiles, installed METADATA, malicious artifact search
- Containment playbook: stop processes, preserve venv for forensics, env snapshot
- Indicators such as litellm_init.pth and modified proxy_server.py called out explicitly
- SessionStart hook integration for ongoing advisory awareness
Supply Chain Advisory by the numbers
- 77 all-time installs (skills.sh)
- Ranked #1,122 of 2,203 Security skills by installs in the Skillselion catalog
- Security screen: LOW risk (skills.sh audit)
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/athola/claude-night-market --skill supply-chain-advisoryAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 77 |
|---|---|
| repo stars | ★ 325 |
| Security audit | 3 / 3 scanners passed |
| Last updated | August 2, 2026 |
| Repository | athola/claude-night-market ↗ |
What it does
Triage suspected PyPI or dependency supply-chain compromises with lockfile scans, containment steps, and documented compromised versions.
Who is it for?
Best when you manage uv/pip lockfiles locally and need a fast, repeatable incident checklist when advisories drop.
Skip if: Organizations wanting full SOC playbooks, non-Python ecosystems only, or greenfield projects with zero third-party dependencies.
When should I use this skill?
Supply chain compromise reported, SessionStart hook runs, or user needs to assess PyPI package versions against known compromised metadata and respond.
What you get
You complete scoped lockfile and artifact checks, contain active risk, preserve evidence, and align actions to documented compromised versions and indicators.
- Scoped list of affected packages/versions in lockfiles and venvs
- Containment actions with forensic preservation notes
- Environment snapshot command guidance for incident records
By the numbers
- Scope assessment triage checklist targets roughly 5 minutes
- Documented critical litellm compromised versions 1.82.7 and 1.82.8 (March 2026 advisory)
Files
Overview
Supply chain attacks bypass traditional code review by compromising upstream dependencies. This skill provides patterns for detecting, preventing, and responding to compromised packages in Python ecosystems.
When To Use
- After a supply chain advisory is published
- When auditing dependencies for a new or existing project
- During incident response for a suspected compromise
- When adding the SessionStart hook to a project
When NOT To Use
- General CVE triage unrelated to dependency supply chain
- Application-level vulnerability scanning (use a SAST tool)
- License compliance audits (different concern)
Known-Bad Versions Blocklist
The blocklist is at ${CLAUDE_SKILL_DIR}/known-bad-versions.json. It is consumed by:
1. SessionStart hook: warns per-session when compromised versions detected 2. `make supply-chain-scan`: CI/local scanning target 3. This skill: manual audit guidance
Blocklist Format
{
"package_name": [{
"versions": ["x.y.z"],
"date": "YYYY-MM-DD",
"description": "What the attack did",
"indicators": ["files or patterns to search for"],
"source": "advisory URL",
"severity": "critical|high|medium"
}]
}Adding a New Entry
1. Add the entry to ${CLAUDE_SKILL_DIR}/known-bad-versions.json 2. Add version exclusions (!=x.y.z) to affected pyproject.toml files 3. Document in docs/dependency-audit.md under Supply Chain Incidents 4. Run make supply-chain-scan to verify detection works
Quick Scan Commands
Check all lockfiles on machine for known-bad versions
# Scan uv.lock files for a specific compromised version
grep -r "package_name.*version" --include="uv.lock" /path/to/projects
# Search for malicious artifacts
find /path/to/projects -name "suspicious_file.pth" 2>/dev/null
# Check installed versions in virtualenvs
find /path/to/projects -path "*/.venv/lib/*/PACKAGE*/METADATA" \
-exec grep "^Version:" {} +Verify lockfile hash integrity
uv.lock includes SHA256 hashes for every package. If a package is re-published with different content under the same version, uv sync will fail with a hash mismatch. This is your strongest automatic defense.
Defense Layers
| Layer | Tool | Catches |
|---|---|---|
| Lockfile hashes | uv.lock SHA256 | Tampered re-published versions |
| Version exclusions | pyproject.toml != | Known-bad versions on fresh resolve |
| SessionStart hook | sanctum hook | Per-session warning for compromised deps |
| CI scanning | OSV, Safety | CVE database, and advisory matching |
| Artifact scanning | make supply-chain-scan | Malicious files (.pth, scripts) |
Limitations
- Zero-day supply chain attacks have no prior advisory: lockfile hashes
are the only automatic defense during the attack window
- Safety/CVE databases lag behind real-world compromises
- OSV provides broader coverage but is still reactive
{
"_meta": {
"description": "Known compromised PyPI package versions. Used by supply-chain-advisory skill and SessionStart hook.",
"last_updated": "2026-03-27",
"format": "package_name -> list of { versions, date, description, indicators, source }"
},
"litellm": [
{
"versions": ["1.82.7", "1.82.8"],
"date": "2026-03-24",
"description": "Compromised maintainer credentials via Trivy supply chain attack. Credential stealer harvesting env vars, SSH keys, cloud credentials, k8s tokens, db passwords.",
"indicators": ["litellm_init.pth", "modified proxy_server.py"],
"source": "https://docs.litellm.ai/blog/security-update-march-2026",
"severity": "critical"
}
]
}
Incident Response
Triage Checklist
When a supply chain compromise is reported:
1. Scope Assessment (5 minutes)
- [ ] Identify affected package name and versions
- [ ] Search all lockfiles on machine:
rg "package.*version" --glob "uv.lock" ~(orgrep -r --include="uv.lock") - [ ] Check installed versions:
find ~ -path "*/.venv/*/METADATA" -exec rg Version {} +(orgrep) - [ ] Search for malicious artifacts:
find ~ -name "indicator_file" 2>/dev/null
2. Containment (if affected)
- [ ] Stop any running processes using the affected package
- [ ] Do NOT delete the virtualenv yet (preserve for forensics)
- [ ] Disconnect from sensitive services if credential theft suspected
- [ ] Capture current environment:
env > /tmp/env_snapshot_$(date +%s).txt
3. Remediation
- [ ] Add version exclusions to
pyproject.toml:!=affected.version - [ ] Remove malicious artifacts from virtualenvs
- [ ] Regenerate lockfile:
uv lock - [ ] Reinstall:
uv sync - [ ] Rotate ALL credentials that were accessible to the process
4. Credential Rotation Priority
If a credential-stealing payload was present, rotate in this order:
1. Cloud provider keys (AWS, GCP, Azure): highest blast radius 2. Database passwords: data exfiltration risk 3. SSH keys: lateral movement risk 4. API tokens: service access 5. Kubernetes tokens: cluster compromise 6. Environment variables: may contain any of the above
5. Documentation
- [ ] Add incident to
docs/dependency-audit.md - [ ] Update
known-bad-versions.jsonblocklist - [ ] File GitHub issue linking to advisory
- [ ] Notify team members who may have affected environments
Post-Incident Review
After containment, evaluate:
1. Why did existing tooling not catch this? 2. What detection layer would have caught it earliest? 3. Should scanning frequency be increased? 4. Are there similar packages in our dependency tree at risk?
Scanning Patterns
Lockfile Audit
For each lockfile type, extract package names and versions, then compare against the known-bad-versions blocklist.
uv.lock
import re
from pathlib import Path
def parse_uv_lock(path: Path) -> dict[str, str]:
"""Extract package->version mapping from uv.lock."""
packages = {}
content = path.read_text()
for match in re.finditer(
r'^name\s*=\s*"([^"]+)".*?^version\s*=\s*"([^"]+)"',
content,
re.MULTILINE | re.DOTALL,
):
packages[match.group(1)] = match.group(2)
return packagesrequirements.txt
def parse_requirements(path: Path) -> dict[str, str]:
"""Extract package->version from pinned requirements."""
packages = {}
for line in path.read_text().splitlines():
line = line.strip()
if "==" in line and not line.startswith("#"):
name, version = line.split("==", 1)
packages[name.strip()] = version.strip()
return packagesArtifact Scanning
Search for known malicious file indicators across a directory tree:
from pathlib import Path
def scan_for_artifacts(root: Path, indicators: list[str]) -> list[Path]:
"""Find known malicious artifacts in a directory tree."""
found = []
for indicator in indicators:
found.extend(root.rglob(indicator))
return foundVersion Matching
def is_compromised(
package: str,
version: str,
blocklist: dict,
) -> dict | None:
"""Check if a package version is in the known-bad blocklist."""
entries = blocklist.get(package, [])
for entry in entries:
if version in entry["versions"]:
return entry
return NoneRelated skills
How it compares
Use as a focused dependency-incident skill, not as a substitute for full SAST/DAST or platform-wide SIEM operations.
FAQ
Who is supply-chain-advisory for?
Developers who install Python dependencies via agents or CI and need structured steps when package compromises are reported.
When should I use supply-chain-advisory?
During Ship before releasing or after a security bulletin, and in Operate when monitoring running services that might have pulled a bad version.
Is supply-chain-advisory safe to install?
It references real incidents and may trigger filesystem searches; review the Security Audits panel on this Prism page and validate commands before running them on production machines.