
Défi CTF déployant l'exploit CVE-2022-0847 (Dirty Pipe) pour écraser des fichiers en lecture seule. Inclut des scripts de configuration, des indices et une vérification pour la pratique d'exploitation du noyau.
Pour ce défi, vous voulez écraser le fichier en lecture seule cat.txt en utilisant l'exploit CVE-2022-0847.
Il existe plusieurs façons de le faire avec l'exploit.
Vérifiez que le fichier cat.txt est un fichier en lecture seule.
Les limitations sont les suivantes : l'attaquant doit avoir les permissions de lecture (car il doit appeler splice() sur une page dans un pipe) le décalage (offset) ne doit pas être sur une limite de page (car au moins un octet de cette page doit avoir été splice() dans le pipe) l'écriture ne doit pas traverser une limite de page (car un nouveau tampon anonyme serait créé pour le reste) le fichier ne peut pas être redimensionné (car le pipe a sa propre gestion de remplissage de page et ne communique pas à la page cache la quantité de données ajoutée)
Créez un pipe.
Remplissez le pipe avec des données arbitraires (pour définir le flag PIPE_BUF_FLAG_CAN_MERGE dans toutes les entrées de l'anneau).
Videz le pipe (en laissant le flag activé dans toutes les instances struct pipe_buffer sur l'anneau struct pipe_inode_info).
Splicez les données du fichier cible (ouvert avec O_RDONLY) dans le pipe juste avant le décalage cible.
Écrivez des données arbitraires dans le pipe ; ces données écraseront la page du fichier mise en cache au lieu de créer une nouvelle struct pipe_buffer anonyme, car PIPE_BUF_FLAG_CAN_MERGE est activé.
Écraser le fichier cat.txt, changer
I'm a cat
1444
en
I'm a dog
2025
Utilisez check_cat.sh pour vérifier si cela fonctionne ou non. chmod +x check_cat.sh ./check_cat.sh
Utilisez la commande suivante : chmod +x cat_generate.sh ./cat_generate.sh
Les indices se trouvent dans hints.txt.