BACK TO BLOGS Back to Press Releases
How an unpatched dev server led to a Windows compromise

React2Shell to real-world breach: How an unpatched dev server led to a Windows compromise

Written by:

Will Pires, Pandeli Zi, John Moutos, ThreatLocker Threat Intelligence

Table of contents

React2Shell (CVE-2025-55182) is a critical vulnerability in React server components that allows unauthenticated remote code execution through crafted HTTP requests. In real-world exploitation, attackers leveraged an unpatched development server to gain code execution, pivoted to native Windows commands, and attempted to deploy cryptomining malware. This case shows how exposed dev infrastructure and delayed patching can turn a web-layer flaw into full system compromise.

Executive summary

On December 3, 2025, the React Engineering team published an official security advisory for a critical security vulnerability in React server components, identified as CVE-2025-55182 or React2Shell. The public disclosure came shortly after the vulnerability was discovered and reported privately by researchers in late November.  

On release, the vulnerability was labelled as critical with a CVSS score of 10.0, as when leveraged an unauthenticated attacker could execute arbitrary code remotely and anonymously. Since the disclosure, several reliable proof-of-concept exploits have been released to the public, and the React Engineering team now recommends upgrading to recently patched versions as soon as possible. ThreatLocker Threat Intelligence observed in-the-wild activity resembling active exploitation of React2Shell against IIS servers hosting web applications utilizing React server components.

An innate vulnerability

React2Shell is exploited through specially crafted HTTP POST requests sent to hosts serving web applications utilizing React server components, which allows for interpretation of certain data prior to validation on the server-side to reduce resource usage and compute time. Unfortunately, these optimizations lead to code execution without validation.  

React2Shell abuses the lack of validation for these HTTP requests to the server, which are usually benign portions of logic to process, but can be crafted to execute commands on the server before any kind of authentication. This vulnerability is innate in affected versions of React, and fully configured servers that support React server components are still at risk of data compromise.

Activity in-the-wild

Upon successful exploitation, Threat Intelligence observed the compromised IIS app pool user begin attempts to execute a series of Linux binaries, such as “grep”, “sh”, “busybox”, “chmod”, and “bash”, which are not native to Windows hosts and failed to execute. In addition, several shell (“.sh”) scripts were downloaded and attempted to execute. However, they were unsuccessful due to the required binaries not being present on Windows hosts.  

These commands also referenced Linux filesystem paths such as “/bin/busybox/” and “/tmp/”, which do not exist on Windows systems and are not translated to any valid “C:\” path. Repeated attempts to execute the respective Linux binaries and scripts continued for six and a half days before stopping abruptly.

Figure 1: OS Confusion

Pivoting away from unsuccessful UNIX commands, the attackers realized they were accessing a Windows host and began executing native Windows binaries such as “whoami”, “ipconfig”, and “net” to enumerate the host. External payloads were retrieved from known malicious domains, and execution was attempted but unsuccessful due to the ThreatLocker Application Control default-deny policy.  

In an effort to establish persistence, the AnyDesk remote access software was downloaded as “any.exe” and execution was attempted, albeit denied by Application Control.

Figure 2: Attempted AnyDesk Installation
Figure 3: Any Details
Figure 4: Joi Details

After initial enumeration attempts, the attempted deployment of a rudimentary PowerShell reverse shell was observed to facilitate remote access, as the execution of AnyDesk was unsuccessful. The underlying objective quickly veered towards the distribution of “xmrig”, a legitimate Monero cryptocurrency mining application heavily abused by threat actors and low-skill attackers alike.  

Upon successful deployment, these miners collect and deposit Monero into the “C3pool” mining pool. Threat actors utilize the C3pool mining pool to ensure that cryptocurrency mined on infected hosts is mixed or “cleaned” before it is safely accessed and received.  

The domains contacted by “xmrig” were previously identified and attributed to a cryptojacking campaign leveraging React2Shell for mass cryptocurrency miner deployment. Despite the fact that the shell scripts were unable to execute, the downloaded scripts provide a clear picture of how the “xmrig” miner is installed as a service on a suitable host.

Figure 5: PowerShell Reverse Shell

Several “echo” commands are used to output debugging and progress messages to the console. These output messages also include characters in Mandarin Chinese, further suggesting the origin and affiliation of its authors. The “wget” tool is used to download the next stage payloads, and the command “nohup” is used to start these stages and ignore the “hangup” signal, persisting after user logout.

Figure 6: Installation Script

The first downloaded payload is a simple loop that ensures the “runnv” (xmrig) process is running (starting it with “nohup” if not found) and kills any processes that do not match a process name of “runnv” or arguments containing “zzh”. The function then sleeps for one second and repeats both checks continuously.

Figure 7: Termination Script

The second stage payload utilizes a notable evasion tactic: a bind mount linking the “runnv” process held at “/proc/$pid” to “/proc/2”, the kernel thread. This changes the contents of “/proc/$pid”, and effectively hides it from “ps”, making it significantly more difficult to detect or investigate the miner.

Figure 8: Bind Mount Script

Another notable evasion tactic is the renaming of tools in use such as “curl” and “wget”. To prevent detection platforms from recognizing suspicious use, these tools are renamed to “cual” and “wgat” respectively.

Figure 9: Tool Rename Script

Cryptojacking campaigns are notorious for disregard of the host being targeted and often leave tools or features broken and unusable after installation of the miner. These tools are not reverted to their original filenames after being renamed, and it is highly likely that both “curl” and “wget” would be unusable after this point.

Further action is taken to impair defenses on the host as the UFW (Uncomplicated Firewall) service is disabled and “iptables” rules are created to accept all inbound, outbound, and forwarding connections. Interestingly, the command “iptables -F” is run immediately afterwards, which deletes all rules in the table, including the created rules. Although this may be to ensure that no rules remain, these contradicting commands further highlight the inaccurate, unfinished nature of these scripts and their campaigns.

Figure 10: UFW Tamper Script

Depending on the compute available, the attackers will attempt to leverage as many resources as possible while evading detection. The malware will echo various port numbers depending on the available hash rate back to the attacker, providing clarity on both potential revenue generation from this particular victim host and which port will be used for data transfer.

Figure 11: Hash Rate Selection Script

Alibaba’s Threat Detection Software (TDS from Alibaba Cloud, previously known as Aliyun) is specifically targeted, with uninstall files being downloaded and multiple IP addresses associated with the software being effectively blocked. Additional measures such as “kill -9”, “rm -rf”, “systemctl stop”, and “apt-get remove” ensure associated services and remaining agents are removed.

Figure 12: Aliyun Agent Removal Script

Competition amongst cryptojackers is common, and it is not unusual for instances of malware to terminate other miners to ensure the most recent installation (or the last malware to execute) is the one generating revenue from the victim and sending it to the correct wallet. In this case, only existing, outdated instances of “xmrig”, “runnv”, and “C3pool” are removed, and no other services or miners are referenced.

Figure 13: Competition Removal Script

A simple check is conducted to determine if the miner was stopped by existing antivirus platforms. If the stock version attempted first is not found, it is assumed to be removed, and redownloaded and extracted to the “/tmp/” directory. If this is also blocked, no other methods are attempted.

Figure 14: Redeploy Script

Conclusion

Cryptojacking campaigns are known for resource theft over a massive number of affected hosts, and often approach potential targets with high volume, non-specific tactics rather than carefully tailored attacks. This behavior mimics TTPs employed by inexperienced attackers rather than the sophistication associated with state APTs or advanced financial crime syndicates.  

Considering the wide breadth of a mining pool, initial access is often gained through openly available and easily exploitable methods. By taking precautions to secure the outer perimeter of a network, the vast majority of low-complexity attacks such as these can be mitigated, detected, and stopped.

IOCs

Hashes

SHA-256
01dc05218cb437f664bf4659a4e17bb0fa619d1108cba75b0586f30616c6dad7
0364ccd4d33d20a30c7a3c372ee8bdaad1dcda220322bceac7fe1338be844b43
08a5d0d8ec398acc707bb26cb3d8ee2187f8c33a3cbdee641262cfc3aed1e91d
119d7d0830e42ce0ccd55f4c0c68159a5cca2925887c3aff8aca1fa6513551b2
14bd9f218bca5efe13a69da6ae3c60756f036ede6526a67e8baddc1117b70def
16773927dfe08ced23ac7b9f64741f2688ab45f81ad124679f73f8900ddd7cc2
16fbf64dd808678661774fdf88a95366898ae36a3bff70117f57a9f1745738eb
19cb261169990706041fe819f7d60be000d5c3e0f4d92be114827309cc8aafd6
221e280026b6a95cb4e412c6b49d40369ad919f7c63d5431318d6252340b0352
225a40104f94dc247ea62de47f600eac74c7c6b1f5964aeebeac2670e2eea878
2805ca562b170c64c45a57756fde4d2988e7470a96c9c62b573cba0ee9c245d8
2cc30e8dc3265b550825fb538e5a3c09d41f09db1ffa8d4a3c42024eef0a7233
2cdcb205931930acb0c2f5495b5d8f0909ecb6c274d5333bb35ce138dad8102c
307bb0547ae8b747cf0376e29d4f7a528f76a31c2df16bf9165ba83bdf97315c
31a697d77dfb56f99f0cdd2ab1772c26f8bc0ad2b8f5da9da2ccf7fcf2721218
31c4d219371336e6ecc39dcc21711eab8bb4829795fc5082ea022eefc1caa675
34a66cb4c33453d8f01ae9b57abb470d980c2e402dedc11b5d9599753e073f16
34a923a743a6fe56ff6e0bbfb0ec4e51525dca31ebe2865aadc25291949cc37c
36ca725ffdc27f2a057b83c9862abda60036920b265ac68d3cc5a67e40a81083
3a75d8a8a2fa457f13f228f588cc3304b407cc54dd36aab862a393368a93f19f
3e376324369088d3a848d253b8f9e08b90a7a549a143e758433b1265d0f34a29
40a3dcfe5184cfaa4e1fd2633e2f2278e8049e839ca662ade7ba8ebd659a37b7
428e087bcfccd102189a2e350a35b328c1a4ac3be2f6edc043e5d8082f529693
445a097d665db3c5ac55cff1cab4e5c459e6fbe65a469cf96c07af83037b7ad7
4843b91c6093e5a917c30449db00d4c006227561284ea1dac77f1b325795517e
4a916d14d4cc997a862da720eca0bd5f2bceb8df81bcbcf3d24009dc24c7cd4c
4c194fa76095d46b0e286f7dead970ef15d8b70d5cf579a96385db71c5e4cfb1
511bb467991f5f24578beae81d945b2ae26d0aa25e8acbf4cf69a630be1904b1
57916bb2fc6c674d608c5d0c829e12790560826e9b612bf4aacdfc82f8acc8d9
57b8080f989e0cd81c06c1c231eb5e52cbeed2c8d14ea6b0b842791612051cdd
5b281e0a7cead02b2b4e6683509239362b95d069c93bbd3a629faf30b617ddab
5e061b9648924bad9f1f0ee38f1e8a01c0468b06e29ef1e792329ec914a58ac2
6195e13fed37aa3a4da485d52dc108ad49ac033d602c8402e0d3733264beff51
628b3d1725dd4d33e8e2a4052a3f91603088198c8629d6aa386a868977c49879
6660c69660c49fab056b872efb250badea61ae1f62cc4e460bc6c974b6d127f1
6cd36db0d5f0d7add5d4430ce9094ac1dc2ca16655f21766a550c7b8ae179194
70cb4ff5f30014ed63c21c94c0daaf2d9f23d1895b654d60c2daa91ab54f841b
796f06c18310d4a37ea1d6c1917e7fdc6b2e739978b75aecd441ab23d4573bfe
7d4783295cf3bddcb58cf0f73beeadf99c5c6e4ab3f44259f87bdc98b8997b47
7dab1281c8876e56a29974a5f25939c2354bca6004dde31c685da4f91928203f
7df4290325a19e0d34d803bc8445ecb21359f935b1433e5c3e47c93287b06d63
7e203002c32a99fd7e82d52cb5419f604b5e812d3faf6f07b4166e4ee718bde1
84061ee691cd8795e6ed14e98c4d3a3ad87517330249d82a75c8a7ff95873773
84931e32aa3a27bfd4bfde88412a23bffdd6cd94eeeafdf91fbc49229da48f67
89b90da48fa73a4557b25d5acb673824135c8d513f7ee915782d9d6717b6ab36
8c32b28d5c217f2c51fb1233527b31c8ef447eddddbf45f9005406dbc355c182
9bac5331260f9b10ec17d94876fa28733fae5a7a17a8af23d0517a6c37512508
9bbcade7f7a36dc2dbc76a50e2ef6fe951738f6d99c12fb9c553f469428bace0
9cc2d4137a7823a889de6b5aaf12c54e1449406056e5e5ec820c8cdac1696749
a5ebb9d2e75e5ef497613a935e48888e7eb8b5ae80a9c087f204868aff93e311
b19e017b3a2215a548f70b8bbcb3793bc99b99cdf8ee550fecc3bb2496a5fa29
b30160e759115e24425b9bcdf606ef6ebce4657487525ede7f1ac40b90ff7e49
b3a437e1ed42f62277861a9e5d0b70ab54786766a9b0299b0ef5ee0cd646b9a8
b5b7c09b3411d0b847bdd9c786d904c83d78fa82f67d54a8680c08ecd2f7c9e2
b783a18411be49d8d9e938dcef2f03ed9c9cb7e74781a7a0ee9d2b4e46a5c7ad
b8e096b46ef9df2a46d66d9988211aa6f6a54b406ebb18cafa629f69c7682b6a
b8eaffa62c7a56f8f4ee579a290b1af6923c5ca632a6e9c9eb4cc5fc1768d3e8
c208d8d0493c60f14172acb4549dcb394d2b92d30bcae4880e66df3c3a7100e4
c427fda1986e7b5a7006b4a95a782e5736297a92fdc950509bcb24d3e8965d24
c8d5572ca8d7624871188f0acabc3ae60d4c5a4f6782d952b9038de3bc28b39a
c9ab0945fec5b1690c3c267f736c932018e6efc564016b3dd52894dc77d2072f
cb91a991908c052790f6b2ffcd5ecf13f04641f30f38f54ee996359a4da5eada
cc1e2fe61480c59f973359d50ba6242e12c1b8157c4889a05ae83cf3ead0e71c
ce8a9a01cea73e501b37f74e075194b33afc01f6562b15837cd155e62cef3796
cf3d3912404edd93774fa0a441771daf162b2977cd7138b9214c1824431b35a5
d217a19f0a8ff60e5289e9cdf61146df6041e6164aac01ce330cf593f18de962
dfbc97ffa63457b24af333e1b1d05b6fe3a61f214abf3e4e0c5b55a2a9a20bdb
e3f3c6161ed2ec8f175a18b7713a77bd35e59badc87e5e356aac116c40da5834
e69d9d0711abef6801540c7f088792e5982a321ef77b06c864f6ac1e51ae2c83
e6e4d308a93467772e0cc12d13d44a75acb68f2abf2a5d7d171bc3061ea6436c
e9df5386204c4072078126d46a6ba453a469656e51702263c2aa989976eb417f
f0e54788771931aa10bf059e9d913ad363d72168fe8120bde2f3a1e7d15b6bf6
f70fa01eb5a6c348013f7a582b7cb55cbb8334afc8a54c7621d206333b1d18e7

IP addresses

154[.]89[.]152[.]168:9200
154[.]89[.]152[.]151:9200
154[.]89[.]152[.]170:9200
115[.]42[.]60[.]97:61160
115[.]42[.]60[.]126:10086
92[.]246[.]87[.]48:5000
45[.]144[.]55[.]111:443
39[.]59[.]59[.]33:9004
23[.]27[.]143[.]210:19243
205[.]185[.]126[.]196
178[.]63[.]67[.]153
178[.]63[.]67[.]106
149[.]248[.]44[.]88
139[.]59[.]59[.]33
128[.]199[.]194[.]97
115[.]42[.]60[.]97
104[.]18[.]50[.]34
92[.]246[.]87[.]48
64[.]79[.]148[.]161
59[.]7[.]217[.]245
37[.]114[.]37[.]94
37[.]114[.]37[.]82

Domains

hxxps://pub-dc84e32afcfa417fa04d36454032549b[.]r2[.]dev
hxxp://kf[.]layuijs[.]top/Log[.]php?id=aHR0cHM6Ly82NC43OS4xhDguMTYx
hxxps://data-sugar-undefined-unsubscribe[.]trycloudflare[.]com
hxxp://commons-taylor-prayers-lunch[.]trycloudflare[.]com
Clearskyspark[.]top:9200
Deepcloudspark[.]top:9200
Greenhillmatrix[.]top:9200
Silentmountcode[.]top:9200
meomeoli[.]mooo[.]com
auto[.]c3pool[.]org
mooo[.]com

Commands

Figure 15: Decoded Commands

Recommendations for ThreatLocker Customers

ThreatLocker Detect EDR and Cyber Hero MDR

ThreatLocker Detect EDR can alert your organization to possible adversarial tactics, including installing remote access software, attempting to disable security services, deleting shadow copies, and performing data exfiltration. If you have Cyber Hero MDR, you'll hear from our analysts promptly.

Application Control

Application Allowlisting can block applications that are not explicitly permitted by ThreatLocker or learned during Learning Mode, such as unauthorized Remote Access applications. Additional explicit deny policies can be created to prevent the usage of high-risk applications or software, such as AnyDesk, Rclone, MSBuild, or PSExec. For applications that are high-risk, but are required for business processes, permit policies with Ringfencing™ can be utilized to restrict what resources applications can interact with, such as certain files & directories, internet access, the registry, or executing other applications.

Frequently asked questions

What is React2Shell (CVE-2025-55182)?
React2Shell is a critical remote code execution vulnerability in React server components that allows unauthenticated attackers to execute arbitrary commands on a vulnerable server using specially crafted HTTP POST requests.

Why is React2Shell considered a critical vulnerability?
React2Shell received a CVSS score of 10.0 because it allows anonymous, unauthenticated remote code execution. Successful exploitation gives attackers full control over the affected server without requiring credentials or user interaction.

How did attackers exploit React2Shell in the wild?
Threat actors exploited React2Shell by sending malicious HTTP POST requests to IIS servers running vulnerable React server components. This allowed them to execute commands directly under the IIS application pool user context.

Why did attackers initially run Linux commands on a Windows server?
The attackers assumed the compromised host was Linux based and attempted to execute common Linux binaries and shell scripts. When those failed, they pivoted to native Windows commands after realizing the target was a Windows IIS server.

What was the attackers’ ultimate objective after exploitation?
After gaining code execution, the attackers shifted toward deploying cryptomining malware, specifically the xmrig Monero miner, to steal compute resources and generate cryptocurrency through the C3pool mining network.

How did the attackers attempt to maintain persistence?
The attackers attempted to establish persistence by deploying AnyDesk remote access software and later by creating a PowerShell reverse shell when application execution was blocked.

What evasion techniques were observed in the cryptomining payloads?
Observed evasion techniques included in-memory execution, process name obfuscation, renaming tools like curl and wget, disabling host firewalls, killing competing miners, and hiding processes through Linux bind mount abuse in applicable environments.

Why did the attack ultimately fail on this system?
The attack failed because ThreatLocker Application Control enforced a default-deny policy, blocking execution of unauthorized binaries such as AnyDesk, xmrig, and external payloads retrieved from malicious domains.

What does this incident demonstrate about unpatched development servers?
This incident shows that unpatched development or staging servers are high-risk entry points. Once compromised, they can be used to pivot into production systems or deploy malware even if they are not internet-facing business applications.

How can organizations prevent React2Shell style exploitation?
Organizations should immediately patch vulnerable React versions, restrict execution on web servers using default-deny application control, limit outbound connectivity, and enforce least privilege for service accounts running web applications.

start Your path to stronger defenses

Get a trial

Try ThreatLocker free for 30 days and experience full Zero Trust protection in your own environment.

Book a demo

Schedule a customized demo and explore how ThreatLocker aligns with your security goals.

Ask an expert

Just starting to explore our platform? Find out what ThreatLocker is, how it works, and how it’s different.