CVE-2026-48772: Critical Routing and Access-Control Bypass
Critical CVSS (10.0) reachable over network.
| Field | Value |
|---|---|
| CVE ID | CVE-2026-48772 |
| CVSS score | 10.0 |
| Attack vector | Network |
| Auth required | Unknown from cited sources; defenders should assume unauthenticated exposure if the frontend is reachable and accepts PROXY protocol input |
| Patch status | Fixed in ProxySQL 3.0.9 |
TL;DR - ProxySQL incorrectly trusts attacker-supplied IP data in a malformed
PROXY UNKNOWNheader. - Affected versions are2.0.0 through 3.0.8; upgrade to3.0.9. - No confirmed in-the-wild exploitation or verified public PoC in cited sources, but urgency is high.
Vulnerability at a Glance
CVE-2026-48772 is a critical trust-boundary failure in ProxySQL. According to the NVD description, ProxySQL versions 2.0.0 through 3.0.8 accept a HAProxy PROXY protocol v1 line using the UNKNOWN token, then incorrectly parse and trust the following address fields. That behavior matters because those fields are supposed to be ignored when the protocol token is UNKNOWN.
In practice, the flaw lets a remote client influence the source IP address that ProxySQL associates with the session. If your deployment uses client_addr-based logic in mysql_query_rules, an attacker may be able to make traffic appear to come from a trusted network or application tier. That can translate into routing abuse, policy bypass, and access-control failures inside the proxy layer even when the backend database is otherwise segmented.
What This Vulnerability Actually Breaks
The security problem is not remote code execution. It is identity spoofing at the proxy layer. ProxySQL commonly sits between applications and MySQL-compatible backends, and many teams rely on it for routing decisions such as read/write splitting, traffic steering, or access rules based on client source ranges. CVE-2026-48772 undermines that model by allowing the session source address to be forged under certain conditions.
The NVD description specifically calls out the danger when mysql-proxy_protocol_networks = '*', which it identifies as the default. In that state, any TCP peer able to reach the ProxySQL frontend may be able to send a crafted PROXY protocol v1 header and assert an arbitrary source IP value. If your rules trust client_addr, then the attacker is not just spoofing telemetry. They are spoofing an input used to make security and routing decisions.
Affected Versions and Exposure Conditions
The affected version range stated in the NVD record is explicit: ProxySQL 2.0.0 through 3.0.8. The fixed release referenced by NVD is ProxySQL 3.0.9. If you are running any release in that affected range, you should assume exposure until you confirm both your version and your relevant configuration state.
The most exposed deployments are those where ProxySQL is reachable from broad network segments, where PROXY protocol input is accepted, and where mysql_query_rules rely on client_addr. Even if you believe only a trusted load balancer should speak PROXY protocol, you should verify the actual listener path and network controls. In the absence of stronger source restrictions, the safe assumption is that any reachable client may attempt to supply a malicious header.
CVSS and Severity Context
NVD assigns CVE-2026-48772 a CVSS 10.0 critical rating. The compact research note provided here does not include the full vector string, so it would be inaccurate to invent one. What defenders can say confidently is that NVD considers the issue critical and network-relevant, and that the vulnerable behavior affects a security-sensitive control plane input: client identity as interpreted by a database proxy.
This severity makes sense operationally because many organizations treat source IP inside ProxySQL as a policy attribute. When that attribute can be forged, segmentation assumptions can collapse. The vulnerability may permit an attacker to trigger rule sets intended for internal services, route traffic in ways the operator did not intend, or bypass client-based controls designed to separate trusted from untrusted callers.
Exploitation Status and PoC Availability
At the time of writing, there is no confirmed evidence in the provided primary references that CVE-2026-48772 has been exploited in the wild. It is not listed in CISA’s Known Exploited Vulnerabilities catalog based on the cited lookup. That does not mean it is low risk. It means defenders should not claim confirmed exploitation without additional evidence.
Likewise, the research note does not confirm a standalone public proof of concept. The mechanics are clearly described in the NVD text and associated advisory references, so exploitation appears straightforward in principle, but “straightforward” is not the same as “public PoC confirmed.” The most accurate statement is: no verified public PoC was identified in the provided sources, and no confirmed in-the-wild exploitation was cited there.
Technical Notes
A crafted request pattern described by NVD would look like this on the wire:
PROXY UNKNOWN 10.10.10.10 192.0.2.20 42311 6033\r\n
In a normal HAProxy PROXY protocol v1 implementation, address fields following UNKNOWN should be ignored. In vulnerable ProxySQL versions, those fields may still influence session source handling.
If you perform controlled validation in a lab, use a non-production listener and a simple TCP client:
printf 'PROXY UNKNOWN 10.10.10.10 192.0.2.20 42311 6033\r\n' | nc proxysql.example.com 6033
Do not assume this alone proves successful exploitation. You must correlate it with rule behavior, session metadata, or backend routing outcomes.
What Defenders Should Do Next
Treat this as both a patching issue and a policy assurance issue. Upgrading to 3.0.9 closes the parsing flaw, but you should also validate whether source-IP-based trust inside ProxySQL is appropriate for your threat model. If a forged client IP can route a session to a privileged backend or bypass a control, then the architecture is sensitive to identity parsing errors by design.
A practical response plan is: identify all ProxySQL instances, confirm whether they run 2.0.0 through 3.0.8, review mysql-proxy_protocol_networks, enumerate client_addr-dependent rules, patch to 3.0.9, and test that only intended upstream systems can influence client attribution. If some operational assumptions are unknown, assume the riskier case until validated. That is the safest stance given the default-risk condition cited by NVD.
For further information on SQL injection and web application security, check our FAQ on SQL Injection and our Web Application Hardening Checklist.
How to Detect It
Detection is mainly about spotting impossible or suspicious client identity transitions. If ProxySQL is expected to receive PROXY protocol traffic only from a specific upstream load balancer, then any direct connection carrying a PROXY line from another source should be treated as suspicious. Likewise, if application traffic suddenly appears to originate from internal or allowlisted subnets that do not match your network path, investigate immediately.
You should also review whether mysql_query_rules use client_addr in security-sensitive ways. The flaw becomes materially dangerous when source IP controls routing or authorization. In many environments, detection will require combining network telemetry, ProxySQL admin-plane review, and backend query attribution to catch mismatches between the actual TCP peer and the client address ProxySQL appears to use for rule matching.
Technical Notes
Start by checking whether the risky configuration is present:
SELECT variable_name, variable_value
FROM global_variables
WHERE variable_name = 'mysql-proxy_protocol_networks';
Review rules that depend on client source:
SELECT rule_id, active, username, client_addr, destination_hostgroup, apply
FROM mysql_query_rules
WHERE client_addr IS NOT NULL AND client_addr <> '';
At the network layer, look for PROXY protocol v1 lines containing UNKNOWN followed by address fields. A simple Suricata-style content concept for review is:
alert tcp any any -> $PROXYSQL_SERVERS 6033 (
msg:"Possible CVE-2026-48772 probe: PROXY UNKNOWN with address fields";
flow:to_server,established;
content:"PROXY UNKNOWN "; depth:14;
sid:10048772; rev:1;
)
If you collect raw TCP payload metadata or IDS events, hunt for this pattern:
PROXY UNKNOWN [0-9]+\.[0-9]+\.[0-9]+\.[0-9]+ [0-9]+\.[0-9]+\.[0-9]+\.[0-9]+ [0-9]+ [0-9]+\n```
If ProxySQL logs do not expose enough detail in your environment, compare the actual source IP seen by perimeter devices with the source context used for database access decisions. A discrepancy between those data points is a strong indicator of abuse or misconfiguration.
## Mitigation and Patching
The primary fix is to upgrade from affected versions `2.0.0 through 3.0.8` to `3.0.9` or later. Because the vulnerability concerns how ProxySQL parses and trusts frontend identity information, configuration hardening should accompany patching. Specifically, review whether `mysql-proxy_protocol_networks` is overly permissive and whether `client_addr` is being used as a hard trust signal for authorization or routing.
If you cannot patch immediately, reduce exposure by limiting which upstream systems are permitted to speak PROXY protocol to ProxySQL. Do not leave acceptance effectively open to any peer if your architecture only needs one or two load balancers to provide that header. Also review whether `client_addr`-based rules can be replaced, narrowed, or temporarily disabled until patched.
### Technical Notes
First, identify your running version:
```bash
proxysql --version
If you manage ProxySQL through your package repository, use the package manager appropriate to your platform after confirming 3.0.9 is available in your approved source. Example workflow on Debian-derived systems:
apt-cache policy proxysql
sudo apt-get update
sudo apt-get install proxysql=3.0.9*
Example workflow on RHEL-derived systems:
dnf info proxysql
sudo dnf upgrade proxysql
Because package naming and repository availability differ by environment, verify that the resulting installed version is actually 3.0.9 or later rather than assuming the upgrade succeeded.
If you need an interim hardening step, restrict PROXY protocol networks from the default broad setting. Check the current value:
SELECT variable_value
FROM global_variables
WHERE variable_name='mysql-proxy_protocol_networks';
Then set it to only the expected load balancer subnet or host range, replacing the example below with your real source network:
UPDATE global_variables
SET variable_value='192.0.2.0/24'
WHERE variable_name='mysql-proxy_protocol_networks';
LOAD MYSQL VARIABLES TO RUNTIME;
SAVE MYSQL VARIABLES TO DISK;
Also audit client_addr rules and remove or narrow those that grant privileged routing based solely on source IP:
SELECT rule_id, active, client_addr, destination_hostgroup
FROM mysql_query_rules
WHERE client_addr IS NOT NULL AND client_addr <> '';
References
- NVD CVE record: https://nvd.nist.gov/vuln/detail/CVE-2026-48772
- CISA KEV catalog: https://www.cisa.gov/known-exploited-vulnerabilities-catalog
- ProxySQL v3.0.9 release: https://github.com/sysown/proxysql/releases/tag/v3.0.9
- GitHub Security Advisory: https://github.com/sysown/proxysql/security/advisories/GHSA-gw94-85m2-x8v2
This article may contain affiliate links. We earn a commission on qualifying purchases at no extra cost to you.