{"id":"MAL-2026-10960","summary":"Malicious code in markscan (npm)","details":"The markscan package was published to the npm registry by user 'jonothhu' (maintainer email bruemleveroger@gmail.com) as one of 19 packages in a dependency-confusion campaign targeting the 'markscan', 'akrai', and 'iphouse' namespaces, published in both unscoped and scoped (@scope/name) forms so that a misconfigured resolver installs the public lookalike instead of an intended private/internal dependency. Each package self-describes as an 'AUTHORIZED SECURITY RESEARCH CANARY' (static token PATHC-CANARY-2026, contact farouqsa@proton.me), but ships an unconsented install-time beacon and provides no legitimate functionality.\n\nThe package declares a postinstall hook (\"node postinstall.js\") that executes automatically on npm install. The bundled postinstall.js collects host reconnaissance - the package/canary name, the static token 'PATHC-CANARY-2026', an event label, a UTC timestamp, the Node.js version, the current working directory, the platform, and os.hostname() - and exfiltrates it via HTTPS POST to a hardcoded anonymous dead-drop at https://webhook.site/129cb2ee-ba08-4b3c-989c-270dc0030350 (the same collector across all 19 packages). Request errors are swallowed.\n\nThe self-attestation of 'authorized security research' present in the package metadata is unverifiable and does not change the disposition: the package performs unconsented telemetry collection and exfiltration at install time to an anonymous collector, matching the behavior of a dependency-confusion reconnaissance beacon. Install-time behavior and the shared collector endpoint were confirmed by static analysis of a sample spanning all three namespaces and both scoped and unscoped variants.\n\n---\n_-= Per source details. Do not edit below this line.=-_\n\n## Source: amazon-inspector (cabd1904cc96cf1107115d9d76f4a53b29c7311f3755e79610bf72eae1c3d023)\npostinstall.js runs unconditionally on `npm install` and POSTs a JSON payload containing the installer's hostname, current working directory, platform, Node.js version, and a timestamp to a hardcoded webhook.site collector (https://webhook.site/129cb2ee-ba08-4b3c-989c-270dc0030350). The payload also carries a static token string ('PATHC-CANARY-2026'). The package's self-description as an 'authorized research canary' does not constitute installer consent — installers of markscan have not opted into the beacon, and host identifiers are transmitted to an author-controlled endpoint at install time.\n","modified":"2026-08-04T23:05:17.837436198Z","published":"2026-07-20T00:00:00Z","database_specific":{"malicious-packages-origins":[{"source":"amazon-inspector","versions":["1.0.0"],"id":"IN-MAL-2026-011253","import_time":"2026-08-04T22:30:07.412669427Z","modified_time":"2026-08-04T21:54:31Z","sha256":"cabd1904cc96cf1107115d9d76f4a53b29c7311f3755e79610bf72eae1c3d023"}]},"references":[{"type":"WEB","url":"https://www.npmjs.com/package/markscan"},{"type":"PACKAGE","url":"https://www.npmjs.com/package/markscan/v/1.0.0"}],"affected":[{"package":{"name":"markscan","ecosystem":"npm","purl":"pkg:npm/markscan"},"ranges":[{"type":"SEMVER","events":[{"introduced":"0"}]}],"versions":["1.0.0"],"database_specific":{"iocs":{"domains":["webhook.site"],"urls":["https://webhook.site/129cb2ee-ba08-4b3c-989c-270dc0030350"]},"cwes":[{"name":"Embedded Malicious Code","cweId":"CWE-506","description":"The product contains code that appears to be malicious in nature."},{"description":"The product contains code that appears to be malicious in nature.","name":"Embedded Malicious Code","cweId":"CWE-506"}],"source":"https://github.com/ossf/malicious-packages/blob/main/osv/malicious/npm/markscan/MAL-2026-10960.json","indicators":{"package_integrity":[{"hashes":{"sha1":"7b21478a806129f1a85009baca0cfcac7b299038","sha512_sri":"sha512-kfylxsWJ1la90dTWt67bE+3FNvGyJ6PnvtRlSeRmzW4Yl4gQZCG6hDAVELIPF5+bgrfjyQStw79gGBqzyuZc8g=="},"filename":"markscan-1.0.0.tgz"}],"evidence_files":[{"sha256":"a69a9ab74917afb75e801c4182218f342222d431eab2d30ec470db234647bb99","tlsh":"6a01dcf08674d32e5f7092d4e3a0ed2b92b6e22076028573bbf912dd2b425580561eac","path":"postinstall.js"}]}}}],"schema_version":"1.8.0","credits":[{"name":"Amazon Inspector","contact":["inspector-research@amazon.com"],"type":"FINDER"},{"name":"SafeDep","contact":["https://safedep.io"],"type":"FINDER"}]}