Pin the Digest: Agent Skills Are Dependencies Without a Lockfile
Four vendors, one logic error, and a process that already holds your repo tokens and warehouse credentials — the fix is a policy change you can ship before the last patch lands.
The defect, and why it outranks an ordinary CVE for an ML team
Each of the four agents scans a skill at download time, then auto-installs later versions published under the same name with no content hash or signature check. Anthropic, OpenAI and Google patched after the June 2026 disclosure. Microsoft has not confirmed one. A poisoned pip wheel gets the build container. A poisoned skill gets a process that already holds repository tokens, a shell, and increasingly warehouse and feature-store credentials, and it arrives as natural-language instructions, which no static scanner classifies reliably. The payload Air cites is intellectual-property theft. In a modeling org, that means feature-engineering code, prompt libraries, retrieval configs, and the dataset paths written into them.
Strip the AI framing and the defect is dependency confusion: name-based resolution with no hash, no signature, no lockfile. npm and PyPI solved this a decade ago. It has been reimplemented from scratch in a layer that runs with more privilege.
| Control | Your Python stack | Agent skills (pre-patch) | Your exposure |
|---|---|---|---|
| Version identity | Semver plus immutable release | Mutable name | No way to assert "same skill as yesterday" |
| Integrity check | Hash pinning in a lockfile | None | Silent content substitution |
| Scan cadence | Every resolve in CI | Install time only | The update path is entirely unscanned |
| Inventory | SBOM / requirements.txt | Undocumented local directories | You cannot enumerate exposure today |
| Human review | PR-gated dependency bumps | Silent auto-update | No approval in the loop |
Where the reporting is genuinely thin
Hold this to the standard a paper would get. There are no CVEs, no proof-of-concept, no affected version ranges, and no independent reproduction. Air is a Sequoia-backed vendor whose commercial position improves with the headline, three of the four vendors declined to comment, and nobody has verified that "largely fixed" means digest verification and not a narrower band-aid. "No evidence of exploitation" is a null result from a party with no fleet telemetry, so it puts no upper bound on exploitation.
The most quotable claim is the least tested: that four engineers at four companies made the same logical mistake independently. The parsimonious hypothesis is shared design lineage, meaning a common skills spec, a common reference implementation, or convergent patterns from the same code-generation models. Either way the conclusion inverts a standard procurement instinct. These failures are correlated, not independent, so running two agent vendors buys no more safety than running one. GitHub's stated answer, blocking same-name reuploads, is a registry-side control that only covers skills pulled from GitHub, which leaves anything vendored elsewhere untouched.
The surface is widening while patch status is still open
MCP now standardizes discovery and lazy loading of Agent Skills directly from MCP servers, implemented on the existing Resources primitive: connect, discover, inspect metadata, load only the needed SKILL.md. The token saving is real, since workflow playbooks stop shipping inside every system prompt. The cost is that the agent pulls third-party instructions and scripts at runtime, and the extension is repo-stage with no published client support matrix. In the same window, Grok Build shipped cross-session memory as markdown files written by a background process and auto-applied before related code changes, with no versioning, schema or validation. And SANS flagged CVE-2026-82533 in the DeepSeek Harness (before 0.1.2-alpha.1, CVSS 9.6): unauthenticated access to a local HTTP agent-control API, on hosts that hold training and serving credentials.
Digest pinning kills this entire bug class regardless of how complete any single vendor's patch actually turns out to be.
For agents running against repos that hold feature code, eval sets or dataset paths, the workable policy is to treat skills, instruction files and MCP manifests the way model artifacts are treated: enumerated, hashed, vendored, promoted by a human. That is days of work, and it does not depend on Microsoft's disclosure timeline.
What to do
Inventory every installed agent skill, instruction file and MCP manifest across dev machines and CI images with SHA-256 digests by end of week, then turn auto-update off.
Vendor approved skills into an internal registry with digest pinning and a human-reviewed promotion step this sprint, mirroring your existing PyPI mirror policy.
Plant canary tokens — decoy warehouse URIs and fake keys — in every repo your agents touch and baseline per-process outbound egress this sprint.