
Preuve de concept pour CVE-2026-43494 (PinTheft) : escalade de privilèges locale dans le noyau Linux exploitant un bug de comptage de références de zerocopy RDS avec des tampons fixes io_uring pour écraser le cache de pages binaires SUID.
Preuve de concept — uid=1000(raken) → uid=0(root) après ./sley sur WSL2 (6.6.87.2-microsoft-standard-WSL2)
Fichier unique de preuve de concept pour CVE-2026-43494 (PinTheft) : une escalade de privilèges locale du noyau Linux qui enchaîne un bug de comptage de références RDS zerocopy avec des tampons fixes io_uring pour écraser le cache de pages d'un binaire SUID root.
Avertissement : Ce dépôt est destiné uniquement à la recherche en sécurité autorisée, l'éducation et les tests défensifs. L'exécuter sur des systèmes que vous ne possédez pas ou sans autorisation explicite est illégal et contraire à l'éthique. Les auteurs déclinent toute responsabilité en cas d'utilisation abusive.
Les recherches publiques originales et le PoC ont été publiés par l'équipe V12 Security (Aaron Esau). SLEY est une réimplémentation indépendante et compacte avec une interface terminal stylisée pour une utilisation en laboratoire et l'apprentissage.
flowchart LR
A[mmap anonymous page] --> B[io_uring: register fixed buffer]
B --> C[Clone buffer table to 2nd ring]
C --> D[1024× failing RDS zerocopy sends]
D --> E[Drain FOLL_PIN bias / steal refs]
E --> F[munmap → page freed]
F --> G[SUID binary page reclaimed in page cache]
G --> H[Stale io_uring ptr writes ELF stub]
H --> I[exec SUID → root shell]su, mount, passwd, …).FOLL_PIN ≈ 1024).execve du binaire SUID exécute le stub injecté en tant que root.CONFIG_RDS=y et CONFIG_RDS_TCP=yCONFIG_IO_URING=y et kernel.io_uring_disabled = 0rds / rds_tcp chargés (ou chargeables automatiquement par des utilisateurs non privilégiés)IORING_REGISTER_CLONE_BUFFERS utilisée par la chaîne publiquesudo apt install build-essential linux-libc-dev # Debian/Ubuntu
# or equivalent headers package on your distro
# Patched? (example — adjust for your distro)
uname -r
grep -r CVE-2026-43494 /usr/share/doc/linux* 2>/dev/null || true
# RDS available?
grep CONFIG_RDS /boot/config-$(uname -r) 2>/dev/null
lsmod | grep -E '^rds'
# io_uring enabled?
cat /proc/sys/kernel/io_uring_disabled # expect 0
gcc -O2 -Wall -Wextra -o sley sley.c
Liaison statique (optionnel, pour des images de laboratoire minimales) :
gcc -O2 -static -o sley sley.c
./sley
Toute la sortie de statut va vers stderr (interface ANSI 256 couleurs, barre de progression, journalisation par phases). Assurez-vous que votre terminal supporte UTF-8 et truecolor/256 couleurs pour l'interface graphique en boîte.
Exemples de phases :
PHASE 1 │ Reconnaissance
PHASE 2 │ Configuration mémoire & io_uring
PHASE 3 │ Vol de référence d'épinglage (zerocopy RDS)
PHASE 4 │ Écrasement du cache de pages & escalade
Sur une configuration exploitée avec succès, la chaîne se termine et cède la main au binaire SUID découvert avec une première page écrasée — donnant un shell root si la condition de concurrence et l'état du noyau s'alignent.
Sur des noyaux patchés, des hôtes durcis, ou en l'absence de RDS/io_uring, le PoC échouera tôt (pas de cible SUID, erreurs mmap/io_uring/socket, etc.).
Les avis de sécurité spécifiques aux distributions peuvent fournir des correctifs rétroportés — suivez la file d'attente de sécurité du noyau de votre fournisseur.
.
├── README.md # Ce fichier
├── proof-of-concept.jpg # Capture d'écran : LPE réussi (uid 1000 → root)
├── sley.c # PoC fichier unique + interface terminal
└── .gitignore
Ce logiciel est fourni en l'état pour la recherche et l'éducation. Vous êtes responsable du respect des lois applicables et de l'obtention d'une autorisation écrite avant de tester tout système que vous ne possédez pas.
MIT — voir le fichier de licence du dépôt si ajouté. Utilisez de manière responsable.
| Élément | Détail |
|---|
| CVE | CVE-2026-43494 |
| Nom public | PinTheft |
| Composant | net/rds — chemin d'envoi zerocopy (rds_message_zcopy_from_user) |
| Primitive | Double put_page() quand l'épinglage de page échoue → voler les références FOLL_PIN |
| Armement | Tampon fixe io_uring + zerocopy RDS échoué → écriture UAF dans le cache de pages |
| Impact | Root local sur configurations vulnérables |
| Correctif amont | e17492979319 |
| Action | Notes |
|---|
| Patching du noyau | Appliquer le correctif stable contenant le commit e17492979319 |
| Désactiver RDS | modprobe -r rds_tcp rds (et bloquer le chargement automatique) si non nécessaire |
| Restreindre io_uring | kernel.io_uring_disabled=1 ou 2 via sysctl |
| Moindre privilège | Supprimer les binaires SUID inutiles ; utiliser des conteneurs avec profils durcis |
| Surveillance | Alerter en cas de rafales d'échecs de zerocopy RDS + motifs d'enregistrement de tampons io_uring |