CrewAI — an unpatched ZDI zero-day in load_agent_from_repository (CVE-2026-92206, CVSS 8.8) on top of eight 2026 CVEs the project never posted an advisory for: a CVSS 9.8 FileWriterTool path-traversal RCE, a sandbox that falls back to unsafe Python when Docker is missing, and a blocklist ctypes can walk around
TL;DR
CrewAI (crewAIInc/crewAI, the multi-agent orchestration framework; crewai and crewai-tools on PyPI, both at 1.15.22 as of 2026-09-17) has no published GitHub Security Advisories at all — its advisory tab reads "There aren't any published security advisories" — yet the CVE record shows nine 2026 CVEs, the newest an unpatched zero-day Trend Micro's Zero Day Initiative published on 2026-09-16 after eleven months without a vendor fix. CVE-2026-92206 (ZDI-26-706, CVSS 3.1 8.8): load_agent_from_repository does not restrict a user-supplied argument before using it to import a module, so loading a malicious agent configuration is remote code execution; ZDI's only mitigation is "restrict interaction with the product." Behind it, in the GitHub Advisory Database as CVE-sourced entries with no package metadata: CVE-2026-37007 (CVSS 9.8) — FileWriterTool in crewai-tools ≤ 1.10.2rc1 accepted ../ in the filename and wrote anywhere, fixed by commit 713fa7d ("prevent path traversal in FileWriterTool", PR #4895); CVE-2026-37008 (8.1) — the Python code-interpreter's import blocklist is bypassable because ctypes.CDLL(None) loads libc with no import statement, fixed by commit fb2323b ("Code interpreter sandbox escape", PR #4791), which makes Docker mandatory; CVE-2026-62240 (8.3) — SSRF redirect/DNS-rebinding bypass in validate_url, fixed crewai-tools 1.15.1; CVE-2026-37009 (6.5) — SQL injection in NL2SQLTool; and the March 2026 cluster CVE-2026-2275 (9.6) / CVE-2026-2287 (9.8) — CodeInterpreter falls back to an escapable in-process sandbox when Docker is unavailable or stops running — plus CVE-2026-2285 (7.5, JSON loader arbitrary file read) and CVE-2026-2286 (9.8, RAG search tools SSRF). Only two of nine carry a version range. Run the latest crewai/crewai-tools, never load agent definitions from untrusted repositories, require Docker for code execution, and treat every tool that takes a path or URL from the model as reachable by prompt injection.
What happened
The zero-day (2026-09-16). ZDI advisory ZDI-26-706 (ZDI-CAN-28387; researchers Peter Girnus, Demeng Chen and Brandon Niemczyk, Trend Micro Zero Day Initiative) describes an unsafe reflection bug in CrewAI's load_agent_from_repository: "the process does not properly restrict a user-supplied argument before using it to import a module," which "enables remote code execution when a target loads a malicious agent configuration." CVSS 3.1 vector AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H (8.8, user interaction = the victim loads the configuration). ZDI's timeline: reported to the vendor 2025-10-29, follow-up 2026-02-02, publication-intent notice 2026-04-02, published as a 0-day 2026-09-16. No fixed version is named; the advisory's mitigation is to "restrict interaction with the product." NVD had no record for CVE-2026-92206 at sweep time (the ZDI advisory page is the primary, and ZDI is the CNA). "Load an agent from a repository" is precisely the sharing model the agent ecosystem is converging on — the same shape as Deadbugz (a malicious MCP server distributed by pull request) and the ClawHub/skills marketplace findings: the artifact you fetch is the code path.
The same researchers' MindsDB zero-day, same day. ZDI-26-707 (CVE-2026-92207, 8.8, authenticated code injection in MindsDB's OpenBBtable) was published alongside it on the same timeline shape (reported 2025-11-20, 0-day 2026-09-16) — folded into this repo's MindsDB advisory. Two agent-framework vendors, two reports sitting ten-plus months, two unpatched publications on one day.
The FileWriterTool RCE (CVE-2026-37007, published 2026-08-27, CVSS 9.8). GHSA-v667-mxv8-67r8 (unreviewed, CVE-sourced): "crewai-tools ≤ 1.10.2rc1" — FileWriterTool passed the model-chosen filename argument to the filesystem without normalisation, so ../../ sequences (and absolute paths, and symlink escapes) wrote outside the intended directory; AV:N/PR:N/UI:N. The fix commit 713fa7d ("fix: prevent path traversal in FileWriterTool (#4895)") adds Path.resolve() + is_relative_to() checks and three tests for traversal, absolute-path and symlink escapes. The GHSA entry lists no patched version and no package metadata, so Dependabot will not alert on it; the commit is in the current 1.15.x line (the affected range predates 1.11.0, and PyPI shows 1.15.22 current on 2026-09-16). A file-write tool with a model-chosen path is a write-anywhere primitive the moment a prompt injection reaches the model — .bashrc, authorized_keys, a cron entry, .claude/settings.json.
The code-interpreter sandbox (three CVEs, one lesson). The March cluster — CVE-2026-2275 (CVSS 9.6, "defaults to SandboxPython when Docker is unavailable… arbitrary C function calling") and CVE-2026-2287 (9.8, "does not properly check that Docker is still running during runtime, and will fall back to a sandbox setting that allows for RCE") — and the August CVE-2026-37008 (8.1, GHSA-2q68-3cp7-72v9): "CrewAI's Python blocklist approach fails to prevent sandbox escapes because it only blocks imports at runtime… calling ctypes.CDLL(None) loads the C library without relying on any import statements." The advisory's own framing is the point: a within-process sandbox has to account for the entire interpreter, not the import system. The fix commit fb2323b ("Code interpreter sandbox escape (#4791)") enforces Docker as mandatory — execution now raises RuntimeError when Docker is missing unless the user sets unsafe_mode=True. This is the exact root cause of the Pyodide escapes across seven products and the vm2 line: a denylist over language features is not a boundary, and a "safe fallback" that is weaker than the primary is a downgrade attack waiting to happen.
The network-reaching tools. CVE-2026-62240 (GHSA-mr4r-hcgx-8p4h, CVSS 8.3, published 2026-07-14): validate_url resolved DNS and checked a blocklist once, then returned the original URL unmodified, so a redirect chain or DNS rebinding reached internal services and cloud metadata; fixed in crewai-tools 1.15.1 via PR #6331, which validates throughout the request lifecycle. The March CVE-2026-2286 (9.8) is the same class in the RAG search tools ("not properly validating URLs provided at runtime"), and CVE-2026-2285 (7.5) is the JSON loader reading arbitrary server files. CVE-2026-37009 (GHSA-cfvm-24fr-q9xj, 6.5, published 2026-08-27): NL2SQLTool in 1.10.2rc1 passes an unsanitised sql_query to the database — a natural-language-to-SQL tool is designed to execute model-written SQL, so the only real control is the database role it runs as.
Why the vendor silence matters. CrewAI's own advisory tab is empty. Seven of the nine CVEs carry no affected/patched version in any database, four are tagged "unknown versions" by their CNA, and the two fix commits are only findable by reading the GHSA references. A team pinning crewai==1.9.x from a spring tutorial has no signal that anything is wrong. This repo's Check Point "No Tools Required" entry already noted that CrewAI findings were being reported "in aggregate" with no CVE numbers; these are the numbers.
Am I affected?
# Versions — the SSRF fix is the only one with a stated version (crewai-tools 1.15.1)
pip show crewai crewai-tools 2>/dev/null | grep -E '^(Name|Version)'
# Do you load agents/crews from a repository or a user-supplied path? (the 0-day)
grep -rn 'load_agent_from_repository\|from_repository' --include='*.py' . 2>/dev/null
# Do you use the tools with CVEs?
grep -rn 'FileWriterTool\|CodeInterpreterTool\|NL2SQLTool\|JSONSearchTool\|WebsiteSearchTool\|ScrapeWebsiteTool' --include='*.py' . 2>/dev/null
# Is Docker actually present where the code interpreter runs? (the fallback CVEs)
docker info >/dev/null 2>&1 && echo docker-ok || echo NO-DOCKER
You are affected by the zero-day if any code path loads an agent definition from a repository or a location an outside party can influence — there is no patched version as of 2026-09-17. You are affected by the rest if you run crewai-tools older than 1.15.1 (SSRF) or any version that predates the two fix commits (roughly, anything from before mid-2026), and in particular if your CodeInterpreter host lacks Docker.
If you are affected
- Stop loading agent configurations from repositories you do not control until CrewAI ships a fix for CVE-2026-92206; pin the agents you run to files in your own reviewed source tree.
- Upgrade
crewaiandcrewai-toolsto the current release (≥ 1.15.1 at minimum for the SSRF fix; latest for the two commit-only fixes), and confirm Docker is present whereverCodeInterpreterToolruns — never setunsafe_mode=Trueoutside a throwaway VM. - If a crew with
FileWriterToolever processed untrusted content on a pre-fix version, audit the host for writes outside the working directory (find / -newer <deploy-marker> -type f 2>/dev/nullon the relevant paths, plus~/.ssh, shell rc files, cron, agent config dirs) and rotate anything a written file could have read. → playbooks/if-your-local-ai-agent-was-exploited.md - If the crew ran on cloud infrastructure with a pre-1.15.1
crewai-toolsand any URL-taking tool, assume the metadata endpoint was reachable and rotate the instance role's credentials. → playbooks/rotating-cloud-credentials.md - Run
NL2SQLToolas a read-only database role with noFILE/DDL privileges, regardless of version.
Prevention
- → prevention/agent-sandboxing.md — model-executed code needs an OS-level boundary (container, VM, seccomp); an in-process allow/deny list is a mitigation, not a boundary, and a fallback that is weaker than the primary must fail closed.
- → prevention/package-vetting-checklist.md — an agent definition fetched from a repository is executable configuration; review it like a dependency.
- Walk
github.com/<org>/<repo>/security/advisoriesandgithub.com/advisories?query=<package>— for CrewAI the first is empty and the second holds nine CVEs.
Sources
- Zero Day Initiative — ZDI-26-706: (0Day) crewAI Framework load_agent_from_repository Unsafe Reflection Remote Code Execution Vulnerability — fetched 2026-09-17; primary: CVE-2026-92206, CVSS 8.8 vector, mechanism, researcher credits, 2025-10-29 report → 2026-09-16 0-day timeline, "restrict interaction with the product" mitigation.
- Zero Day Initiative — ZDI-26-707: (0Day) MindsDB OpenBBtable Code Injection Remote Code Execution Vulnerability — fetched 2026-09-17; the sibling same-day 0-day (CVE-2026-92207) referenced above.
- GitHub Advisory Database — GHSA-v667-mxv8-67r8 (CVE-2026-37007) — fetched 2026-09-17; CVSS 9.8,
crewai-tools ≤ 1.10.2rc1, FileWriterTool path traversal, reference to fix commit 713fa7d, published 2026-08-27, no patched version listed. - crewAIInc/crewAI — commit 713fa7d "fix: prevent path traversal in FileWriterTool (#4895)" — fetched 2026-09-17;
Path.resolve()+is_relative_to()guard and the three new escape tests. - GitHub Advisory Database — GHSA-2q68-3cp7-72v9 (CVE-2026-37008) — fetched 2026-09-17; CVSS 8.1, the
ctypes.CDLL(None)blocklist bypass, "before commit fb2323b," published 2026-09-13, explicitly distinct from CVE-2026-2275. - crewAIInc/crewAI — commit fb2323b "Code interpreter sandbox escape (#4791)" — fetched 2026-09-17; Docker made mandatory,
RuntimeErrorwithout it unlessunsafe_mode=True. - GitHub Advisory Database — GHSA-mr4r-hcgx-8p4h (CVE-2026-62240) — fetched 2026-09-17; CVSS 8.3,
validate_urlredirect/DNS-rebinding bypass, fixed crewai-tools 1.15.1, PR #6331. - GitHub Advisory Database — GHSA-cfvm-24fr-q9xj (CVE-2026-37009) — fetched 2026-09-17; CVSS 6.5, NL2SQLTool SQL injection in 1.10.2rc1, no package metadata.
- GitHub Advisory Database — GHSA-5w94-5wxp-rc42 (CVE-2026-2275), GHSA-mgj5-c563-6f76 (CVE-2026-2287), GHSA-85jf-9mcx-32r5 (CVE-2026-2285), GHSA-pgf5-gw7r-wxg7 (CVE-2026-2286) — all fetched 2026-09-17; the 2026-03-30 cluster (Docker-fallback RCE ×2, JSON loader file read, RAG search SSRF), all "affected/patched versions unknown."
- GitHub Advisory Database — search "crewai", sorted by published date — fetched 2026-09-17; the nine-CVE listing.
- crewAIInc/crewAI — security advisories tab — fetched 2026-09-17: "There aren't any published security advisories."
- PyPI release listing for
crewaiandcrewai-toolsviapip index versionsand the PyPI JSON API — fetched 2026-09-17; both at 1.15.22 (released 2026-09-16), 1.15.1 released earlier in the 1.15 line.