Malicious code in easydsbots (npm)
The npm package easydsbots contained malicious code that executed a root-level postinstall hook during installation, deploying an obfuscated daemon dropper designed to persist on the host system via systemd.
- Disclosed
- Last updated
- Blast radius
- Any developer or system that installed the malicious easydsbots package via npm
- Ecosystems
- Attack vectors
- Affected entities
- easydsbotsnpm package containing malicious postinstall hook
The npm package easydsbots was found to contain malicious code designed to compromise systems at install time. The package.json declared a postinstall script that executed sudo node install.js with root privileges, bypassing normal user-level installation constraints.\n\nThe install.js and index.js files were heavily obfuscated using obfuscator.io techniques including string array rotation, hex-encoded property lookups, and control-flow flattening to conceal the payload's true behavior. The package declared dependencies on js-virtualizer and node-linux, the latter being a library that registers systemd unit files or /etc/init.d scripts for daemon persistence.\n\nThe code checked for the INVOCATION_ID environment variable—set only when a process is launched by systemd—suggesting conditional behavior based on execution context. The combination of root-level lifecycle hooks, obfuscated payload, systemd-aware branching, and daemon-installer dependencies indicates this was a root-persistent daemon dropper executed at install time on the installer's host.\n\nThe incident was identified and credited to the OpenSSF's malicious-packages repository (MAL-2026-14265).
Indicators of compromise
- Packages
- easydsbots
Remediation
- Immediately uninstall the easydsbots package from all systems where it was installed
- Audit systems for unauthorized systemd units or /etc/init.d scripts that may have been registered during installation
- Review process logs and systemd journal for suspicious daemon activity during and after the installation window
- Regenerate any credentials or secrets that may have been exposed to the compromised process
- Update npm to the latest version and run `npm audit` to identify other potentially compromised dependencies
- Consider full system audit and potential reimaging of affected systems given the root-level compromise vector
Sources
- GitHub Advisory GHSA-pjq2-p3m7-p87h · GitHub Advisory Database
Cite this entry
"Malicious code in easydsbots (npm)." supplychainattack.org, Supply Chain Attack Incident Catalog. Disclosed August 19, 2026; last updated August 19, 2026. https://supplychainattack.org/incident/malicious-code-in-easydsbots-npm-5k7xe6
Suggest a correction
Found an error or have a newer source? Corrections to factual errors take priority over new entries.
Related incidents
- containedcritical
Malicious code in 3-buildsight-web (npm)
The npm package 3-buildsight-web contains malicious code that fetches and executes arbitrary JavaScript from a remote Bitbucket URL on module load, granting full page privileges to an unverified third party.
npmCompromised package - resolvedcritical
Malicious code in @usaa-grp-personal-profile/personal-profile-common (npm)
Malicious package @usaa-grp-personal-profile/personal-profile-common version 999.0.0 published to public npm as a dependency-confusion attack targeting an organization's internal registry. The package contains preinstall and postinstall hooks that exfiltrate hostname, username, and working directory to an attacker-controlled OAST endpoint on every install.
npmDependency confusionCompromised package - resolvedcritical
Malicious code in create-coin (npm)
create-coin@20.1.1 on npm contained malicious postinstall code that collected sensitive environment variables, credentials, and host reconnaissance data. The package impersonated an esbuild platform build and exfiltrated data to a hardcoded endpoint.
npmCompromised packageTyposquatting - resolvedcritical
Malicious code in @syncraft-labs/vue (npm)
The npm package @syncraft-labs/vue version 0.4.1 contained malicious obfuscated code in its ESM build that implements a blockchain-hosted C2 dropper (EtherHiding pattern), enabling remote code execution on any consumer importing the package.
npmCompromised package