Deadbugz: GitHub PRs Delivered a Delayed, Shape-Shifting Malicious MCP Server
Pillar Security documented Deadbugz, an active campaign that opened 23 GitHub pull requests in about 74 minutes to place a malicious MCP server in popular repositories and MCP directories. The server behaved normally at first, then changed later tool descriptions and prompt content into instructions for credential discovery, covert file access, command execution, and exfiltration. None of the reviewed pull requests was merged, and the public evidence does not show victim execution or confirmed data theft.
Threat Analysis
- The campaign used real pull requests for delivery. The actor submitted remote and local MCP configurations, plus directory listings, to established projects. This made repository review the supply-chain boundary the actor was trying to cross.
- The server delayed its malicious behavior. It tracked calls by client IP and kept two tools benign. After three tool calls, a later
tools/listorprompts/getresponse returned poisoned content. No change notification was sent, so the client still had to refresh the list or request the prompt. - The payload relied on client authority. It asked the agent to find credential files, conceal access, modify files, run commands, and exfiltrate results. The server could not read victim files directly; success required a client to ingest the changed content and an agent with sufficient tools, permissions, and compliance.
- No victim compromise is confirmed. Pillar found no merged pull request in the reviewed set, and the public record does not prove installation, execution, credential access, or exfiltration.
Applicable AIDEFEND Defenses (9)
tools/list response with that manifest before exposing it to the agent. Deadbugz changed descriptor text after benign calls, so a mismatch can fail closed before the injected instructions reach the privileged model. This control applies to tool descriptors, not to prompts/get content.What Defenders Should Do Now
- Validate MCP configurations before commit or build acceptance. Disable unreviewed Deadbugz submissions, remove confirmed malicious configuration or code from every source and runtime, and preserve the relevant pull request, configuration, and execution evidence.
- Pin canonical hashes for
tools/listdescriptors and separately pin approvedprompts/getcontent. Reject any unapproved drift before model ingestion, and require a new security review for semantic changes. - Replace generic shell, broad filesystem, arbitrary HTTP, and unrestricted email or repository tools with narrow single-purpose capabilities. Grant only the tools and action budget required for the authenticated task.
- Enforce exact-action validation at the executor for credential access, command execution, outbound email, and repository changes. Track the provenance of sensitive values and block transfers to unapproved network, email, command, and repository destinations.
- Search endpoint, process, file-access, email, network, and repository telemetry for submitted server paths, later tool-list refreshes, credential-file reads, and read-then-send sequences. Rotate or disable only confirmed exposed long-lived credentials; separately revoke affected issued access tokens or sessions when evidence identifies them.
1 additional consideration
Consumer-side prompt-content integrity
prompts/get. Tool-descriptor hashing and tool-contract admission directly protect tools/list, but prompt content needs its own consumer-side canonicalization and change-review boundary.prompts/get drift before model ingestion, and require a fresh security review for every prompt-semantic change.Conclusion
Deadbugz did not need an MCP protocol exploit. It attempted to turn a repository integration request and mutable MCP content into a delayed instruction channel. AIDEFEND maps the strongest defenses to the boundaries the campaign depends on: reject unsafe configuration before repository acceptance, pin and reapprove exact tool contracts, remove unnecessary tool authority, independently validate high-impact actions, and block sensitive values at dispatch. If installation or credential exposure is confirmed, remove the exact malicious artifacts and evict only the affected credentials. Endpoint identity or version pinning alone is insufficient when the same server can preserve its identity while changing what it tells an agent to do.