UNC6780 Hid Dustmaker Where Coding Agents Look First.
UNC6780 poisons PyPI, npm, and Docker Hub. Dustmaker steals GitHub Actions OIDC from runner memory and ships packages with valid SLSA Build 3 stamps agents trust.
A threat brief on CVE-2024-37032, the Ollama path-traversal RCE, and what it exposes about self-hosted AI runtimes shipping with no authentication.
CVE-2024-37032, Probllama, was a path-traversal flaw in Ollama's model-pull endpoint that let an attacker overwrite files and reach remote code execution, made worse because the default Docker image runs as root on all interfaces with no authentication. It was fixed in version 0.1.34. The lesson: self-hosted AI runtimes inherit no authentication by default.
In May 2024, Wiz Research reported a remote code execution vulnerability in Ollama, one of the most widely used tools for running language models locally. It was fixed fast. What makes it worth a brief two years on is not the bug: it is the deployment defaults that turned an input-validation slip into unauthenticated remote code execution, because those defaults are still the norm across self-hosted AI.
High Path traversal to arbitrary file write, escalating to RCE. Remote and unauthenticated in the default Docker configuration.
Ollama's /api/pull endpoint downloads models from a registry using a manifest that references content by digest. The server did not validate that the digest was what it claimed to be: a SHA-256, sixty-four hex characters. A manifest supplying a digest containing a ../ sequence was treated as a path, letting an attacker direct a write outside the intended blobs directory.
Arbitrary file write on a server is rarely the end state. By overwriting a file the process later executes or loads, an attacker turns the write into code execution.
The vendor response was genuinely fast: a fix committed within about four hours and shipped in three days. The gap that remained was on the operator side: weeks later, many internet-facing instances were still running vulnerable versions.
The bug alone is a path traversal. What raised it to critical was the environment it usually ran in.
| Product | Affected | Fixed in |
|---|---|---|
| Ollama | < 0.1.34 | 0.1.34 |
Ollama's Docker image runs the server as root and binds to 0.0.0.0 (every interface) with no authentication. Ollama has no built-in authentication at all; it assumes something in front of it provides that. A great many deployments put nothing in front of it. The result was a root-privileged, internet-exposed service with an arbitrary-write primitive and no login.
If you run Ollama:
0.0.0.0, either bind it to localhost or put it behind a reverse proxy that requires authentication.The broader move is to stop treating "self-hosted AI runtime" as if it implies "internally trusted service". These tools optimise for a fast local start, and a fast local start means no authentication and a permissive bind. That is a reasonable default for a laptop and a dangerous one for a server.
Probllama is one clean, well-documented instance of a recurring shape: AI infrastructure that ships to move fast, assumes a trusted network, and ends up on the open internet anyway. The same assumption sits under model servers, vector databases, inference gateways, and notebook environments across the ecosystem.
When you bring any such component into your stack, ask the boring questions first. What does it bind to out of the box? What authentication does it enforce by default? What privileges does its container run with? For a surprising share of AI tooling the answers are all interfaces, none, and root. As the model supply chain keeps demonstrating, that combination is only ever one input-validation bug away from an incident.
The remote, unauthenticated path requires network exposure. A localhost-only bind on a single-user machine is far lower risk. The exposure that mattered was the Docker default of listening on all interfaces, which put instances directly on the internet. Confirm what your instance binds to rather than assuming.
Ollama 0.1.34, released 8 May 2024, validates the digest format and closes the path traversal. Any version before 0.1.34 is affected. Upgrade rather than trying to mitigate the parsing flaw in place.
A reverse proxy that enforces authentication removes the unauthenticated-remote path, which is the severe one. It does not replace patching: run 0.1.34 or later and require authentication. The two address different parts of the same exposure.
No. The pattern (an AI runtime that ships with no authentication and assumes a trusted network) recurs across model servers, vector databases, and notebook environments. Probllama is a well-documented instance of a class, not a one-off.
UNC6780 poisons PyPI, npm, and Docker Hub. Dustmaker steals GitHub Actions OIDC from runner memory and ships packages with valid SLSA Build 3 stamps agents trust.
xAI's Grok 4.20 card reports a 0.00 chat violation rate. The same PDF shows AgentHarm at 0.30. Production, a DSA case, and AB 316 already bind operators.
Adobe's APSB26-146 hotfix closes CVE-2026-75650, a CVSS 10.0 Magento RCE exploited from 4 Sept. Patching is not cleanup: hunt the implant and rotate credentials.