PHP2Shell, Node2Shell, Pillow, LiteLLM: how October 2026's flaws reach your AI agents
> TL;DR: October 2026 brought critical flaws in PHP, Node.js, Pillow and LiteLLM's release chain. Taken one by one, they are infrastructure flaws. In an agent architecture, they become reachable through a simple prompt injection: the agent fetches the URL, opens the file or calls the tool the attacker picked. Here are the four concrete paths, and what to check.
1. The "read a web page" tool and Node2Shell
An agent with a browsing or fetch tool calls URLs it finds in what it reads: a ticket, an email, a search result. If that tool runs on Node.js and uses fetch(), a Brotli-compressed response from a hostile server goes straight into the vulnerable decoder (CVE-2026-111497).
The scenario: a hidden instruction in a document pushes the agent to "check" a URL. The server answers with a booby-trapped Brotli stream. The MCP server or agent backend process crashes, leaks memory, or runs code.
Check: the Node.js version of every MCP server and agent backend, and the list of domains the fetch tool can reach.
2. Attachments and Pillow
An agent that generates previews, reads images or extracts text from documents often uses Pillow. With CVE-2026-112900, the file name carries the attack, not the content. If the agent saves an attachment under the sender's file name, the attacker controls an argument passed to Ghostscript.
Check: the Pillow version (13.0.0 minimum), whether Ghostscript is in the image, and systematic renaming of received files.
3. Archives and tarfile
Agents that ingest repositories, exports or document sets unpack archives. The flaws fixed in CPython's tarfile extraction filters and zipfile decompression allow writing outside the intended folder or exhausting memory. An archive uploaded by a user is enough.
Check: the CPython version of the agent's runtime, and isolation of the directory where it extracts files.
4. PHP backend tools
The agent calls tools: a CRM, a store, an intranet. Many run on PHP. With PHP2Shell, an attacker who compromises that backend also controls the responses the tool sends back to the agent. The agent then reads fabricated data and acts on it. It is an indirect injection through infrastructure.
Check: the PHP versions behind every tool the agent calls, and session.upload_progress disabled until patched.
5. The model gateway: LiteLLM
The LiteLLM 1.107.0 compromise is a reminder that the gateway holds the keys to every model. A stealer installed in the agent's environment grabs those keys, and the attacker consumes models on the company's behalf.
Check: pinned versions, no latest in production, key rotation and billing alerts.
What these flaws have in common
None of them attacks the model. All of them exploit the fact that an agent acts on inputs it does not control: a URL, a file name, an archive, a tool response. A prompt injection hands the attacker the choice of those inputs. The infrastructure patch closes the flaw, but the underlying question remains: what can your agent fetch, open or unpack, and on whose instruction?
This week's checklist
Building software? CleanIssue performs security audits for your product in real-world conditions, no source code access needed. For a first read of your exposure, start with an external review of your application.
Related articles
Three adjacent analyses to keep exploring the same attack surface.
Azure DevOps MCP flaw: hidden PR comments hijacking AI code-review agents
A flaw in Microsoft's Azure DevOps MCP server let a hidden pull-request comment hijack AI code-review agents, instructing them to approve malicious changes or leak repository content. Demonstrates the prompt-injection risk on the MCP tool-calling layer connecting AI agents to dev infrastructure.
MCP Security: What to Audit When Your AI Talks to Your Database
The Model Context Protocol (MCP) connects LLMs to your internal tools. Critical audit points to secure these connections.
AI Agents and Function Calling: Why Tool Use Is the New Attack Surface
AI agents that call tools (APIs, databases, file systems) via function calling open critical vulnerabilities. Analysis and defenses.
Sources
- Rapid7 — CVE-2026-109618 and CVE-2026-109619: Critical Unauthenticated Remote Code Execution in PHP
- Node.js — October 2026 Security Releases
- Rescana — Node2Shell: Node.js Brotli Flaw CVE-2026-111497
- Safeguard — Pillow 13.0.0 Security Release: CVE-2026-112900 and CVE-2026-112398
- Help Net Security — LiteLLM hit by second supply chain attack this year
Related services
If this topic maps to a real risk in your stack, these are the most relevant CleanIssue audits.