Open Source ·

Jscrambler npm releases dropped a Rust infostealer

An attacker with a stolen npm publishing credential shipped five malicious jscrambler releases and poisoned its webpack, gulp, grunt, and metro plugins on 2026-07-11. Later versions moved the dropper out of the install hook and into dist/index.js.

Attackers used a stolen npm publishing credential on July 11, 2026 to release five malicious versions of jscrambler, the client-side code protection tool, along with poisoned releases of its webpack, gulp, grunt, and Metro plugins. The first bad version went out at 16:12:40 BST and security vendors flagged it within minutes.

Jscrambler sells JavaScript obfuscation and integrity protection, and its npm package is wired into build pipelines, which is precisely where the payload wanted to be. The malicious releases were jscrambler 8.14.0, 8.16.0, 8.17.0, 8.18.0, and 8.20.0, plus jscrambler-webpack-plugin@8.6.2, gulp-jscrambler@8.6.2, grunt-jscrambler@8.5.2, and jscrambler-metro-plugin@9.0.2. Each dropped and executed a Rust infostealer on Windows, macOS, and Linux.

The interesting part is what changed mid-incident. The first releases used a preinstall hook, the ordinary approach. From 8.18.0 onward the attacker dropped the install hook entirely and moved the dropper into a self-executing function inside dist/index.js and the CLI binary. That defeats scanners that only inspect lifecycle scripts, and it renders npm install --ignore-scripts useless as a mitigation, since the code runs when the tool is used rather than when it is installed.

The collection profile reflected 2026 developer machines: cloud credentials, CI tokens, browser sessions, cryptocurrency wallets, Bitwarden vaults, and the configuration files of AI coding assistants including Claude Desktop and Cursor. The malicious releases were downloaded 1,479 times before Jscrambler deprecated them and published clean builds as 8.22.0, 8.6.3, 8.6.3, 8.5.3, and 9.0.3. In its own advisory the company described the incident as an unauthorized publication of a malicious npm package affecting CI.

Notes

  • From version 8.18.0 the attacker abandoned the preinstall hook and injected the dropper as a self-executing function inside dist/index.js and the CLI binary. This defeats install-script scanners and is not mitigated by npm install --ignore-scripts.
  • The first malicious version was published 2026-07-11 at 16:12:40 BST, which the npm registry records as 15:12:40Z. The malicious releases were downloaded 1,479 times in total before deprecation, against roughly 15,800 weekly downloads for the main package.
  • The npm registry records a seventh release the same afternoon, jscrambler 8.15.0 at 17:07:14Z, sitting between two versions reported as malicious. No published source lists 8.15.0 as affected, so it is not recorded as a malicious version here. Treat its status as unresolved rather than clean.
  • The payload targets cloud credentials, CI tokens, browser sessions, cryptocurrency wallets, Bitwarden vaults, and configuration files for AI coding tools including Claude Desktop and Cursor.

Appendix · Affected releases

jscrambler npm fixed 8.22.0
8.14.0 sha256 21581758…72a8fa0e download unavailable
8.16.0 sha256 ad22b5aa…4557198c download unavailable
8.17.0 sha256 77a5cb5e…bd901137 download unavailable
8.18.0 sha256 23510688…28cb2792 download unavailable
8.20.0 sha256 254f7d6d…28b9fe02 download unavailable
  • OSSF MAL-2026-10187 maps these checksums to the complete jscrambler-8.16.0.tgz npm archive.
  • Software Heritage's npm loader maps the subsequent SHA-1/SHA-256 pairs to complete original npm archives for versions 8.14.0, 8.17.0, 8.18.0, and 8.20.0, in that order.
8.6.2 sha256 5d808cde…0a22f4c8 download unavailable
  • Software Heritage's npm loader maps these checksums and the 8,772-byte length to the original jscrambler-webpack-plugin-8.6.2.tgz artifact.
gulp-jscrambler npm fixed 8.6.3
8.6.2 sha256 4d76fb9e…2ddec6d2 download unavailable
  • OSSF MAL-2026-10673 maps these checksums to the complete gulp-jscrambler-8.6.2.tgz npm archive.
grunt-jscrambler npm fixed 8.5.3
8.5.2 sha256 2f36ca3d…cc5d4931 download unavailable
  • Software Heritage's npm loader maps these checksums and the 3,698-byte length to the original grunt-jscrambler-8.5.2.tgz artifact.
9.0.2 sha256 f71c5af1…e316d54a download unavailable
  • OSSF MAL-2026-10674 maps these checksums to the complete jscrambler-metro-plugin-9.0.2.tgz npm archive.

Indicators

  • filedist/index.js

References

  1. Unauthorized Publication of a Malicious npm Package Affecting CI - Jscramblerjscrambler.com
  2. Compromised jscrambler 8.14.0 npm Release Drops Rust Infostealer During Install - The Hacker Newsthehackernews.com
  3. Jscrambler npm Breach Exposes Developers to Malware - BankInfoSecuritybankinfosecurity.com
  4. Hackers Compromised jscrambler With 15,800+ Weekly Downloads to Attack Developers - Cyber Security Newscybersecuritynews.com
  5. OSSF malicious-packages databasegithub.com
  6. Software Heritage original-artifact metadata for grunt-jscrambler 8.5.2archive.softwareheritage.org
  7. Software Heritage original-artifact metadata for jscrambler 8.14.0archive.softwareheritage.org
  8. Software Heritage original-artifact metadata for jscrambler 8.17.0archive.softwareheritage.org
  9. Software Heritage original-artifact metadata for jscrambler 8.18.0archive.softwareheritage.org
  10. Software Heritage original-artifact metadata for jscrambler 8.20.0archive.softwareheritage.org
  11. Software Heritage original-artifact metadata for jscrambler-webpack-plugin 8.6.2archive.softwareheritage.org
  12. Software Heritage original checksum document for grunt-jscrambler 8.5.2archive.softwareheritage.org
  13. Software Heritage original checksum document for jscrambler 8.14.0archive.softwareheritage.org
  14. Software Heritage original checksum document for jscrambler 8.17.0archive.softwareheritage.org
  15. Software Heritage original checksum document for jscrambler 8.18.0archive.softwareheritage.org
  16. Software Heritage original checksum document for jscrambler 8.20.0archive.softwareheritage.org
  17. Software Heritage original checksum document for jscrambler-webpack-plugin 8.6.2archive.softwareheritage.org

Source record: oss/attacks/jscrambler/meta.yaml