NukeViet CMS CVE-2026-55372
HIGHAttack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessSend POST index.php with __serverInfoUpdate=1
-
DeliverySpoof X-Forwarded-Host to internal target:port/
-
ExploitBypass standardizeHost port regex
-
Executionserver_info_update() cURL fetches attacker host
-
ImpactProbe internal hosts/ports and poison cached server_headers
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V4 - API and Web Service URL allowlisting, SSRF prevention
MITRE ATT&CK
2 techniques across 2 tactics: Initial Access, Credential Access The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires the __serverInfoUpdate feature path to be reachable - a POST to index.php with the field __serverInfoUpdate=1, which is handled early in includes/ini.php before authentication, so no credentials or user interaction are needed (CVSS PR:N/UI:N is consistent with this). The attacker must be able to set the X-Forwarded-Host (and optionally X-Forwarded-Proto/X-Forwarded-Port) request headers reaching the application; to bypass the port sanitiser the host value must append a trailing slash (e.g. host:port/). Limiting factors: exploitation is blocked if a trusted reverse proxy strips or overrides client-supplied X-Forwarded-* headers, or once the site is upgraded to 4.6.00 where the host is validated against my_domains. The sink is blind, HEAD-only and fixed-path, so the condition enables outbound request coercion and internal discovery but not arbitrary-path SSRF or metadata/credential theft. |
| Impact | The provided CVSS 3.1 vector CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N (7.2 High) reflects a genuinely low-friction reachability profile: network attack vector, low complexity, no privileges and no user interaction, which matches the pre-auth POST trigger described. However, the scope-changed / C:L / I:L rating is optimistic given the vendor's own impact analysis: the SSRF is blind, HEAD-only and fixed-path, so it cannot read internal responses, cannot reach cloud metadata endpoints (169.254.169.254), and cannot smuggle gopher/dict payloads - meaning real confidentiality/integrity impact is limited to internal port discovery and cache poisoning of response headers. No EPSS score, KEV entry, or POC beyond the advisory's own proof-of-concept is present in the supplied data, so this is not evidence of active exploitation. Net: a real, easily-triggered pre-auth issue worth patching, but the constrained sink keeps actual damage well below a typical unrestricted SSRF; treat as a prompt-but-not-emergency fix. Note that S:C plus only C:L/I:L is internally consistent with a limited-capability sink rather than full internal compromise. |
| Exploit ScenarioDerived | An attacker sends an unauthenticated POST to /index.php containing __serverInfoUpdate=1 with X-Forwarded-Proto: http and X-Forwarded-Host set to an internal target such as 10.0.0.5:6379/, causing the NukeViet server to issue a HEAD request to that host and letting the attacker map reachable internal hosts and ports via connection success/timing. The advisory includes a working PoC confirmed through out-of-band DNS and HTTP interaction on a collaborator endpoint, but the blind, fixed-path sink means no internal response content is returned to the attacker. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Jul 13, 2026
Server-side request forgery in NukeViet CMS before 4.6.00 lets a remote unauthenticated attacker coerce the server into issuing outbound HTTP requests to an arbitrary host by spoofing the X-Forwarded-Host and X-Forwarded-Proto headers, which flow unvalidated into the cURL URL built by server_info_update(). Because the __serverInfoUpdate=1 POST handler in includes/ini.php runs before authentication, no credentials are needed. The flaw is blind, HEAD-only and uses a fixed request path, so its practical value is internal host/port discovery and poisoning of the cached server_headers rather than data exfiltration; no public exploit beyond the advisory PoC is identified and it is not in CISA KEV.
RemediationAI
Vendor-released patch: upgrade NukeViet to 4.6.00 or later, which validates and normalises the forwarded values at the source - standardizeHost() now uses parse_url() to extract and lower-case the host (defeating the :port/ bypass), restricts X-Forwarded-Proto to an {http,https} allow-list falling back to the real server protocol, validates X-Forwarded-Port as an in-range numeric, checks the incoming host against my_domains before includes/ini.php is reached, and has server_info_update() re-validate its target against my_domains as defense in depth. See GHSA-4chg-4752-w88r for details. If you cannot upgrade immediately, configure the reverse proxy or web server to strip or override any client-supplied X-Forwarded-Host, X-Forwarded-Proto and X-Forwarded-Port headers so attackers cannot inject them, and ensure my_domains contains only the site's canonical domain(s); the trade-off is that legitimate proxy chains that rely on these headers must be explicitly set by a trusted front-end, and misconfiguration can break host/protocol detection behind a proxy.
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in composer
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
NukeViet is a PHP-based open-source CMS (distributed as the composer package nukeviet/nukeviet). The root cause is CWE-918 (SSRF) enabled by CWE-644/CWE-20: the NukeViet\Core\Server class derives original_host and original_protocol directly from client-supplied X-Forwarded-Host / X-Forwarded-Proto headers and exposes them via getOriginalHost()/getOriginalProtocol() without checking them against the site's configured my_domains. server_info_update() in includes/ini.php concatenates this tainted scheme and host into a cURL target (proto://host + NV_BASE_SITEURL + index.php?response_headers_detect=1). The sanitiser standardizeHost() only stripped a trailing port with the regex (\:[0-9]+)$, which is trivially bypassed by appending a slash (e.g. 127.0.0.1:8081/) so an arbitrary host:port survives into the request.
Know when PHP gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N
Pre-auth remote trigger with no interaction gives AV:N/AC:L/PR:N/UI:N; blind fixed-path sink yields only limited C:L (internal discovery) and I:L (header cache poisoning), and I keep S:U since impact stays within the vulnerable app.
Primary rating from GitHub Advisory.
CVSS VectorGitHub Advisory
DescriptionGitHub Advisory
Summary
An unauthenticated attacker can coerce the server into issuing HTTP requests to an attacker-chosen host by spoofing the X Forwarded-Host (and X-Forwarded-Proto) request headers. The forwarded host is used, without validation, to build the URL that server_info_update() fetches with cURL, resulting in a Server-Side Request Forgery (SSRF) that requires no authentication.
Affected component
- File:
includes/ini.php- functionserver_info_update()(cURL sink) - File:
vendor/vinades/nukeviet/Core/Server.php-standardizeHost()and the forwarded-header handling in the constructor (source of the tainted host) - Trigger:
POSTrequest containing the field__serverInfoUpdate=1, handled early inincludes/ini.phpbefore any authentication.
Details
NukeViet\Core\Server derives original_host / original_protocol from the X-Forwarded-Host / X-Forwarded-Proto headers and exposes them via getOriginalHost() / getOriginalProtocol(). These values are attacker-controlled and were not validated against the site's configured domains (my_domains).
In server_info_update() the tainted host and scheme are concatenated directly into a cURL URL:
$proto = $nv_Server->getOriginalProtocol(); // from X-Forwarded-Proto
$host = $nv_Server->getOriginalHost(); // from X-Forwarded-Host
$ch = curl_init($proto . '://' . $host . NV_BASE_SITEURL . 'index.php?response_headers_detect=1');
curl_exec($ch);Two factors made this reliably reachable:
- The
__serverInfoUpdatehandler runs very early inincludes/ini.php, before authentication, so the sink is reachable pre-auth. - The host sanitiser
standardizeHost()stripped a trailing port only with the regex(\:[0-9]+)$, which is bypassed by appending a slash (e.g.127.0.0.1:8081/): the string no longer ends in:digits, so the port survives and an arbitraryhost:portreaches the cURL call.
Proof of Concept
POST /index.php HTTP/1.1
Host: <victim>
X-Forwarded-Proto: http
X-Forwarded-Host: <attacker-controlled-host>:<port>/
Content-Type: application/x-www-form-urlencoded
Content-Length: 20
__serverInfoUpdate=1The server then issues a request to the attacker-supplied host, confirmed via an out-of-band interaction (DNS + HTTP) on a collaborator endpoint.
Impact
The SSRF is blind, HEAD-only, and uses a fixed request path (…/index.php?response_headers_detect=1):
- The fetched response is stored server-side in the
config_inicache and is not reflected to the attacker, so internal data cannot be exfiltrated directly. - Because the path is fixed and not attacker-controlled, cloud metadata endpoints (e.g.
169.254.169.254/latest/meta-data/...) cannot be reached, andgopher:///dict://request smuggling cannot inject arbitrary payloads.
What an attacker can do: unauthenticated internal host/port discovery (connection success/timing, with the port reachable through the regex bypass), and poisoning of the cached server_headers (the SSRF target's response headers are stored and applied to the site).
Severity
Rated High rather than Critical, because the blind + fixed-path + HEAD design of the sink prevents data exfiltration, cloud credential theft, and internal RCE.
- CVSS v3.1 Base Score: 7.2 (High)
- Vector:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N
Weakness
- Primary: CWE-918: Server-Side Request Forgery (SSRF)
- Contributing: CWE-20 (Improper Input Validation), CWE-644 (Improper Neutralization of HTTP Headers used by downstream components / trusting
X-Forwarded-*).
Remediation
Fixed by validating and normalising the forwarded values at the source and gating the request before the sink:
standardizeHost()now extracts the host withparse_url()(defeats the:port/bypass) and lower-cases it.X-Forwarded-Protois restricted to a{http, https}allow-list and falls back to the real server protocol otherwise.X-Forwarded-Portis validated as numeric and within range.- The incoming host is checked against
my_domainsbeforeincludes/ini.phpis reached; non-matching hosts are rejected/redirected, andserver_info_update()additionally re-validates its target host againstmy_domains(defense in depth).
Workaround
Configure the reverse proxy / web server to strip or override client-supplied X-Forwarded-Host, X-Forwarded-Proto, and X-Forwarded-Port headers, and ensure my_domains is configured with the site's canonical domain(s).
Executive ViewAI
NukeViet CMS versions before 4.6.00 contain an unauthenticated server-side request forgery (SSRF) vulnerability (no public exploit identified at time of analysis) that allows remote attackers to discover internal hosts, ports, and services without credentials. Organizations running this CMS risk unintended exposure of internal network topology and poisoning of cached server configuration, creating pathways for internal reconnaissance and enabling follow-on compromises.
No vendor-released patch identified at time of analysis. Interim mitigations: (1) Web Application Firewall to reject or sanitize X-Forwarded-Host and X-Forwarded-Proto headers at the ingress layer. (2) Network-level egress filtering to restrict outbound HTTP(S) from CMS servers to only necessary internal services, reducing information leakage scope. (3) Comprehensive monitoring and alerting on server_info_update() invocations and cURL outbound activity from the CMS process. (4) Disable the __serverInfoUpdate functionality if operationally unnecessary. (5) Deploy the CMS in a restricted network segment with minimal outbound egress permissions to contain potential reconnaissance and poisoning impact.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Server-Side Request Forgery exploits applications that fetch remote resources based on user-supplied URLs.
Affected Products (CPE)GitHub Advisory
In PHP versions 7.1.x below 7.1.33, 7.2.x below 7.2.24 and 7.3.x below 7.3.11 in certain configurations of FPM setup it
sapi/cgi/cgi_main.c in PHP before 5.3.12 and 5.4.x before 5.4.2, when configured as a CGI script (aka php-cgi), does not
(1) boardData102.php, (2) boardData103.php, (3) boardDataJP.php, (4) boardDataNA.php, and (5) boardDataWW.php in Netgear
The '/common/download_agent_installer.php' script in the Quest KACE System Management Appliance 8.0.318 is accessible by
ProjectSend versions prior to r1720 are affected by an improper authentication vulnerability. Rated critical severity (C
Roundcube Webmail contains a critical PHP object deserialization vulnerability (CVE-2025-49113, CVSS 9.9) that allows au
Util/PHP/eval-stdin.php in PHPUnit before 4.8.28 and 5.x before 5.6.3 allows remote attackers to execute arbitrary PHP c
Palo Alto Networks PAN-OS management web interface contains an authentication bypass allowing unauthenticated attackers
Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re
Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re
The get_referers function in /opt/ws/bin/sblistpack in Sophos Web Appliance before 3.7.9.1 and 3.8 before 3.8.1.1 allows
The Backup Migration plugin for WordPress is vulnerable to Remote Code Execution in all versions up to, and including, 1
GHSA-4chg-4752-w88r
NVD
CVE.org
Exploit-DB