MAL-2026-18290 Malicious code in react-native-bright-sdk (npm)
- Package
- react-native-bright-sdk
- Registry
- npm
What is MAL-2026-18290?
MAL-2026-18290 is a malicious package in react-native-bright-sdk, published on 22 Oct 2026.
Official description
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.
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.
What should I do about MAL-2026-18290?
Remove the package from your dependencies and lockfiles, then rotate any secrets on machines where it was installed.