{"schema_version":"1.8.0","id":"MAL-2026-13024","published":"2026-08-05T14:33:38Z","modified":"2026-08-05T15:51:47.925248217Z","summary":"Malicious code in bnpl-forms-test-utils (npm)","details":"\n---\n_-= Per source details. Do not edit below this line.=-_\n\n## Source: amazon-inspector (4cd6e149b86406225e3aca99e9bbae44cf13c0c7d5e10be27155162b63832f2f)\nOn `require('bnpl-forms-test-utils')`, index.js loads _platform.js, which selects a platform-specific endpoint and downloads an opaque binary via https.get from one of three Cloudflare Workers hosts reconstructed at runtime from split-string arrays: oob-worker.cf101-adf.workers.dev, oob-worker.cf102-baf.workers.dev, and oob-worker.cf103-070.workers.dev. A DNS TXT fallback under {sdk,ext,pkg,net}.dl.wel1.ru reassembles base64 chunks when the HTTPS hosts fail. The fetched bytes are written to /var/tmp or %TEMP% under masquerading names (.cache_<hex> on Unix, dotnet_diag_<hex>.exe on Windows), chmod 0755'd, and detached via spawn('/bin/sh', ['-c', path+' &'], {detached:true}) or spawn('cmd.exe', ['/c', 'start',...]). Hostnames and API names are obfuscated via array-join and string concatenation (e.g. require('child_'+'process'), fs['chmod'+'Sync']). A second dropper module lib/telemetry.js (~81 KB) shipped in the tarball implements the same fetch/chmod/spawn/detach pattern with identical obfuscation, though it is not referenced from the current main. The declared purpose is `common helpers`; no native source ships in the package to justify the binary download.\n","affected":[{"package":{"name":"bnpl-forms-test-utils","ecosystem":"npm","purl":"pkg:npm/bnpl-forms-test-utils"},"versions":["35.4.1"],"database_specific":{"cwes":[{"cweId":"CWE-506","description":"The product contains code that appears to be malicious in nature.","name":"Embedded Malicious Code"}],"indicators":{"evidence_files":[{"path":"_platform.js","sha256":"44a1d5d37df9a5c7635117430554df7f304ddc0ed95aaa22b9ce294ae821e59c","tlsh":"17a1749a16a570184bb09be487175416f65bf6633781c284fb9ca5d81fb212482b2efc"},{"path":"lib/telemetry.js","sha256":"17288b70bf3c827e799364622477b92b9e42f6a7fa0be538445606ad4133195f","tlsh":"d2835055566a242186b2b378df234107ff3685272642429dbafc82dc1fbd72092a5ffc"}],"package_integrity":[{"filename":"bnpl-forms-test-utils-35.4.1.tgz","hashes":{"sha1":"8c0c5ae8cf24aadfe460ff97e3187b0e4664dd45","sha512_sri":"sha512-Cj+PNZXBlLlSIXEGf3uFMQSOVQ1o3XSGh/fKy1UrMYD6D2lpCIXtkSHy50S57iQ6uboGYmiPCmZBlkyNcs36fg=="}}]},"source":"https://github.com/ossf/malicious-packages/blob/main/osv/malicious/npm/bnpl-forms-test-utils/MAL-2026-13024.json"}}],"references":[{"type":"PACKAGE","url":"https://www.npmjs.com/package/bnpl-forms-test-utils/v/35.4.1"}],"database_specific":{"malicious-packages-origins":[{"id":"IN-MAL-2026-015349","import_time":"2026-08-05T15:19:46.371940486Z","modified_time":"2026-08-05T14:33:38Z","sha256":"4cd6e149b86406225e3aca99e9bbae44cf13c0c7d5e10be27155162b63832f2f","source":"amazon-inspector","versions":["35.4.1"]}]},"credits":[{"name":"Amazon Inspector","contact":["inspector-research@amazon.com"],"type":"FINDER"}]}