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

cursed-modulesnpm

cursed-modules is a confirmed malicious npm package (MAL-2026-6698) that steals credentials and exfiltrates sensitive data (malicious versions 1.0.1, 1.0.4, 1.0.5…). Do not install it — remove it immediately and rotate any exposed credentials.

Malicious code in cursed-modules (npm)

MAL-2026-6698
Immediate action
Remove the package, then rotate any secrets the build/runtime could reach.
npm uninstall cursed-modules

What this malware does

[email protected] executes attacker-controlled code on three separate triggers and operates a bidirectional command channel against a hardcoded bare-IP C2 at 154.57.164.70.

  1. Install-time exfiltration: package.json wires preinstall, install, and postinstall all to node install.js. install.js reads /flag, /flag.txt, /app/flag.txt, /root/flag.txt, environment variables (including FLAG/HTB_FLAG), runs id and hostname, greps the filesystem for CTF flag patterns, serializes process.env, base64-encodes the payload wrapped in a fake ecto_module YAML manifest, and HTTP PUTs it to 154.57.164.70:31682/api/modules/ECT-987654.

  2. Require-time AWS credential theft: index.js (the declared main) runs an IIFE on require that, when the hostname matches a Docker container ID pattern, invokes aws sts get-caller-identity, fetches IAM credentials from the IMDS endpoint http://169.254.169.254/latest/meta-data/iam/security-credentials/, lists Secrets Manager secrets, reads /home/node sources and flag files, dumps process.env, and PUTs the base64-encoded result to 154.57.164.70:32447/api/modules/ECT-654321.

  3. Broader recon: recon.js reads /root/.npmrc, /home/user/.npmrc, project package.json/lock files, verdaccio configs, htpasswd files, cron jobs, and supervisord configs, then PUTs the data (with a curl fallback) to 154.57.164.70:30728/api/modules/ECT-654321 — directly harvesting npm registry tokens and private-registry credentials.

  4. Backdoor: rce.sh PUTs an arbitrary shell command to 154.57.164.70:32447 under module slot ECT-654321 and GETs the base64 command output from slot ECT-987654, completing a request/response command relay over the same C2.

The package self-identifies (publish-and-arm.sh, install.js manifest) as a deliberate dependency-confusion attack against verdaccio proxies; the 999.0.9 version is consistent with that pattern. Three independent lifecycle hooks plus a require-time IIFE guarantee the payload fires on default npm install and on any consumption of the module.

The OpenSSF Package Analysis project identified 'cursed-modules' @ 999.0.0 (npm) as malicious.

It is considered malicious because:

  • The package executes one or more commands associated with malicious behavior.

Malicious versions

19 flagged
1.0.11.0.41.0.51.0.61.0.72.0.0999.0.0999.0.1999.0.2999.0.3999.0.4999.0.5999.0.6999.0.7999.0.8999.0.9999.1.0999.1.1999.1.2

Indicators of compromise (SHA-256)

062c76f1699d4a5ac34e6ced908e6381201c55fc5e4bfc4950de6a5018ce2641
0a7db807a976b54ad8fe1246159e9ac2e5830671792d2ae8e388bf30435d36c3
3beee7aac731e010a82ced66e52d60705e5e41ff234f738fc2aaa9a7dc3f3835
4617c39128e530a8ef5de0335557b42968b70f1115bf5c0b37a13adc6ebdec3e
8acf5f6180c3b640662f33c1bfa7945d7a0cf30c3ae63fb4922a3d3b0bcb5068
0dade1c70e7e7f58c8f791931e5fe7cf7c40b68358173ed097b7dca6a4f4041d
72f452ba1f64f3432ee8468247d3e52dbd832d94f3a82a5581e19278c1aaff34
c336a721f3ab29cf3d3e33e85054fef3e82c5f8ead5a91130096b462deaf8bae
ce6c92d315872ed2c4610d605d2582ef543ff59c013ffc9f465dbc6ec372ee07
f09955b65f5ca23211a6198faaa97f0c62e578a0f6773e8c011b7c80c2f254ea
fb2e0ed6e3ed209fba64221b4aee0372995b5559237fdf94326782252de5b075
1db4eb701d55b50100f0d488ee68cdf854fd1410c91d277a61ad1191182ecfaa
46a3b7f16d5aa4d6a5a9b046dbc57eb4fa51e84b251aaebb755cf4d7b325644f
622455b314ae532d088b8afdd0bc9683d7ecaf53018d111386e85f32b37ca719
7d8a834a5ee808b937faac7aed6d638af545bd38563c4a4a4d91fb2af5311ac6
84fb7a545597f699607c246e73c31cf02a732b1aa409c7cfe6ee779fd2ae9dfc
e81e45bec1d4885659ce957df38b629eed5a10d05ed999680db0b8dd5d720339
ed8bd53bf4d8cf1acf745f2edbe5c7ab25f69475af8f11ef065cd46422d67298
45b6aab954f9b8edbc759c97eabe39d7a070c4dbe852586422761ad0f8c7ad95
5ed9bc4bbbb313b35c1f7b54ca81346d957b7b4dafdf7229aa0a6ec7b2e4c282

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 cursed-modules (19 malicious versions). O3 Security's supply-chain scanner checks every dependency against known-malicious package intelligence at install time and in CI, flagging cursed-modules across your stack and pipelines.

  2. If you installed it — respond

    cursed-modules 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 cursed-modules 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 cursed-modules 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. cursed-modules on npm has been identified as a malicious package (versions 1.0.1, 1.0.4, 1.0.5, 1.0.6, 1.0.7, 2.0.0, 999.0.0, 999.0.1, and 11 more flagged). It should be removed immediately — do not install or keep it in your dependency tree.

Campaign

IN-MAL-2026-007806IN-MAL-2026-007809IN-MAL-2026-007810IN-MAL-2026-007808IN-MAL-2026-007807IN-MAL-2026-007835IN-MAL-2026-007824IN-MAL-2026-007833IN-MAL-2026-007827IN-MAL-2026-007829IN-MAL-2026-007825IN-MAL-2026-007836IN-MAL-2026-007826IN-MAL-2026-007828IN-MAL-2026-007830IN-MAL-2026-007834IN-MAL-2026-007838IN-MAL-2026-007832IN-MAL-2026-007831

References

Credits

  • Amazon Inspector · finder
  • OpenSSF: Package Analysis · finder

Detect & block this

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

Explore

cursed-modules (npm) malicious package — MAL-2026-6698 | O3 Security