Craft CMS 5.6.16 - RCE
PoC files
1 fileFile viewing is interactive and short-lived. Downloads are password-protected ZIP archives using password eip.
Analysis
Technical assessment
Python script that exploits CVE-2025-32432 in Craft CMS by poisoning a PHP session file and triggering a Yii deserialization gadget chain to achieve unauthenticated remote command execution.
Backdoor review
No backdoor observed in reviewed code
The provided Python script is a proof-of-concept exploit for CVE-2025-32432 targeting Craft CMS. It performs session poisoning and deserialization to achieve remote code execution as described. No backdoor, deceptive payload, or concealed operator-directed harm was observed. The script's behavior is consistent with its stated purpose.
Classification basis and observed behavior
Classification basis
The script actively executes a multi-step attack chain (session poisoning, deserialization trigger) to achieve arbitrary command execution on a remote target, which is the definition of an exploit.
exploits/multiple/webapps/52525.py:1exploits/multiple/webapps/52525.py:13-16exploits/multiple/webapps/52525.py:68-88exploits/multiple/webapps/52525.py:91-120Requirements
- Target running vulnerable Craft CMS version (<= 3.9.14, <= 4.14.14, <= 5.6.16)
exploits/multiple/webapps/52525.py:8 - Valid Asset ID on the target Craft CMS instance
exploits/multiple/webapps/52525.py:27-65 - Target must write PHP session files to /tmp/sess_<PHPSESSID>
exploits/multiple/webapps/52525.py:94
Observed behavior
- Obtains a PHP session ID from the target
exploits/multiple/webapps/52525.py:143-151 - Optionally brute-forces a valid Asset ID by sending deserialization payloads to /actions/assets/generate-transform
exploits/multiple/webapps/52525.py:37-65 - Poisons the PHP session file by sending a GET request with PHP code in a query parameter
exploits/multiple/webapps/52525.py:75-76 - Triggers deserialization via a crafted JSON payload to /actions/assets/generate-transform, causing PhpManager to include the poisoned session file and execute the injected command
exploits/multiple/webapps/52525.py:97-120 - Prints the server response, which may contain command output
exploits/multiple/webapps/52525.py:180-181
Behaviors behind the backdoor verdict
Observables
- Command Execution
- system('{cmd}')The script injects a user-supplied command into a PHP session file and triggers its execution via deserialization, which is the core exploit mechanism.
exploits/multiple/webapps/52525.py:75 - Network Request
- requests.get/requests.post to target base_urlAll network requests are directed solely at the user-specified target URL, with no external or unrelated endpoints contacted.
exploits/multiple/webapps/52525.py:38exploits/multiple/webapps/52525.py:76exploits/multiple/webapps/52525.py:97 - Session Handling
- PHPSESSID cookie extractionThe script obtains a session ID from the target to construct the path to the poisoned session file, a necessary step for the exploit.
exploits/multiple/webapps/52525.py:144-145
What the analysis did not establish
- Only the exploit script is analyzed; external libraries (requests, urllib3) and their behavior are not inspected.
- The script's effectiveness depends on server-side conditions (session file path, asset ID existence) that are not verified in the evidence.
- No network traffic or execution output is captured; analysis is based solely on static code review.
- The review is limited to the provided Python script text. No external dependencies (e.g., the 'requests' library) were analyzed.
- The script's behavior depends on the target environment; no runtime analysis 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.