CVE-2026-48772 Security Alert: CRITICAL Vulnerability

Urgent: CVE-2026-48772 requires immediate attention.

· 7 min read

Executive Summary

CVE-2026-48772 is a critical ProxySQL flaw (CVSS 10) that lets a remote client spoof its source IP and bypass routing or ACL rules when the frontend accepts PROXY protocol v1 headers. In affected versions 2.0.0 through 3.0.8, ProxySQL incorrectly trusts PROXY UNKNOWN ... frames and still parses the address fields, allowing an attacker to claim any client IP they want. If your rules rely on client_addr for read/write splitting, admin-only access, or query filtering, this can be used to route malicious traffic as if it came from a trusted network.

Version 3.0.9 fixes the issue. Even though there is no known exploitation in the wild yet and it is not in CISA KEV, this is the kind of bug that can be turned into a fast, low-noise bypass once exposed services are found.

Immediate Action

  • Upgrade ProxySQL to 3.0.9 or later immediately. If you cannot patch today, remove public exposure from the frontend port and restrict access to trusted load balancers only.
  • Disable or tighten PROXY protocol acceptance by setting mysql-proxy_protocol_networks to explicit trusted CIDRs instead of *.
  • Audit any query rules using client_addr for routing, ACLs, schema pinning, or DDL controls; assume they are forgeable until patched.
  • Temporarily fail closed for sensitive rules: block direct internet access to ProxySQL, or route all traffic through a known trusted proxy layer.
  • Roll back only if needed for stability and only to a version outside the vulnerable range; otherwise do not delay the upgrade.
  • Check the vendor advisory / release notes: ProxySQL security advisory for CVE-2026-48772.

Affected Versions

  • proxysql@>=2.0.0 && <=3.0.8 vulnerable; upgrade to 3.0.9+
  • proxysql:2.0.0 through proxysql:3.0.8 Docker images vulnerable; use proxysql:3.0.9 or newer
  • mysql-proxy_protocol_networks = '*' is especially risky when combined with the vulnerable versions

Resolution Guide

Best fix: patch ProxySQL. If you package ProxySQL yourself, update the binary/package to 3.0.9 or later. Example commands below use placeholders where distro/package names vary.

# Docker
docker pull proxysql:3.0.9
docker stop proxysql && docker rm proxysql
docker run -d --name proxysql proxysql:3.0.9

# apt (TODO: replace with your repo/package name)
sudo apt-get update
sudo apt-get install --only-upgrade proxysql=3.0.9*

# yum/dnf (TODO: replace with your repo/package name)
sudo yum update proxysql-3.0.9*
# or
sudo dnf upgrade proxysql-3.0.9*

JavaScript / Python / Java ecosystems: ProxySQL is not typically installed as an npm/pip/Maven dependency, but if you manage it via automation, update the deployment artifact or container tag.

# npm/yarn/pnpm (only if your infra package wraps ProxySQL deployment)
npm i proxysql-deploy@latest
yarn add proxysql-deploy@latest
pnpm add proxysql-deploy@latest

# pip/pipx
pip install --upgrade proxysql-deploy
pipx upgrade proxysql-deploy

# Maven/Gradle
# TODO: bump the version of your internal deployment plugin/artifact that pins ProxySQL
# example:
# implementation("com.example:db-proxy-ops:3.0.9")

Hardening while you patch:

# In ProxySQL config, restrict PROXY protocol sources to trusted CIDRs
mysql-proxy_protocol_networks="10.0.0.0/8,192.168.0.0/16"

# Avoid wildcard trust
# mysql-proxy_protocol_networks="*"

Operational containment:

# Example firewall restriction: allow only your load balancer or app subnet
sudo iptables -A INPUT -p tcp --dport 6033 -s 10.0.1.0/24 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 6033 -j DROP

Minimal code/config fix pattern: if you maintain a wrapper or custom parser, reject UNKNOWN PROXY v1 frames instead of parsing address fields.

// Pseudocode: reject UNKNOWN instead of trusting address fields
if (proxy_proto_v1_token == "UNKNOWN") {
    reject_connection("PROXY UNKNOWN not allowed from this peer");
}
// Only parse address fields for known, trusted proxy identities

Detection & Verification

Check the installed version:

proxysql --version
# or inside the admin interface:
SELECT @@version;

Look for risky configuration:

grep -R "mysql-proxy_protocol_networks" /etc/proxysql* /etc/*proxysql* 2>/dev/null
grep -R "client_addr" /etc/proxysql* /etc/*proxysql* 2>/dev/null

Find vulnerable deployments in containers:

docker ps --format '{{.Image}} {{.Names}}' | grep -i proxysql
docker inspect --format='{{.Config.Image}}' <container_name>

Dependency / inventory checks:

# If you use config management or SBOM tooling
grep -R "3.0.[0-8]" /var/lib/ /opt/ /srv/ 2>/dev/null
# TODO: run your asset inventory query for proxysql images and packages

Verify the fix: after upgrading, confirm the version is 3.0.9+ and that untrusted peers cannot influence client_addr-based routing. If you have a staging environment, test that a forged PROXY UNKNOWN header from an untrusted host is rejected or ignored.

# Example verification flow
proxysql --version
# Expect: 3.0.9 or later

# Then test from a non-trusted host:
printf 'PROXY UNKNOWN 203.0.113.10 203.0.113.10 12345 3306\r\n' | nc <proxysql-host> 6033
# Expected: connection rejected or header ignored; no route/ACL bypass

Risk and Impact

This bug can let a remote attacker pretend to be any internal client IP if they can reach the ProxySQL frontend and the service trusts PROXY protocol headers broadly. That can bypass read/write split rules, per-app routing, and query restrictions that were meant to separate public traffic from privileged internal traffic.

For solo developers and small teams, the blast radius is often bigger than it looks: one exposed proxy can become a gateway to the primary database, admin-only operations, or sensitive schemas. Treat this as an urgent patch-and-lockdown issue, not a routine maintenance update.

Keep reading