CVE-2026-100698: Adminer before 6.0.2 Privileged-Port SSRF via host_port Regex
Adminer 5.5.1 through 6.0.1 improperly parses the login 'server' string in the hostport() function in adminer/include/functions.inc.php. The port capture group requires pure digits anchored to the end of the string, so any server value with a non-digit tail fails the regex and falls back to returning the whole string as the host with an empty port. Because the privileged-port restriction in adminer/include/auth.inc.php inspects only the parsed port, the check is skipped, and the mysqli/mysqlnd client subsequently re-parses host:port from the host string and opens a TCP connection. A remote, unauthenticated attacker who can reach the Adminer login page can submit a crafted value such as 127.0.0.1:80/x to make the server initiate TCP connections to arbitrary internal hosts and privileged ports before credentials are validated, enabling server-side request forgery and blind internal port scanning (connection refused vs. handshake vs. timeout acts as a liveness oracle). This is a regression that re-opens the bypass fixed in 5.5.0 (GHSA-58cq-mgw2-38m5). Fixed in 6.0.2.
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
Adminerto a version that resolves this vulnerability.Fixed in 6.0.2
Event History
Frequently Asked Questions
Which deployments are exposed to this issue?
Adminer versions 5.5.1 through 6.0.1 are affected. An attacker must be able to reach the Adminer login page; no prior authentication or user interaction is required.
What does an attacker need to send to trigger the server-side connection?
The attacker can submit a crafted login server value with a non-numeric suffix after a port, such as 127.0.0.1:80/x. This causes Adminer’s port check to miss the privileged port while the MySQL client later interprets the value as a host and port.
What can this be used for in practice?
The issue can cause the Adminer host to open TCP connections to internal hosts and privileged ports before credentials are validated. Differences between connection refusal, successful handshake, and timeout can provide a blind internal port-scanning oracle.
What should be done if immediate patching is not possible?
Restrict network access to the Adminer login page so untrusted remote users cannot submit server values. Upgrade to Adminer 6.0.2 when possible.