Your RSA-2048 keys break in 2030. Find every one of them before attackers do.
Malicious package

solidity-deploy-guardnpm

Malicious code in solidity-deploy-guard (npm) Remove it immediately and rotate any exposed credentials.

MAL-2026-4218
Immediate action
Remove the package, then rotate any secrets the build/runtime could reach.
npm uninstall solidity-deploy-guard

What this malware does

A coordinated supply-chain attack comprising 10 npm packages published by maintainer ddjidd5640 ([email protected]) within a 48-hour window (2026-05-19T03:55Z – 2026-05-21T04:31Z). All packages masquerade as legitimate Web3/DeFi developer security tools (MCP servers) while silently exfiltrating credentials, wallet keys, shell history, SSH keys, and environment variables on install and on every MCP tool invocation. The postinstall hook fetches a dynamic C2 webhook URL from https://ddjidd564.github.io/defi-security-best-practices/config.json (hardcoded fallback: https://webhook.site/8d334534-1c63-4f4f-a0d7-95c446c8b233). At runtime, scanner.js performs a recursive credential sweep on every MCP tool call targeting cryptocurrency wallets (~/.ethereum, ~/.bitcoin, ~/.solana), SSH keys, dotfiles, and environment variables. MCP tool handlers in index.js are named to solicit private key material directly from the user or AI agent (e.g., verify_key_format: “Private key or key material to validate”).

solidity-deploy-guard presents itself as a Solidity deployment security MCP server. No clean prior version is known; version 0.4.4 carries the malicious postinstall hook and scanner.js payload from first publication.

Package advertises itself as a pre-deployment Solidity security checker but is a credential stealer. On npm install, the postinstall hook in package.json reads classic installer-secret paths (~/.ssh, ~/.ethereum, ~/.bitcoin, ~/.env, ~/.bash_history, ~/.zsh_history, /.git-credentials), gathers hostname/user/home/cwd, resolves a destination webhook from https://ddjidd564.github.io/defi-security-best-practices/config.json, and POSTs the harvested data to it. The shipped scanner.js recursively walks home directories and platform-specific app-data paths (/.ethereum, ~/.bitcoin, ~/.solana, ~/.ssh, ~/.config, AppData, Library/Application Support), regex-matches private keys and BIP-39 mnemonics, reads ~/.npmrc, ~/.gitconfig, ~/.git-credentials, and dumps environment variables whose names contain key/secret/token/password/mnemonic/wallet/seed, sending everything to the same remote webhook. The MCP tool handler in index.js additionally runs git config --get remote.origin.url and POSTs the user's repo identity, USER, cwd, and caller-supplied tool arguments to the same endpoint on every invocation, while the tools themselves return canned validation: 'passed' JSON regardless of input. The webhook destination is resolved at runtime from a GitHub Pages config, allowing the operator to rotate the exfil URL without republishing the package, with a hardcoded webhook.site fallback. A bundled wallet.json containing a Hardhat-default mnemonic reinforces the cover story.

Any computer that has this package installed or running should be considered fully compromised. All secrets and keys stored on that computer should be rotated immediately from a different computer. The package should be removed, but as full control of the computer may have been given to an outside entity, there is no guarantee that removing the package will remove all malicious software resulting from installing it.

Malicious versions

13 flagged
0.4.20.4.30.4.40.4.51.4.01.4.11.4.21.4.31.5.01.5.11.5.61.5.71.5.8

Indicators of compromise (SHA-256)

4dd0cb11fbfee641a3e5a847287af9302f8010397f8a9abca6d611695da66d3e
507228e9462c87d19c1211c8ed3a1b66ef8d585c70740d0f60ab0f881134cf5c
50f27a9169e3d1f7a66b15b8ab3f2cc5b56f1cbee434140dea96e0659e4ce945
638ac4fe93d43a79b263965322cd7cb75719ed8ebbeb929d4a5364d6692082e2
c68351149929ba9ec9cff26cb05a38d1860af7c9feaeb3a652d60a900a6006eb
eca2a114a144fe5748c266f587c3a3e4d599f6f6ee63fee9e299fb85387a084c
0b935d671112cd1258b426989a0b86f108220a4742d040d8cca0263e3efccc63
32d4f9d2ee749da75eab779e1a9cd3b31c9f766aad6abda072bd791b15c7683e
56e13da7879d113a596a79780e4213e3321857e2f5bb2ee59c381fa8927d25b5
7ca9a3cfd4d626d28ac594f16f0e80c292310b2a7e269fa1db3946a116aa132b
a86825e3db87cd9962575cf921c4be568d98bcb132ecba361bfb35052833ea81
b38dec504ebc7adbcc144c43d2e6fa3c8322cdc7c7e88a2d62325a2480a0db22
769a852cb8bdfc1337b411a99e1a20b7047bc692f7fe76f22de8e0d446e4f4bb
df85ba68630f06a40e9fded1d4fa1512b79d59bed275ffb42f87e92cc0760988
0cf38e935e0ba04c3d653e8cdd81092efbc20de9262489e1c598be2ea0f7a0c2
2ab2b9089ffdfe15002e7c82eb489e68ba398137b91f8e828e0b086dfb7318b1
7f6bdca79797c0d2383dae09350c449d0126c96505bcd453407b808a89fd7d77
bc9fc45acb512317a4374baffb24a17f357c7d6ec02f74b8589119e019f8afbf
d94fd23a989112d5c210502f0d8aa14276f034ee3856406770c1e5c7d055ba88
db448271cf42985a0ca842aa3374556eac94e7139412f2d63d4ce3a6de766c15
053d363062d77aec9ab73960bdb404515c18ac82848bca63449d899dd47ce4a2
19ee74fda41b7eaa55d5da6af3f1e9bcef278448c8eccbddff5badd58697125a

Detection & response playbook

Credential / info stealer
  1. Find it

    Scan your lockfiles (package-lock.json, pnpm-lock.yaml, yarn.lock, requirements.txt, poetry.lock, etc.) and build artifacts for solidity-deploy-guard (13 malicious versions). O3 Security's supply-chain scanner checks every dependency against known-malicious package intelligence at install time and in CI, flagging solidity-deploy-guard across your stack and pipelines.

  2. If you installed it — respond

    solidity-deploy-guard is built to steal secrets, so assume every credential the build or runtime could read is compromised. Remove it from your project and lockfile, then rotate ALL exposed secrets — npm/registry tokens, cloud keys, CI/CD secrets, SSH keys, and any .env values — from a known-clean machine. Audit logs for unauthorized use of those credentials.

  3. Did it already run?

    If solidity-deploy-guard was ever installed, its post-install/runtime payload may have already executed. O3's L7 egress monitoring and runtime eBPF sensors detect the credential exfiltration or command-and-control callback after install and block the malicious outbound channel, so you catch and contain the actual compromise — not just the presence of the package.

  4. How O3 protects you

    O3 blocks solidity-deploy-guard before install through its supply-chain scanner, and if it has already run, detects and severs the exfiltration or C2 callback at runtime through L7 egress monitoring and eBPF.

Frequently asked questions

No. solidity-deploy-guard on npm has been identified as a malicious package (versions 0.4.2, 0.4.3, 0.4.4, 0.4.5, 1.4.0, 1.4.1, 1.4.2, 1.4.3, and 5 more flagged). It should be removed immediately — do not install or keep it in your dependency tree.

Campaign

GHSA-3r5j-pgc5-q23xIN-MAL-2026-003919IN-MAL-2026-004075IN-MAL-2026-003858IN-MAL-2026-003928IN-MAL-2026-003857IN-MAL-2026-003900IN-MAL-2026-003901IN-MAL-2026-003729IN-MAL-2026-003709IN-MAL-2026-003832IN-MAL-2026-003972IN-MAL-2026-004081IN-MAL-2026-003929IN-MAL-2026-003833IN-MAL-2026-003954IN-MAL-2026-003973IN-MAL-2026-003639IN-MAL-2026-003962IN-MAL-2026-003925IN-MAL-2026-003730IN-MAL-2026-004069

References

Credits

  • Amazon Inspector · finder
  • SafeDep · finder

Detect & block this

O3 blocks solidity-deploy-guard-class packages before install and in CI — and if it already ran, its runtime egress monitoring catches the credential exfiltration and severs the channel.

solidity-deploy-guard (npm) malicious package — MAL-2026-4218 | O3 Security