Safeguard
Security News

postmark-mcp: The First Confirmed Malicious MCP Server Found in the Wild

A single added line of code in a compromised npm package silently BCC'd every outgoing email to an attacker. Snyk's disclosure marks the first real, deployed malicious MCP server, not a proof of concept.

Safeguard Research Team
6 min read

On September 25, 2025, Snyk researchers disclosed something the Model Context Protocol (MCP) ecosystem had mostly discussed in theoretical terms up to that point: a real, deployed, malicious MCP server, found in production use with more than a thousand downloads already behind it. The package, postmark-mcp, impersonated a legitimate email-service MCP library and, through a single added line of code, quietly copied every outgoing email that passed through it to an attacker-controlled address. It is described in the disclosure as the first confirmed real-world malicious MCP server, distinct from the tool-poisoning proof-of-concept demonstrations that had circulated in security research before it.

What happened

The package in question, named to resemble the legitimate Postmark Labs MCP library, reached version 1.0.16 when a publisher using the handle "phanpak" uploaded a build on September 17, 2025, that added one line of code beyond what a legitimate email-sending MCP server needed. That line silently BCC'd every outgoing email the server processed to an external mailbox, phan@giftshop[.]club. Any application that had installed this MCP server to handle email sending, whether for transactional messages, notifications, or any other outbound mail workflow, was transparently exfiltrating a copy of every message it sent, with no visible change in behavior from the application's own perspective. The package had accumulated 1,643 downloads before it was identified and removed from npm.

Snyk's disclosure eight days later, on September 25, framed this specifically as a milestone: the first documented case of a real malicious MCP server operating in the wild, as opposed to a security researcher's demonstration of what a malicious MCP server could theoretically do.

Why MCP servers are a uniquely high-leverage supply-chain target

The reason this single-line backdoor matters more than its modest download count might suggest comes down to what MCP servers are typically granted access to, and how differently that access tends to be scrutinized compared to a conventional software dependency. A traditional npm or PyPI package earns a certain baseline of scrutiny before teams trust it with sensitive operations: security teams increasingly run dependency scanning, some organizations pin and audit versions of high-privilege libraries, and a package that, say, silently reads your filesystem when it has no obvious reason to would likely draw suspicion during any reasonably careful review.

MCP servers, by contrast, are often installed specifically because they need broad, sensitive access to do their job, and that access is granted with far less friction. An MCP server built to send email plausibly needs to see and send email — that is the entire point of installing it. There's no way to tell, from the outside, whether a given send-email MCP server also happens to be BCC'ing every message elsewhere, because "handle email" is exactly the permission it was installed to have. This is the core problem the postmark-mcp incident illustrates: the same broad permission scope that makes an MCP server useful is what makes a small, easily overlooked backdoor inside it extraordinarily high-leverage, since it doesn't need to escalate privileges or find an unexpected access path. It just needs to quietly misuse the access it was already, legitimately, given.

Compounding this, MCP as an ecosystem is young enough that the tooling and habits security teams have built up for conventional package review, static analysis integration, provenance verification, typosquatting detection, haven't yet been widely adapted to cover MCP servers specifically. A package impersonating a well-known vendor's name, as postmark-mcp did with Postmark Labs, benefits from the same trust-by-association effect that makes typosquatting work in any package ecosystem, but with less existing defensive tooling calibrated to catch it in the MCP context specifically.

What to check this week

  • Inventory every MCP server currently installed across your organization's AI tooling and agent deployments, with particular attention to which ones handle sensitive operations: email, messaging, database access, file storage, or credential handling.
  • Verify the provenance of any MCP server against its claimed vendor before installing or continuing to run it — confirm the publishing account and package name match the vendor's own official documentation and repository, rather than trusting a plausible-sounding package name.
  • Review outbound email and messaging logs for any MCP-mediated workflow for unexpected BCC, forwarding, or copy destinations, since this exact incident's payload would be invisible from the sending application's own logs and only detectable by inspecting where mail actually went.
  • Apply the same install-time scrutiny to MCP servers that you apply to conventional dependencies — version pinning, changelog review before upgrading, and ideally automated scanning, rather than treating an MCP server as a lower-risk category of software simply because it's newer or more narrowly scoped in its stated purpose.
  • Treat any MCP server requesting broad data access (a full mailbox, a full database, unrestricted file access) as warranting the security review that access level deserves, independent of how small or simple the package's advertised functionality is.

Why this incident is a preview, not an outlier

A single added line of code, in a package with barely over a thousand downloads, sending copies of business email to an attacker, is a small-scale incident by the standards of the other supply-chain compromises in this series. What makes it worth taking seriously anyway is what it demonstrates about the MCP ecosystem's current maturity relative to the access it grants: a backdoor this simple, in a package this narrow, produced full mailbox-content exfiltration because the security review applied to it hadn't caught up to the trust being extended. As MCP adoption grows and MCP servers get folded into higher-stakes workflows, agent-to-agent orchestration, financial systems, customer data pipelines, the same gap between granted access and applied scrutiny will make future incidents in this specific category more consequential, not less, unless the ecosystem's review practices catch up first.

How Safeguard helps

MCP server risk is exactly the gap Safeguard's MCP Guardrail work is aimed at: giving security teams visibility into which MCP servers are installed, what permissions and data access each one has been granted, and flagging servers that request broad access disproportionate to their stated function, before that access is misused rather than after. Combined with our SBOM and dependency visibility tooling, this gives teams a way to answer "which of our MCP integrations can read or send our email/data" as a standing inventory question rather than a scramble after a disclosure like this one. Our secrets scanning and malware detection extend the same install-time scrutiny that already applies to npm and pip packages toward this newer, currently less-scrutinized category of software dependency.

Never miss an update

Weekly insights on software supply chain security, delivered to your inbox.

Self-healing security runs on Safeguard.

Your first fix PR is minutes away.

No sales call required, even your agent can complete the purchase over MCP.