MEDIUMCVSS 6.8Vulnerability

CVE-2026-96629

### Summary AdminNeo's CSRF protection uses a BREACH-resistant XOR masking scheme, but the implementation transmits both the XOR mask and the masked value in every token. This allows any observer who sees a single CSRF token (via network sniffing, log files, Referrer header, or XSS) to instantly recover the session secret and forge unlimited valid CSRF tokens. Additionally, the underlying session token has only ~20 bits of entropy (`rand(1, 1e6)`), making blind brute-force feasible even without token observation. Originally reported by @az0mb13 in Adminer: [GHSA-q4f2-39gr-45jh](https://github.com/vrana/adminer/security/advisories/GHSA-33j4-hc95-pggg) ### Details Token generation in `admin/include/functions.inc.php` lines 1181-1184: ```php function get_token() { $rand = rand(1, 1e6); return ($rand ^ $_SESSION["token"]) . ":$rand"; } ``` Token verification in lines 1189-1192: ```php function verify_token() { list($token, $rand) = explode(":", $_POST["token"]); return ($rand ^ $_SESSION["token"]) == $token; } ``` Session token initialized in `admin/include/auth.inc.php` lines 327 and 385: ```php $_SESSION["token"] = rand(1, 1e6); ``` **Three distinct weaknesses:** 1. **Instant recovery:** The token format `(rand XOR secret):rand` transmits both operands. Recovery is trivial: `secret = masked_value XOR rand`. 2. **Low entropy**: Only 1,000,000 possible session tokens (~20 bits). Blind brute-force requires at most 1M requests. 3. **Loose comparison**: `verify_token()` uses `==` (loose comparison) instead of `===`, enabling PHP type juggling. ### PoC **Validated against a live AdminNeo 5.5.0 instance (MySQL 8.0, PHP 8.2).** **Step 1: Observe a single CSRF token** Load any authenticated AdminNeo page and extract a token from the HTML source. Tokens appear in hidden form fields: ```html <input type='hidden' name='token' value='222277:990527'> ``` Token observation vectors: Referrer header leak, shared proxy logs, browser history, limited XSS, network snif

Properties

Severity
medium
Summary
AdminNeo: CSRF Token Secret Recoverable from Single Observed Token, Enabling Cross-Site Request Forgery
Cvss score
6.8
Retrieved at
2026-10-31T00:14:10+00:00
Ghsa published
2026-10-30T22:51:29Z
Source url
https://github.com/advisories/GHSA-wm25-49w3-5qrg
Ghsa updated
2026-10-30T22:51:31Z
Ghsa id
GHSA-wm25-49w3-5qrg
Last source
GitHub Advisory Database
Cve id
CVE-2026-96629
Cvss vector
CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:N/I:H/A:H
First seen by Signal
2026-10-31T00:14:10+00:00
Is ghsa only
false

Related Entities (4)

AFFECTS (1)

VULNERABLE_TO (1)

Explore deeper with Ninja Signal's threat intelligence graph

CVE-2026-96629 (CVSS 6.8) — Ninja Signal Threat Intelligence | Ninja Signal