{"id":"MAL-2026-16383","revision":null,"records":[{"revision":"95f1c8aa1a34400396bc1984b08278ae","observedAt":"2026-10-24T13:17:17.793+00:00","statement":{"source":"osv","id":"MAL-2026-16383","aliases":[],"title":"Malicious code in mxdriver (npm)","description":"\n---\n_-= Per source details. Do not edit below this line.=-_\n\n## Source: amazon-inspector (2f3ed1442f0588fda7bc378a0fe79c7170864472c6cca93b8ec6629645b1add0)\nThe npm package mxdriver@0.0.2 ships obfuscator.io-style string-array-obfuscated preinstall and postinstall scripts (scripts/preinstall.js, scripts/postinstall.js). On npm install, the decoded scripts fetch remote content from api.imghippo.com (an anonymous third-party image host, e.g. https://api.imghippo.com/files/hOG8244hc.png) and a second URL under www.image.com/, write the bytes into the package directory as gldriver_pre_asset.exe and gldriver_pre_core.exe, then invoke a platform-specific opener against the.exe path via child_process.exec (`mspaint \"...\"` on win32, `open \"...\"` on darwin, `xdg-open \"...\"` on linux), and delete the files. The README frames the package as a Google APIs wrapper, which does not correspond to downloading and opening.exe files at install time. The delivery source is mutable and non-publisher, no hash or signature is verified, the destination filename is an executable extension, and the URLs, filenames, and shell commands are all hidden behind a rotated string-array accessor (`_0x5c7e`) — a classic install-time dropper pattern whose payload can be swapped at any time by whoever controls the imghippo asset.\n","state":0,"publishedAt":"2026-09-22T14:52:04+00:00","modifiedAt":"2026-09-22T15:31:45.2337279+00:00","affected":[{"ecosystem":"npm","name":"mxdriver","ranges":[],"versions":["0.0.2","0.0.1"],"rawVersionEvidence":null}],"metrics":[],"references":["https://www.npmjs.com/package/mxdriver/v/0.0.2","https://www.npmjs.com/package/mxdriver/v/0.0.1"],"sourceUrl":"https://osv.dev/vulnerability/MAL-2026-16383","license":"OSV · upstream source license applies","key":"osv:MAL-2026-16383","identifiers":["MAL-2026-16383"]},"retained":false,"historicalAffected":[]}],"coverage":[{"source":"cisa-kev:global","scope":"Complete CISA KEV catalog; all vendors. Missing entries do not establish absence of exploitation.","generation":"2026-11-12T23:19:15.9590640+00:00","complete":true,"records":1779,"lastAttemptAt":"2026-11-12T23:19:15.959064+00:00","lastSuccessAt":"2026-11-12T23:19:16.1249039+00:00","error":null,"lastVerifiedAt":"2026-11-12T23:19:16.1249085+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"cve-program","scope":"Official CVE Program baseline and cumulative hourly delta; all vendors, published and rejected records","generation":"cve-64752486c567b55b31fb0d7225f5222bcd0019564ac0ac5f0649e242c7b19299-444fbca434d6d78ca298b98e326f006793c8bfba8d8449559c252c7bd5d43b97","complete":true,"records":424892,"lastAttemptAt":"2026-11-12T23:16:32.1805379+00:00","lastSuccessAt":"2026-11-12T23:16:31.3274301+00:00","error":null,"lastVerifiedAt":"2026-11-12T23:16:32.1805379+00:00","snapshotPublishedAt":"2026-11-12T22:20:38+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"euvd","scope":"Rolling EUVD lookups of CVE aliases in current public OSV archives; 500 identifiers per refresh, rechecked after 48 hours. Not a global EUVD catalog. Successful not-found lookups count as checked; they do not imply withdrawal or safety. No reader inventory is sent.","generation":"enrichment-18b6e2de72f046b9ae68d900992927cf","complete":true,"records":13786,"lastAttemptAt":"2026-11-12T23:20:07.0132813+00:00","lastSuccessAt":"2026-11-12T23:20:07.008+00:00","error":null,"lastVerifiedAt":"2026-11-12T23:20:07.008+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":13839,"expectedIdentifiers":13839,"failedIdentifiers":0},{"source":"first-epss:nuget","scope":"FIRST EPSS for explicit CVE aliases in the collected public NuGet archive. Not a global EPSS backfill.","generation":"2026-11-12T23:19:15.9590640+00:00","complete":true,"records":1123,"lastAttemptAt":"2026-11-12T23:19:15.959064+00:00","lastSuccessAt":"2026-11-12T23:19:16.1261415+00:00","error":null,"lastVerifiedAt":"2026-11-12T23:19:16.1261418+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"nvd","scope":"Rolling NVD lookups of CVE aliases in current public OSV archives; 500 identifiers per refresh, rechecked after 48 hours. Not a global NVD catalog. Successful not-found lookups count as checked; they do not imply withdrawal or safety. No reader inventory is sent.","generation":"enrichment-c602031ad3784e46b459ac5b8ed0c456","complete":false,"records":13781,"lastAttemptAt":"2026-11-12T23:19:52.2497266+00:00","lastSuccessAt":"2026-11-12T23:19:52.247+00:00","error":null,"lastVerifiedAt":"2026-11-12T23:19:52.247+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":13830,"expectedIdentifiers":13839,"failedIdentifiers":0},{"source":"osv:Go","scope":"Complete OSV Go ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"go-93e76d404e1aeb6a7e8902f5ffa06211fc86dea3b1958e297abb2668aa5e6e8c","complete":true,"records":9952,"lastAttemptAt":"2026-11-12T23:19:15.8042075+00:00","lastSuccessAt":"2026-11-12T23:19:15.5239119+00:00","error":null,"lastVerifiedAt":"2026-11-12T23:19:15.8042075+00:00","snapshotPublishedAt":"2026-11-12T23:03:02+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:NuGet","scope":"Complete OSV NuGet ecosystem archive, including GitHub Advisory Database records; NuGet version matching only","generation":"nuget-4d60731753a2f72e455d1086e7203d0ef10843936dcc1cf2b45135e2caa204b0","complete":true,"records":2012,"lastAttemptAt":"2026-11-12T23:16:32.3274083+00:00","lastSuccessAt":"2026-11-12T18:16:50.7862525+00:00","error":null,"lastVerifiedAt":"2026-11-12T23:16:32.3274083+00:00","snapshotPublishedAt":"2026-11-12T17:48:11+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:crates.io","scope":"Complete OSV crates.io ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"crates.io-20d1a8ab073a1c13ab2143dbcadb34ebb8edf1e18e16482b448513662c3d1e12","complete":true,"records":3127,"lastAttemptAt":"2026-11-12T23:19:15.9196655+00:00","lastSuccessAt":"2026-11-12T22:18:31.0338213+00:00","error":null,"lastVerifiedAt":"2026-11-12T23:19:15.9196655+00:00","snapshotPublishedAt":"2026-11-12T22:18:06+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:npm","scope":"Complete OSV npm ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"npm-9968eeb70b2f77fc15916697fe5c77d3aa6cdbb4b21de3dc236dafb289854aa5","complete":true,"records":231735,"lastAttemptAt":"2026-11-12T23:19:03.9300655+00:00","lastSuccessAt":"2026-11-12T23:19:02.2755063+00:00","error":null,"lastVerifiedAt":"2026-11-12T23:19:03.9300655+00:00","snapshotPublishedAt":"2026-11-12T22:47:57+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null}]}