Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
DirtyPipe-Exploit — Preuve de concept pour CVE-2022-0847 | Kitploit
Outils/GitHubGitHub/karanlvm/dirtypipe-exploit
Escalade de PrivilègesAnalyse des VulnérabilitésExploitationArticles et RechercheApprentissage et ÉducationExploitation de Binaires
GitHubkaranlvm/dirtypipe-exploit

DirtyPipe-Exploit

Preuve de concept pour CVE-2022-0847

Voir le dépôt
21il y a 10 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CSE 5380: Information Security Paper CVE-2022-0847 (Dirty Pipe)

Par

Karan Vasudevamurthy (UTA ID: 1002164438)

Qu'est-ce que CVE ?

Common Vulnerabilities and Exposures (CVE) est une liste de vulnérabilités et d'expositions de sécurité de l'information divulguées publiquement. La société MITRE a introduit CVE en 1999 pour identifier et classer les vulnérabilités dans les logiciels et les firmwares. MITRE est une organisation à but non lucratif qui gère des centres de recherche et de développement financés par le gouvernement fédéral aux États-Unis. CVE vise à faciliter le partage d'informations sur les vulnérabilités connues afin que les plans de cybersécurité puissent être mis à jour pour refléter les problèmes et faiblesses de sécurité les plus récents. Pour ce faire, CVE attribue un identifiant unique à chaque vulnérabilité ou exposition. Grâce aux identifiants CVE, également connus sous le nom de noms CVE ou de numéros CVE. Le Common Vulnerability Scoring System (CVSS) est un ensemble de normes ouvertes permettant d'attribuer un numéro à une vulnérabilité pour évaluer sa gravité. Un score CVSS se situe entre 0.0 et 10.0. Le degré de gravité de sécurité augmente avec le nombre. Chaque identifiant CVE est formaté comme CVE-YYYY-NNNNN. La partie YYYY correspond à l'année d'attribution de l'identifiant CVE ou à l'année de divulgation publique de la vulnérabilité.

Que sont les pipes ?

Dans le contexte de CVE-2022-0847, il est crucial de comprendre le fonctionnement interne des pipes, en particulier les attributs associés au tampon de pipe. Les pipes sous Linux aident à transférer des données entre processus, la sortie d'un processus devenant l'entrée d'un autre. Ce mécanisme facilite la communication et la coordination entre différents processus exécutés sur le système. Les pipes sont unidirectionnelles sous Linux, ce qui signifie que les données ne circulent que dans un seul sens. Un tampon de pipe se compose généralement d'une structure de données de taille fixe, premier entré, premier sorti (FIFO), qui contient temporairement les données transférées entre les processus. Lorsqu'un processus écrit des données dans une pipe, celles-ci sont stockées dans le tampon jusqu'à ce qu'un autre processus les lise. Une fois les données lues, elles sont retirées du tampon, ce qui permet d'écrire de nouvelles données.

La vulnérabilité

Pour CVE-2022-0847, il est important de comprendre deux fonctions au sein du tampon de pipe-

  1. copy_page_to_iter_pipe: Cette fonction est chargée de copier les données d'une page vers un itérateur associé à un tampon de pipe. Dans le contexte de la communication inter-processus via les pipes, lorsqu'un processus écrit des données dans une pipe, celles-ci doivent être copiées dans le tampon de pipe afin d'être lues par un autre processus. La fonction « copy_page_to_iter_pipe » facilite ce processus de copie, garantissant que les données sont transférées correctement et efficacement entre les processus. Au sein de cette fonction, le paramètre « flags » est utilisé pour spécifier ou contrôler certains attributs ou comportements liés au processus de copie. Ces indicateurs peuvent inclure des options telles que l'exécution de contrôles ou de validations supplémentaires, la gestion de types de données spécifiques, ou l'application d'optimisations pour l'efficacité.
  2. push_pipe: La fonction « push_pipe » est impliquée dans l'insertion de données dans le tampon de pipe. Lorsqu'un processus écrit des données dans une pipe, les données doivent être insérées dans le tampon de pipe, où elles peuvent ensuite être lues par un autre processus. La fonction « push_pipe » est chargée de gérer ce processus d'insertion, en veillant à ce que les données soient correctement placées dans le tampon et rendues disponibles pour la lecture par d'autres processus.

Page | 1

Max Kellermann a découvert que le noyau Linux gérait incorrectement les pipes Unix. La vulnérabilité provient d'une initialisation inadéquate de certains attributs, en particulier du paramètre « flags », au sein des fonctions « copy_page_to_iter_pipe » et « push_pipe ». Cette négligence conduit à la possibilité que des valeurs obsolètes ou incorrectes soient attribuées aux flags, compromettant potentiellement la sécurité et l'intégrité du système. Un utilisateur local non privilégié pourrait utiliser cette faille pour écrire dans des pages du cache de pages adossées à des fichiers en lecture seule et, ainsi, élever ses privilèges sur le système.

Méthodologie d'attaque

Elle est similaire à CVE-2016-5195 « Dirty Cow », mais plus facile à exploiter. L'exploitation de CVE-2022-0847 nécessite un accès local au système cible et affecte les versions du noyau Linux plus récentes que 5.8. Nous pouvons créer de nouveaux tampons de pipe avec l'indicateur PIPE_BUF_FLAG_CAN_MERGE incorrectement défini en raison du manque d'initialisation appropriée. Cet indicateur contrôle la coalescence des écritures dans un tampon de pipe et permet ainsi d'écrire dans une page existante insérée (spliced) dans la pipe. Si un fichier autorise cette page insérée, la modification sera visible dans la vue système partagée du fichier en mémoire. Toute invalidation ultérieure du cache ignorera les paramètres de permissions Linux actuels et copiera les données modifiées sur le disque. Cela permettrait à un utilisateur non privilégié de modifier des contenus spécifiques d'un fichier (sur disque ou en mémoire), même si le fichier n'est protégé contre la modification que par des contrôles d'accès en lecture seule comme SELinux, les permissions Linux standard, le contrôle d'accès avancé et les fichiers immuables. Nous pouvons donc supposer que l'attaquant serait tout utilisateur local non privilégié ayant des connaissances de base des systèmes Linux et la capacité d'exécuter du code malveillant. Une telle personne pourrait élever ses privilèges et potentiellement compromettre l'ensemble du système, posant ainsi un risque de sécurité important.

Preuve de concept

Vous trouverez ci-dessous les étapes que j'ai suivies pour exploiter CVE-2022-0847 sur une machine virtuelle exécutant Linux.

  1. Vérifier si votre distribution Linux peut être exploitée -

    Toute version du noyau Linux plus récente que 5.8 est affectée. Cependant, les versions 5.16.11, 5.15.25 et 5.10.102 ne peuvent pas être exploitées pour CVE-2022-0847. Pour connaître la version de votre noyau, nous pouvons simplement exécuter *uname -r*. Vous pouvez également exécuter ceci script bash si vous n'êtes pas sûr qu'un système cible est vulnérable ou non.

  2. Télécharger le bon noyau Linux -

    Pour la démonstration, j'ai décidé d'utiliser Ubuntu 20.04.1 LTS. Mais cette version d'Ubuntu fonctionne actuellement avec le noyau Linux 5.15 et CVE-2022-0847 ne peut pas être exploitée sur cette version du noyau. Pour télécharger le noyau Linux 5.8, nous pouvons simplement exécuter *sudo apt install linux-image-5.8.0-63-generic linux-headers-5.8.0-63-generic*

  3. Télécharger l'exploit -

    L'exploit peut être trouvé sur GitHub. Il démontre comment écraser n'importe quel contenu de fichier dans le cache de pages, même si le fichier n'est pas autorisé en écriture, est immuable ou se trouve sur un point de montage en lecture seule. Vous pouvez également exécuter *git clone[ https://github.com/karanlvm/Infosec.git* ](https://github.com/karanlvm/Infosec.git%60)*dans le terminal.

  4. Copier le fichier passwd d'origine -

    Nous pouvons exécuter *cp /etc/passwd /tmp/passwd.bak*. Cela nous aidera à identifier la différence dans le fichier passwd avant et après l'exécution de l'exploit.

  5. Compiler l'exploit -

    Pour compiler l'exploit avec succès, vous aurez besoin d'avoir GCC installé. Vous pouvez installer GCC avec . Pour compiler l'exploit, vous pouvez exécuter

Limitations

Il existe deux limitations majeures à cet exploit :

  1. L'offset ne peut pas se trouver sur une limite de page (il doit écrire au moins un octet avant l'offset)
  2. L'écriture ne peut pas franchir une limite de page. Cela signifie que la charge utile doit être inférieure à 4096 octets (taille de page).

Statut actuel et remédiation

En date du 2024-01-12, la probabilité d'une activité d'exploitation au cours des 30 prochains jours est de 7.58 % (Exploit prediction scoring system (EPSS)). Vous trouverez ci-dessous le CVSS (Common Vulnerability Scoring System) pour CVE-2022-0487 :

Cette vulnérabilité peut être exploitée sur tout noyau Linux plus récent que 5.8. Cependant, la vulnérabilité a été corrigée dans Linux 5.16.11, 5.15.25 et 5.10.102. Par conséquent, nous pouvons simplement appliquer les correctifs ou les mises à jour fournis par les mainteneurs des distributions Linux pour corriger la vulnérabilité. Pour ce faire, nous pouvons simplement exécuter les commandes suivantes *sudo apt update* et *sudo apt upgrade*.

Références

  1. “2022-0847: A Flaw Was Found in the Way the ‘Flags’ Member of the New Pipe Buffer Structure Was Lacking Proper Initialization in Cop.” CVE Details, www.cvedetails.com/cve/CVE-2022-0847/. Consulté le 24 avr. 2024.
  2. Kellermann, Max. “The Dirty Pipe Vulnerability.” The Dirty Pipe Vulnerability - The Dirty Pipe Vulnerability Documentation, 7 mars 2022, dirtypipe.cm4all.com/.
  3. MITRE Corporation*. “CVE-2022-0847.”* CVE, 3 mars 2022, cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-0847.
  4. National Institute of Standards and Technology.” CVE-2022-0847.” NVD, 3 oct. 2022, nvd.nist.gov/vuln/detail/cve-2022-0847.
  5. “Piping in Unix or Linux.” GeeksforGeeks, GeeksforGeeks, 5 juillet 2023, www.geeksforgeeks.org/piping-in-unix-or-linux/. Page | 5
Télécharger l’outil
*sudo apt-get install gcc*
*gcc exp.c -o exp*
  • Exécuter l'exploit -

    Pour exécuter l'exploit, les paramètres à fournir sont le fichier en lecture seule, l'offset et quelques caractères qui vont être insérés. Dans ce cas, nous exécuterons *./exp /etc/passwd 1 ootz:* . Si vous obtenez une sortie qui dit « It worked ! », cela signifie que nous avons réussi à exploiter la vulnérabilité Dirty Pipe et que nous pouvons maintenant obtenir un accès root sans le mot de passe.

  • Passer à l'accès root -

    Nous pouvons maintenant simplement exécuter *su rootz* et nous devrions avoir un accès root. Pour confirmer, nous pouvons exécuter la commande id.