Malicious code in @httttt/mcp-demo (npm)
The npm package @httttt/mcp-demo contains malicious code that automatically downloads and executes a binary artifact from a Huawei cloud server whenever the module is imported or the CLI is invoked. The package also exposes an exec_command tool that allows arbitrary shell command execution from connected MCP clients.
- Disclosed
- Last updated
- Blast radius
- Any user or system that imports or invokes the @httttt/mcp-demo CLI or module
- Ecosystems
- Attack vectors
- Affected entities
- @httttt/mcp-demo
The @httttt/mcp-demo npm package was found to contain malicious code in its main/bin entry point. Upon import or CLI invocation, the package executes a top-level await execAsync(...) that downloads a file named javaagent from https://ys-obs-cc9d.obs.cn-north-1.myhuaweicloud.com/javaagent, makes it executable, and runs it immediately.\n\nThe download occurs with no version pinning and no hash verification, meaning the attacker can modify the payload at any time. The destination domain is not a documented publisher domain for an MCP demo package, and the artifact name (javaagent) does not match the stated purpose of the package.\n\nAdditionally, the MCP server registers an exec_command tool that passes arbitrary caller-supplied strings directly to execAsync, providing a shell-execution surface to any connected MCP client without validation or sandboxing.\n\nThe malicious behavior was identified by the OpenSSF malicious-packages project and reported via Amazon Inspector.
Indicators of compromise
- Packages
- @httttt/mcp-demo
- Domains
- ys-obs-cc9d.obs.cn-north-1.myhuaweicloud.com
Remediation
- Immediately uninstall @httttt/mcp-demo from all systems
- Audit systems that imported or ran this package for signs of compromise or unauthorized activity
- Review network logs for connections to ys-obs-cc9d.obs.cn-north-1.myhuaweicloud.com
- Check for unexpected processes or binaries named 'javaagent' or similar artifacts
- Do not use or trust any version of @httttt/mcp-demo; the package should be considered fully compromised
- Use npm audit or similar tools to identify any transitive dependencies on this package
Sources
- GitHub Advisory GHSA-gxrv-g7xx-29x2 · GitHub Advisory Database
Cite this entry
"Malicious code in @httttt/mcp-demo (npm)." supplychainattack.org, Supply Chain Attack Incident Catalog. Disclosed August 20, 2026; last updated August 20, 2026. https://supplychainattack.org/incident/malicious-code-in-httttt-mcp-demo-npm-1qc5a7
Suggest a correction
Found an error or have a newer source? Corrections to factual errors take priority over new entries.
Related incidents
- resolvedcritical
Malicious code in rust-testing-utils (npm)
The npm package rust-testing-utils contained malicious code that impersonates the pino logger and executes remotely-fetched code with arbitrary privileges. The package spawns a child process that decodes a hardcoded URL, fetches attacker-controlled content, and executes it via Function constructor with full module-loading capability.
npmCompromised packageMalicious commit - containedcritical
Malicious code in stillm4ddpocs-demo-sprocket (npm)
The npm package stillm4ddpocs-demo-sprocket version 999.9.12 contains malicious code that exfiltrates system and project metadata via multiple channels (HTTPS, HTTP, and DNS) to a hardcoded callback host. The package uses a high version number to exploit dependency-confusion attacks against organizations with internal packages of the same name.
npmCompromised packageDependency confusion - containedcritical
Malicious code in @syncraft-labs/react (npm)
The npm package @syncraft-labs/react contained obfuscated malicious code in its ESM distribution that implements the EtherHiding pattern, fetching and executing arbitrary code from an Ethereum smart contract via RPC endpoints. The tampering occurred post-build in the dist/index.js artifact.
npmCompromised package - containedcritical
Malware in hydration-dim-kit
Malware was discovered in the npm package hydration-dim-kit. Any computer with this package installed or running should be considered fully compromised. All secrets and keys must be rotated immediately from a different computer.
npmCompromised package