{"schema_version":"1.9.2","id":"MAL-2026-18367","published":"2026-10-28T06:56:31Z","modified":"2026-10-29T14:30:40.997539037Z","summary":"Malicious code in identity-two-factor (npm)","details":"identity-two-factor@999.0.0 is a dependency-confusion package aimed at Coinbase (its README and postinstall.js say so, and the beacon path is `cbhq-canary`) with no functional code. Its postinstall script runs `node postinstall.js` on npm install, which writes a marker file to the temp directory and POSTs the hostname, username, working-directory name, CI flag and Node version to `https://webhook.site/e0981a8e-081e-49a0-8b4a-235109e13045/cbhq-canary`. It was published by the npm account hologrammmm0x, which has no other packages.\n\n---\n_-= Per source details. Do not edit below this line.=-_\n\n## Source: amazon-inspector (f9adfaa94d0139573858f537ccd5f8eeb2fd452d18cfac057fd1bc6b38f8773c)\nOn npm install, postinstall.js collects os.hostname(), os.userInfo().username, the current working directory basename, a CI flag, and the Node version, and POSTs them to a hardcoded webhook.site URL (https://webhook.site/e0981a8e-081e-49a0-8b4a-235109e13045/cbhq-canary). The package is published at version 999.0.0 under a name that resembles an internal/private package, consistent with a dependency-confusion exfiltration payload: builds that resolve this public name over an intended private registry will automatically beacon identifying host and user metadata to a third-party collector endpoint. The in-source self-labeling as a 'security research canary' is author-controlled text and is not accompanied by any installer-visible authorization; the behavior itself is unsolicited data exfiltration from any machine that installs the package.\n","affected":[{"package":{"name":"identity-two-factor","ecosystem":"npm","purl":"pkg:npm/identity-two-factor"},"versions":["999.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":"182bd20d54e19e3b3dfc34c7bd0c4c9ed0bfb2845eaa01a6e52258d53ae36462","tlsh":"4931b8d50ee9616410c86bd269e6251e8363c22d368264f0f14c00965f8d7a813772eb"}],"package_integrity":[{"filename":"identity-two-factor-999.0.0.tgz","hashes":{"sha1":"1cc286642e0d121d1f46d871b27a80ac0ed6822e","sha512_sri":"sha512-GSxrM9Eg1j+1nDb3XEdoo4iUHI3znkTBvtXPNBKDpLHISF+gF8HrWTkUI2d1elLL6miD82kPWcZm5y1xtJL8Nw=="}}]},"source":"https://github.com/ossf/malicious-packages/blob/main/osv/malicious/npm/identity-two-factor/MAL-2026-18367.json"}}],"references":[{"type":"PACKAGE","url":"https://www.npmjs.com/package/identity-two-factor"},{"type":"PACKAGE","url":"https://www.npmjs.com/package/identity-two-factor/v/999.0.0"}],"database_specific":{"iocs":{"files":[{"digests":{"sha256":"57f5633f530f90a6e50a2e33f6bb33624952f83ab090ac843978cc9cc55f9ec8"},"note":"postinstall runs `node postinstall.js`, which POSTs hostname and username to webhook.site (identity-two-factor@999.0.0).","paths":["package.json"],"source":"PACKAGE_ARCHIVE"},{"digests":{"sha256":"182bd20d54e19e3b3dfc34c7bd0c4c9ed0bfb2845eaa01a6e52258d53ae36462"},"note":"Executed by the postinstall script of identity-two-factor@999.0.0.","paths":["postinstall.js"],"source":"PACKAGE_ARCHIVE"}],"urls":["https://webhook.site/e0981a8e-081e-49a0-8b4a-235109e13045/cbhq-canary"]},"malicious-packages-origins":[{"id":"IN-MAL-2026-022029","import_time":"2026-10-29T14:14:19.074701878Z","modified_time":"2026-10-29T13:39:34Z","sha256":"f9adfaa94d0139573858f537ccd5f8eeb2fd452d18cfac057fd1bc6b38f8773c","source":"amazon-inspector","versions":["999.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"}]}