{"schema_version":"1.9.0","id":"MAL-2026-18290","published":"2026-10-22T23:01:30Z","modified":"2026-10-26T03:30:06.158666744Z","summary":"Malicious code in react-native-bright-sdk (npm)","details":"react-native-bright-sdk 9000.0.0 is a dependency-confusion package that squats the name of a React Native SDK that is distributed privately as a tarball outside the npm registry. Its `preinstall` script runs `node canary.js`, which collects the machine's hostname and a timestamp, base64-encodes them and sends them in an HTTPS GET request to `https://estimator-nemeses-unwatched.ngrok-free.dev/canary` on install. The package describes itself as a \"namespace reservation / canary\" and contains no other functionality. The version number 9000.0.0 makes it outrank any private release of the same name in a project whose dependency resolution falls back to the public registry. The request does not read the response or set a timeout, so the install can hang. It was published on 2026-10-22, after an inert `0.0.0-stage` placeholder (not affected). Any machine that installed this version has disclosed its hostname to a third party; remove the package, and check that private package names are pinned to or scoped to the internal registry.\n\n---\n_-= Per source details. Do not edit below this line.=-_\n\n## Source: amazon-inspector (4208eebeabe05114e68e0b4abf11c9ff176594200c28400fe5c82deb3a5c8f55)\nThe package declares a preinstall lifecycle hook that executes canary.js on `npm install`. The script collects os.hostname() and an install timestamp, base64-encodes the JSON payload, and transmits it via HTTPS GET to the hardcoded endpoint https://estimator-nemeses-unwatched.ngrok-free.dev/canary. The destination is an anonymous, ephemeral ngrok tunnel unrelated to any legitimate publisher infrastructure, and the beacon fires automatically without user opt-in. The package ships no functional code justifying this network activity; it exists only to send the install signal. The version number (9000.0.0) and name resemble a dependency-confusion / namespace-reservation shape targeting internal package resolution.\n","affected":[{"package":{"name":"react-native-bright-sdk","ecosystem":"npm","purl":"pkg:npm/react-native-bright-sdk"},"versions":["9000.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":"canary.js","sha256":"6074ad37a144690f73db03af51dcb13de9a191488b877e3f619e1ae07db055b4","tlsh":"1f01f4b0a2e891741210b4c3d915fc0da17bd0fd3ede23a557851969f9d1438c67774d"}],"package_integrity":[{"filename":"react-native-bright-sdk-9000.0.0.tgz","hashes":{"sha1":"3d00a777a24e53bee371f569197615c09f74be68","sha512_sri":"sha512-qm54YMFEioEUV/7nfIWpSAF2yTbzb5Vyzvkugu2SPQIiDFqY9jYN12hXRkcnIKBMRoO2z/P02VuehM/BzHF9IA=="}}]},"source":"https://github.com/ossf/malicious-packages/blob/main/osv/malicious/npm/react-native-bright-sdk/MAL-2026-18290.json"}}],"references":[{"type":"PACKAGE","url":"https://www.npmjs.com/package/react-native-bright-sdk/v/9000.0.0"}],"database_specific":{"iocs":{"domains":["estimator-nemeses-unwatched.ngrok-free.dev"],"files":[{"digests":{"sha256":"6074ad37a144690f73db03af51dcb13de9a191488b877e3f619e1ae07db055b4"},"note":"install hook: sends base64 hostname and timestamp to the ngrok host over HTTPS","paths":["canary.js"],"source":"PACKAGE_ARCHIVE"},{"digests":{"sha256":"7710019ca6be234369704c34ddba90be86eb3b15255b84f1d13f79f2fe5f5935"},"note":"scripts.preinstall runs `node canary.js`","paths":["package.json"],"source":"PACKAGE_ARCHIVE"}],"urls":["https://estimator-nemeses-unwatched.ngrok-free.dev/canary"]},"malicious-packages-origins":[{"id":"IN-MAL-2026-021709","import_time":"2026-10-25T15:15:15.819951759Z","modified_time":"2026-10-25T15:11:43Z","sha256":"4208eebeabe05114e68e0b4abf11c9ff176594200c28400fe5c82deb3a5c8f55","source":"amazon-inspector","versions":["9000.0.0"]}]},"credits":[{"name":"Amazon Inspector","contact":["inspector-research@amazon.com"],"type":"FINDER"},{"name":"Robin Frehner, Protet","contact":["https://protet.io","mailto:hello@protet.io"],"type":"FINDER"}]}