
# Framework d'exploitation du protocole RAW des imprimantes Epson
Dépôt : https://github.com/J4ck3LSyN-Gen2/CVE-2026-39047
Script PoC : poc.py
Cible simulée : mock_printer.py
Auteur : J4ck3LSyN
Ce framework démontre la vulnérabilité CVE-2026-39047 - un débordement de tampon à distance dans les imprimantes multifonctions Epson (notamment la L14150 FL27PB) lors du traitement de charges utiles malformées ou surdimensionnées via le protocole d'impression RAW TCP (généralement le port 9100).
Une exploitation réussie peut conduire à l'exécution de code arbitraire dans l'environnement embarqué de l'imprimante, permettant :
Le PoC se concentre sur le cadrage du transport, l'obscurcissement de la charge utile, les techniques de fuzzing et les comportements de post-exploitation par étapes adaptés aux tests d'intrusion, à la recherche de vulnérabilités et aux tests défensifs.
[!WARNING]
- Cet outil peut (et va) mener à l'exécution de code à distance (RCE) sur des imprimantes vulnérables.
- L'utilisation non autorisée, le scan ou l'exploitation de 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 les lois sur la fraude et les abus informatiques (par exemple, CFAA aux États-Unis), les règlements sur la protection des données et les politiques organisationnelles.
L'auteur décline TOUTE RESPONSABILITÉ pour tout dommage, perte de données, interruption de service ou conséquences juridiques résultant de l'utilisation ou du mauvais usage de ce code.- Utilisez uniquement dans des environnements de laboratoire isolés avec des périphériques que vous contrôlez.
- Obtenez toujours une autorisation explicite avant tout test.
- Le code inclut des modes dry-run et passif pour faciliter une analyse sûre.
La divulgation responsable et l'utilisation éthique sont fortement encouragées.- Appliquez rapidement les mises à jour du firmware dès qu'elles sont disponibles.
- Les imprimantes se trouvent souvent sur des réseaux internes avec un haut niveau de confiance et une surveillance limitée, ce qui en fait des surfaces d'attaque attrayantes.
Références :
PRT2).mock_printer.py pour des tests locaux sécurisés (plante sur les charges utiles surdimensionnées).socket, asyncio, argparse, zlib, hashlib, etc.)Clonez le dépôt :
git clone https://github.com/J4ck3LSyN-Gen2/CVE-2026-39047.git
cd CVE-2026-39047
Rendez les scripts exécutables :
chmod +x poc.py mock_printer.py
(Facultatif) Testez avec l'imprimante simulée dans un terminal :
./mock_printer.py
./poc.py -t <TARGET_IP> [OPTIONS]
Exemples :
Test de base :
./poc.py -t 192.168.1.100
Exécution de fuzzing :
./poc.py -t 192.168.1.100 --fuzz --techniques cyclic random
Détournement par étapes (lab uniquement) :
./poc.py -t 192.168.1.100 --hijack --objective shell --dry-run
Campagne complète avec cible simulée :
# Terminal 1
./mock_printer.py
# Terminal 2
./poc.py -t 127.0.0.1 --fuzz --hijack --objective stage1
bTransportFrame() encapsule les charges utiles avec un en-tête PRT2 + longueur.lObf) : Compression zlib → masque XOR dynamique (dérivé d'une graine) → Base64.gModernPayload() et gPostPayload() pour divers motifs et commandes par étapes.Consultez les docstrings et les commentaires du code pour plus de détails.
PRT2.Ce PoC est fourni strictement à des fins éducatives, de recherche et de tests de sécurité autorisés. Une utilisation abusive peut entraîner de graves conséquences. Le propriétaire du dépôt n'est pas responsable des dommages causés.
| Option | Description |
|---|
-t, --target | Adresse IP cible (obligatoire) |
-p, --port | Port (par défaut : 9100) |
--passive | Mode de reconnaissance passive (envoi de charges utiles de sonde uniquement) |
--fuzz | Activer le fuzzing multi-technique |
--hijack | Activer la mise en place de post-exploitation |
--objective | stage1 | shell | beacon | persistence |
--callback | Identifiant/chaîne de callback optionnel |
--capability | minimal | busybox | linux (affecte l'encapsulation des commandes) |
--dry-run | Générer les charges utiles mais ne pas les envoyer |
--techniques | Liste séparée par des espaces (ex. cyclic format sled random) |
--delay | Délai entre les charges utiles en secondes (par défaut : 1.6) |