
Epson Printer RAW Protocol Exploit Framework
Repository: https://github.com/J4ck3LSyN-Gen2/CVE-2026-39047
PoC Script: poc.py
Mock Target: mock_printer.py
Author: J4ck3LSyN
This framework demonstrates the CVE-2026-39047 vulnerability - a remote buffer overflow in Epson multifunction printers (notably the L14150 FL27PB) when processing malformed or oversized payloads over the RAW TCP printing protocol (typically port 9100).
Successful exploitation can lead to arbitrary code execution in the printer's embedded environment, enabling:
The PoC focuses on transport framing, payload obfuscation, fuzzing techniques, and staged post-exploitation behaviors suitable for red teaming, vulnerability research, and defensive testing.
[!WARNING]
- This tool can (and will) lead to remote code execution (RCE) on vulnerable printers.
- Unauthorized use, scanning, or exploitation of systems you do NOT own or have EXPLICIT WRITTEN PERMISSION to test is ILLEGAL and may violate computer fraud and abuse laws (e.g., CFAA in the US), data protection regulations, and organizational policies.
The author assumes NO LIABILITY for any damage, data loss, service disruption, or legal consequences resulting from the use or misuse of this code.- Use only in isolated lab environments with devices you control.
- Always obtain explicit authorization before any testing.
- The code includes dry-run and passive modes to aid safe analysis.
Responsible disclosure and ethical use are strongly encouraged.- Patch your devices promptly once vendor updates are available.
- Printers often sit on internal networks with high trust and limited monitoring, making them attractive attack surfaces.
References:
PRT2 protocol).mock_printer.py for safe local testing (crashes on oversized payloads).socket, asyncio, argparse, zlib, hashlib, etc.)Clone the repository:
git clone https://github.com/J4ck3LSyN-Gen2/CVE-2026-39047.git
cd CVE-2026-39047
Make scripts executable:
chmod +x poc.py mock_printer.py
(Optional) Test with mock printer in one terminal:
./mock_printer.py
./poc.py -t <TARGET_IP> [OPTIONS]
Examples:
Basic baseline test:
./poc.py -t 192.168.1.100
Fuzzing run:
./poc.py -t 192.168.1.100 --fuzz --techniques cyclic random
Staged hijack (lab only):
./poc.py -t 192.168.1.100 --hijack --objective shell --dry-run
Full campaign with mock target:
# Terminal 1
./mock_printer.py
# Terminal 2
./poc.py -t 127.0.0.1 --fuzz --hijack --objective stage1
bTransportFrame() wraps payloads with PRT2 header + length.lObf): zlib compression → dynamic XOR mask (seed-derived) → Base64.gModernPayload() and gPostPayload() for various patterns and staged commands.See inline docstrings and code comments for deeper details.
PRT2 framing patterns.This PoC is provided strictly for educational, research, and authorized security testing purposes. Misuse may result in severe consequences. The repository owner is not responsible for any damage caused.
| Option | Description |
|---|
-t, --target | Target IP address (required) |
-p, --port | Port (default: 9100) |
--passive | Passive recon mode (send probe payloads only) |
--fuzz | Enable multi-technique fuzzing |
--hijack | Enable post-exploitation staging |
--objective | stage1 | shell | beacon | persistence |
--callback | Optional callback identifier/string |
--capability | minimal | busybox | linux (affects command wrapping) |
--dry-run | Generate payloads but do not send |
--techniques | Space-separated list (e.g., cyclic format sled random) |
--delay | Delay between payloads in seconds (default: 1.6) |