{"schema_version":"1.9.2","id":"MAL-2026-18372","published":"2026-10-28T09:59:37Z","modified":"2026-10-29T14:30:31.403221002Z","summary":"Malicious code in @zmtcdn/components (npm)","details":"@zmtcdn/components@9999.0.0 is a dependency-confusion package with an empty `index.js` and a description of \"Security research PoC\". Its postinstall script runs `node postinstall.js` on npm install, which POSTs the hostname, username, platform, working directory and the names of all environment variables to `https://webhook.site/f52af355-4783-4acb-9de1-5e44b5963025`. It was published by the npm account kill_shs, which also published @zmtcdn/ui with the same script.\n\n---\n_-= Per source details. Do not edit below this line.=-_\n\n## Source: amazon-inspector (4941e85e4ee958b955e6eea78ee49fa9fada8bea694bf63927c8ccaf892ecfe2)\nThe package name suggests a scoped @zmtcdn component library but the version 9999.0.0 is a dependency-confusion-shaped pin. On npm install, postinstall.js runs automatically and collects os.hostname(), os.platform(), os.userInfo().username, process.cwd(), the full list of process.env key names via Object.keys(process.env), and a timestamp, then POSTs the JSON payload via https.request to the hardcoded anonymous collector https://webhook.site/f52af355-4783-4acb-9de1-5e44b5963025. Enumerating environment variable names leaks the identity of CI/secret variables present on the installer host (e.g., AWS_*, NPM_TOKEN, GITHUB_TOKEN), which is reconnaissance against the installer and typically precedes a follow-on credential-theft stage. The destination is a third-party request-logging service, not infrastructure of the apparent @zmtcdn scope.\n","affected":[{"package":{"name":"@zmtcdn/components","ecosystem":"npm","purl":"pkg:npm/%40zmtcdn/components"},"versions":["9999.0.0"],"database_specific":{"cwes":[{"cweId":"CWE-506","description":"The product contains code that appears to be malicious in nature.","name":"Embedded Malicious Code"},{"cweId":"CWE-506","description":"The product contains code that appears to be malicious in nature.","name":"Embedded Malicious Code"}],"indicators":{"evidence_files":[{"path":"postinstall.js","sha256":"fe334f5ef07787eb80c479592ce2834c0644731f14d74422b6a8ee68d94f1bf0","tlsh":"63f0ddf162b0e6b46fbad1c4d085e8068363e014f70778a4f9d445e83bc6abd55b1ee8"}],"package_integrity":[{"filename":"components-9999.0.0.tgz","hashes":{"sha1":"bc470e56cb0bd3776fabcf2842e150553555a617","sha512_sri":"sha512-0CX0hikVij3MzVuK0WrTsYqJsDmzzI3Mlq0PEXzSeih9zuByujhv871WwU+Wi6AWv4aLKKF2ABx+JoZ5cqn21Q=="}}]},"source":"https://github.com/ossf/malicious-packages/blob/main/osv/malicious/npm/@zmtcdn/components/MAL-2026-18372.json"}}],"references":[{"type":"PACKAGE","url":"https://www.npmjs.com/package/@zmtcdn/components"},{"type":"PACKAGE","url":"https://www.npmjs.com/package/@zmtcdn/components/v/9999.0.0"}],"database_specific":{"iocs":{"files":[{"digests":{"sha256":"83ecde574a04b04277a0db8cc868bab08f2222f20183de92a6242433340c08ea"},"note":"postinstall runs `node postinstall.js`, which POSTs host details to a collector (@zmtcdn/components@9999.0.0).","paths":["package.json"],"source":"PACKAGE_ARCHIVE"},{"digests":{"sha256":"fe334f5ef07787eb80c479592ce2834c0644731f14d74422b6a8ee68d94f1bf0"},"note":"Executed by the postinstall script of @zmtcdn/components@9999.0.0.","paths":["postinstall.js"],"source":"PACKAGE_ARCHIVE"}],"urls":["https://webhook.site/f52af355-4783-4acb-9de1-5e44b5963025"]},"malicious-packages-origins":[{"id":"IN-MAL-2026-022020","import_time":"2026-10-29T14:14:18.14134229Z","modified_time":"2026-10-29T13:38:25Z","sha256":"4941e85e4ee958b955e6eea78ee49fa9fada8bea694bf63927c8ccaf892ecfe2","source":"amazon-inspector","versions":["9999.0.0"]}]},"credits":[{"name":"Amazon Inspector","contact":["inspector-research@amazon.com"],"type":"FINDER"},{"name":"InvisiRisk, Inc.","contact":["https://www.invisirisk.com","mailto:research@invisirisk.com"],"type":"FINDER"}]}