{"id":"MAL-2026-18186","revision":"40d872c3866c442fa73763f366067316","records":[{"revision":"40d872c3866c442fa73763f366067316","observedAt":"2026-10-24T13:17:17.793+00:00","statement":{"source":"osv","id":"MAL-2026-18186","aliases":[],"title":"Malicious code in net-codec-testmetest (npm)","description":"\n---\n_-= Per source details. Do not edit below this line.=-_\n\n## Source: amazon-inspector (7bf1dbafca56ccfcb849f9ebb80b7a1cdf42007fd12618492620e0f7660476b2)\nThe package has no native source files but ships a binding.gyp whose sole target is type:'none' and whose sources array uses GYP command expansion (`<!(env node index.js...)`) to execute index.js during `node-gyp rebuild`, which npm invokes automatically whenever a binding.gyp is present. index.js is a Caesar-cipher-obfuscated IIFE whose decoded body imports node:crypto, reads the shipped data.bin blob, AES-128-GCM-decrypts it with hardcoded key/iv/aad, brotli-decompresses the result into a temporary file, and spawns that file under the Bun runtime (declared as the package's only dependency). The combination — binding.gyp with no native sources used purely as an install-time execution smuggler, an obfuscated eval-based loader, and an opaque encrypted payload executed under an alternate runtime — is a packed dropper with no legitimate function for a stated utility library.\n","state":0,"publishedAt":"2026-10-22T06:11:48+00:00","modifiedAt":"2026-10-22T06:45:05.7330096+00:00","affected":[{"ecosystem":"npm","name":"net-codec-testmetest","ranges":[],"versions":["1.0.1"],"rawVersionEvidence":null}],"metrics":[],"references":["https://www.npmjs.com/package/net-codec-testmetest/v/1.0.1"],"sourceUrl":"https://osv.dev/vulnerability/MAL-2026-18186","license":"OSV · upstream source license applies","key":"osv:MAL-2026-18186","identifiers":["MAL-2026-18186"]},"retained":false,"historicalAffected":[]}],"coverage":[]}