Malicious code in react-native-bright-sdk (npm)
Exact source revision recorded 26 Oct 2026 04:25:30 UTC. It does not establish the source's current position. Latest evidence.
osv · MAL-2026-18290
Publishedreact-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. --- _-= Per source details. Do not edit below this line.=-_ ## Source: amazon-inspector (4208eebeabe05114e68e0b4abf11c9ff176594200c28400fe5c82deb3a5c8f55) The 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.
- Source published
- 22 Oct 2026 23:01:30 UTC
- Source modified
- 26 Oct 2026 03:30:06 UTC
- Observed here
- 26 Oct 2026 04:25:30 UTC
- Source terms
- OSV · upstream source license applies
Original source record · Cite this exact observation · Complete original publisher JSON
This view projects the publisher's source fields for reading; the original JSON retains additional fields and CVE enrichment containers. Attribution: osv · OSV · upstream source license applies. Source text is retained; field grouping and change labels are provided by ChangeIntel.