
Devoir universitaire documentant CVE-2020-8597, un dépassement de tampon sur la pile dans l'analyseur EAP de pppd, avec une démonstration d'exploitation d'exécution de code à distance utilisant une configuration serveur et client pppoe.
Sri Lanka Institute of Information Technology
Travail 1
M. P. D. M. Dias
IT19165530
MLB_WD_Y2S1_13.1
Point to Point Protocol Daemon RCE
Vulnérabilité (CVE-2020-8597)
Programmation Systèmes et Réseaux– IE2012
Table des matières
Introduction
Le protocole Point-to-Point (PPP) est un protocole full-duplex qui permet d'encapsuler et de distribuer des données simples via une infrastructure de couche 2 ou de liaison de données allant de la connectivité par modem commuté à la large bande DSL en passant par les réseaux privés virtuels (VPN) intégrant le chiffrement SSL. Comme ces protocoles ne permettent pas les communications point à point, PPP est également utilisé pour imposer IP et TCP entre deux nœuds directement connectés. Pppd est un démon utilisé sur les systèmes d'exploitation de type Unix pour gérer l'établissement de sessions PPP et la terminaison de sessions entre deux nœuds.
PPP est le protocole utilisé pour créer des connexions Internet via des modems commutés, des connexions DSL et plusieurs autres formes de connexions point à point via des réseaux privés virtuels (VPN), tels que le protocole PPTP (Peer to Point Tunneling Protocol). Le programme pppd peut également authentifier un pair se connectant au réseau et/ou fournir au pair des détails d'authentification en utilisant divers protocoles d'authentification comme EAP.
En raison d'une faille dans le traitement par le démon du protocole Point-to-Point (pppd) des paquets du protocole d'authentification extensible (EAP), un attaquant distant non authentifié peut provoquer un débordement de tampon de pile qui peut permettre l'exécution arbitraire de code sur le système cible. Cette faiblesse est déclenchée par une erreur dans la validation de la taille d'entrée avant de copier les données fournies en mémoire. Étant donné que la validité de la taille des données est erronée, des données aléatoires peuvent être copiées en mémoire, ce qui peut entraîner une fuite de fichier contribuant à une exécution de code non intentionnelle.
La faiblesse réside dans la logique du code d'analyse EAP, spécifiquement dans les fonctions eap request() et eap response() dans eap.c qu'un gestionnaire d'entrée réseau appelle. Ces fonctions, utilisant le premier octet comme type, prennent un pointeur et une longueur en entrée. Si le type est EAPT MD5CHAP(4), alors elle examine une zone intégrée de longueur d'1 octet. La logique de ce code vise à s'assurer que la durée intégrée est inférieure à la longueur totale du paquet. Après cette vérification, elle tente de copier les données fournies (nom d'hôte), qui sont situées dans un tampon de pile local après le champ de longueur intégré. Cette vérification des limites est incorrecte et permet la copie en mémoire avec une longueur de données arbitraire.
Une erreur logique supplémentaire fait que la fonction eap input() ne vérifie pas si EAP a été résolu pendant le processus du protocole de contrôle de liaison (LCP). Cela permet à un attaquant non authentifié d'envoyer un paquet EAP même si ppp a refusé de négocier l'authentification en raison d'un manque de support pour EAP ou d'une non-conformité avec une phrase de passe pré-partagée convenue lors de la phase LCP. Dans eap input, le code pppd non sécurisé doit toujours traiter le paquet EAP et provoquer le débordement du tampon de pile. Ces données non vérifiées et de taille inconnue peuvent être utilisées pour compromettre la mémoire du périphérique cible. Le pppd s'exécute également avec des privilèges élevés (système ou root) et fonctionne en tandem avec les pilotes du noyau.
Le programme pppd est également utilisé avec le projet LWIP (lightweight IP) pour fournir une capacité pppd aux petits ordinateurs. L'installation et les installations lwIP par défaut ne sont pas sensibles à ce débordement de tampon. Cependant, si le code source lwIP est utilisé et modifié explicitement pour permettre EAP au moment de la compilation, le programme peut être sensible au débordement de tampon.
CVE-2020-8597 est un bogue de débordement de tampon dans pppd dû à un défaut conceptuel dans le processeur de paquets du protocole d'authentification extensible (EAP). Un attaquant distant non autorisé qui envoie un paquet EAP spécialement conçu à un client ou un serveur PPP vulnérable peut provoquer une condition de déni de service ou une exécution de code arbitraire. Comme pppd fonctionne en tandem avec les pilotes du noyau et dispose de privilèges élevés, tels que périphérique ou même noyau, toute exécution de code peut également être effectuée avec les mêmes privilèges.
Référence sur qui a trouvé la vulnérabilité
Découverte par Ilja Van Sprundel, chercheur en sécurité chez IOActive, le problème crucial est une faille de débordement de tampon de pile qui se produit en raison d'une erreur logique dans l'analyseur du module du protocole d'authentification extensible (EAP) des applications pppd, une amélioration qui offre un support pour des méthodes d'authentification supplémentaires dans les connexions PPP.
La faiblesse, suivie sous le nom de CVE-2020-8597 avec un score CVSS de 9,8, peut être exploitée par des attaquants non authentifiés pour exécuter à distance du code arbitraire sur les appareils affectés et en prendre le contrôle total.
Comment elle a été trouvée
Cette faiblesse est attribuée à une erreur dans la validation de la taille de l'entrée avant de transférer les données en mémoire. Parce que la validation de la taille des données est erronée, des données aléatoires peuvent être copiées en mémoire et peuvent déclencher une fragmentation de base de données, contribuant probablement à l'exécution de code non autorisé.
La vulnérabilité se trouve dans la logique du code d'analyse EAP, spécifiquement dans les fonctions eap request() et eap response() dans eap.c, qui sont appelées par le gestionnaire d'entrée réseau.
Il est erroné de conclure que pppd n'est pas non sécurisé si EAP n'est pas autorisé ou si EAP n'a pas été initié par un pair distant utilisant un mot de passe ou une phrase de passe. En effet, un intrus authentifié peut toujours être en mesure de soumettre un paquet EAP non sollicité pour provoquer un débordement de tampon.
La vulnérabilité a été identifiée dans le démon du protocole Point-to-Point (PPP), ou pppd. PPP est un protocole de couche 2 utilisé pour établir des connexions via des modems commutés, des connexions DSL et de nombreux autres réseaux physiques, y compris les réseaux mobiles. PPP a été inclus et étendu pour inclure des protocoles supplémentaires, tels que le protocole de tunnellisation point à point (PPTP) utilisé dans les réseaux privés virtuels (VPN) pour fournir des connexions chiffrées.