Par Bhabesh Raj Rai, Associate Security Analytics Engineer
Le 26 janvier 2021, les Qualys Research Labs ont révélé une vulnérabilité de dépassement de mémoire tampon basé sur le tas (CVE-2021-3156) dans Sudo, qui, en cas d’exploitation réussie, permet à tout utilisateur local d’élever ses privilèges à ceux de root. Les sudoers, ainsi que les non-sudoers, peuvent exploiter cette vulnérabilité sans authentification afin d’obtenir les privilèges root.
La vulnérabilité CVE-2021-3156 est due à une mauvaise analyse des paramètres de ligne de commande et un attaquant peut l’exploiter via «sudoedit -s» et un argument de ligne de commande qui se termine par un seul caractère de type backslash. La faille a été introduite en juillet 2011 et affecte toutes les anciennes versions de 1.8.2 à 1.8.31p2 et toutes les versions stables de 1.9.0 à 1.9.5p1, dans leur configuration par défaut.
L’équipe de recherche de Qualys a pu vérifier indépendamment la vulnérabilité CVE-2021-3156 et développer plusieurs variantes d’exploit pour Ubuntu 20.04 (Sudo 1.8.31), Debian 10 (Sudo 1.8.27) et Fedora 33 (Sudo 1.9.2). Cependant, d’autres distributions peuvent également être vulnérables car Sudo est disponible dans presque toutes les principales versions de système d’exploitation Unix/Linux.
Même si la vulnérabilité a été corrigée en seulement 13 jours, de nombreux builds amont n’ont pas encore été corrigés, laissant ainsi un grand nombre de systèmes vulnérables. Pour aggraver la situation, plusieurs PoC sont désormais disponibles dans Github, ouvrant la porte à une exploitation facile par des acteurs malveillants peu expérimentés.
La vulnérabilité d’élévation de privilèges (CVE-2021-3156) dans Sudo a également affecté les produits LogPoint et le 29 janvier 2021, nous avons publié LogPoint v6.9.2 afin de corriger cette dernière. Nous recommandons donc à tous les utilisateurs de LogPoint de passer à la dernière version du produit.
Détection d’une tentative d’exploitation dans LogPoint
Vous pouvez facilement détecter la tentative d’exploitation de la faille Sudo via les logs auditd. Tout comme avec Sysmon, auditd nécessite des règles appropriées pour générer des artefacts d’intérêt. La configuration auditd de Florian Roth est suffisante dans notre cas.
Étant donné qu’une attaque par force brute est nécessaire pour déclencher la vulnérabilité CVE-2021-3156, les logs auditd seront alors submergés d’événements liés à sudoedit.
Vous pourrez créer des détections à l’aide de l’un des trois types d’événements générés par auditit : SYSCALL, EXECV et ANOM_ABEND.
Pour une détection basée sur EXECVE, il suffira de rechercher un afflux important de logs EXECVE pour sudoedit avec «\» et «-s» comme paramètres de ligne de commande.
norm_id=Unix "process"=Audit event_type=EXECVE
argument_0="/usr/bin/sudoedit"
(argument_1="\" OR argument_2="\" OR argument_3="\" OR argument_4="\" OR argument_5="\")
(argument_1="-s" OR argument_2="-s" OR argument_3="-s" OR argument_4="-s" OR argument_5="-s")
| chart count() as cnt by host
| search cnt > 50
La détection basée sur SYSCALL est également simple car il suffira de rechercher un afflux important de logs SYSCALL pour la commande sudoedit.
norm_id=Unix "process"=Audit
event_type=SYSCALL command=sudoedit path="/usr/bin/sudo"
| chart count() as cnt by host
| search cnt > 50
Dans certains cas, en cas d’échec de l’exploit, des logs de fin de processus anormale sont générés, permettant ainsi également de révéler une tentative d’exploitation.
norm_id=Unix "process"=Audit
label=Abnormal label="Process" label=Terminate
command="sudoedit" path="/usr/bin/sudo"
| chart count() as cnt by host
| search cnt > 50
Enfin, nous pouvons rechercher tous les appels de sudoedit avec une ligne de commande anormalement longue, pouvant ainsi révéler une tentative de déclenchement de la vulnérabilité de dépassement de tampon basé sur le tas. Les administrateurs peuvent ajuster la limite de la longueur de la ligne de commande afin de réduire les faux positifs.
norm_id=Unix "process"=Audit event_type=EXECVE
argument_0="/usr/bin/sudoedit"
| process eval("a1_len=len(argument_1)")
| process eval("a2_len=len(argument_2)")
| process eval("a3_len=len(argument_3)")
| process eval("a4_len=len(argument_4)")
| chart count() by host, a1_len, a2_len, a3_len, a4_len
| search (a1_len>100 OR a2_len > 100 OR a3_len>100 OR a4_len>100)
Patchez vos systèmes
Étant donné que les attaquants peuvent exploiter cette faille même dans la configuration par défaut, il est conseillé aux administrateurs système de corriger leurs systèmes dès que possible. Si l’installation du correctif n’est pas possible ou bien si le correctif n’a pas été publié pour la distribution Linux/Unix utilisée, nous vous recommandons de déployer des détections qui surveillent toute tentative d’exploitation.
Les acteurs malveillants peuvent utiliser la vulnérabilité Sudo (CVE-2021-3156) en conjonction avec d’autres méthodes d’attaque pour compromettre intégralement le système. Nous conseillons donc aux entreprises de lancer une action de réponse aux incidents si une tentative d’exploitation devait être détectée.