Malicious code in message-compiler (npm)
The npm package message-compiler is a typosquat of @intlify/message-compiler containing malicious code that exfiltrates installer environment variables, public IP, and hostname via preinstall script execution.
- Disclosed
- Last updated
- Blast radius
- Any developer or CI/CD system that installed the malicious message-compiler package
- Ecosystems
- Attack vectors
- Affected entities
- message-compilerTyposquats @intlify/message-compiler; contains malicious preinstall script
The npm package message-compiler is a typosquat targeting the legitimate @intlify/message-compiler package. The malicious package contains a preinstall script (scripts.preinstall = 'node vishu.js') that executes automatically during npm install.
The vishu.js script performs reconnaissance on the installer's environment: it resolves the public IP via api.ipify.org, extracts CI-related environment variables (CI, GITHUB_ACTIONS, GITHUB_WORKFLOW, GITHUB_RUN_ID and related fields), and exfiltrates this data via HTTPS GET request to a hardcoded webhook.site collector URL. Additionally, it performs DNS lookups of subdomains constructed from os.hostname() under oastify.com (a Burp Collaborator domain), exfiltrating the installer's hostname via DNS.
The package contains no legitimate functionality beyond this reconnaissance beacon. This attack is particularly dangerous in CI/CD environments where automated builds may install dependencies without human review.
The incident was identified and credited to the OpenSSF malicious-packages project.
Indicators of compromise
- Packages
- message-compiler
- Domains
- webhook.site
- oastify.com
- api.ipify.org
Remediation
- Immediately uninstall message-compiler from all systems and CI/CD pipelines
- Audit npm install logs to identify which systems or CI runs installed the malicious package
- Rotate any secrets or credentials that may have been exposed in CI environment variables
- Review CI/CD logs for suspicious outbound connections to webhook.site or oastify.com domains
- Implement npm package name verification and typosquat detection in dependency management workflows
- Use npm audit and supply chain security tools to detect similar typosquats
- Consider using package lock files and vendoring to prevent accidental installation of malicious packages
Sources
- GitHub Advisory GHSA-pw4h-7785-7vpj · GitHub Advisory Database
Cite this entry
"Malicious code in message-compiler (npm)." supplychainattack.org, Supply Chain Attack Incident Catalog. Disclosed August 24, 2026; last updated August 24, 2026. https://supplychainattack.org/incident/malicious-code-in-message-compiler-npm-t1yz5q
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 chai-as-testkit (npm)
The npm package chai-as-testkit is a typosquat/impersonation attack delivering obfuscated malicious code that executes on import. The package falsely claims to be a vulnerability management tool but ships pino library files under a different author, with a synthetic stub that loads a 4MB+ obfuscated bundle containing attacker-controlled code.
npmTyposquattingCompromised 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 chai-as-soul (npm)
chai-as-soul@2.3.5 is a typosquat of the pino logging library containing malicious code that exfiltrates environment variables (including AWS/GCP/CI tokens) and executes arbitrary remote code on installation.
npmTyposquattingCompromised package - resolvedcritical
Malicious code in @next-fonts/font (npm)
@next-fonts/font is a typosquat package on npm that executes arbitrary attacker-controlled code via a blockchain-mediated C2 channel when its Inter() function is called. The malicious payload is base64-encoded and executed through Node.js spawn or eval, with no legitimate font functionality.
npmTyposquattingCompromised package