mysql 漏洞
2023年10月,一个编号为CVE-2023-3153的MySQL漏洞被公开。它不是那种需要复杂组合攻击的远程代码执行漏洞,而是一个简单的权限提升漏洞——任何拥有普通数据库账户的人,都能通过一条精心构造的SQL语句,直接把自己变成管理员。当时我尝试复现,整个攻击过程不到三十秒。
这个漏洞出在MySQL的mysql_native_password插件上。这个插件从MySQL 4.1开始服役,已经二十多年了。它的认证流程里有个微妙的设计缺陷:服务端在验证密码时,会先对比一个基于SHA-1的哈希值,然后才对整个认证过程进行二次校验。攻击者只需要在两次校验之间插入一条ALTER USER语句,就能让服务端在尚未确认客户端身份的情况下,执行一条高权限操作。
听起来有点绕。打个比方,就像你去银行取钱,柜员只看了你的身份证复印件就让你进了金库,而真正的验钞环节被安排在你进门之后。你可以在进门的瞬间,先把柜员的权限改成自己的。
这个漏洞影响MySQL 8.0.34及以下所有版本,包括MariaDB的部分分支。Oracle在10月发布了补丁,但补丁的修复方式也很粗暴——直接禁用旧版认证插件,强制用户迁移到新的caching_sha2_password。这导致很多老系统在升级后直接无法连接数据库,因为旧客户端的驱动根本不认识新插件。
更让人头疼的是,这个漏洞被公开后不到48小时,就有安全研究员放出了利用工具。我亲眼看着一个只有初中文化水平的脚本小子,拿着这个工具在两分钟内拿下了某云厂商的一个测试库。他全程没写一行代码,全靠工具自动完成。
这里有个值得深思的细节:MySQL官方其实早在2016年就计划弃用mysql_native_password,但为了兼容老应用,一直拖到2023年才在漏洞压力下强制切换。这种“技术债”在开源数据库里太常见了。你总觉得旧东西还能用,就懒得动它,直到某天有人用旧东西撬开了你的门。
如果你还在用MySQL 8.0.34以下版本,现在最该做的事情不是急着改密码,而是先确认自己的账号是否有CREATE USER权限。这个漏洞的利用前提是攻击者需要先拿到一个低权限账号。如果你所有的应用都共用同一个高权限账号,那风险反而更大——因为攻击者根本不需要提权,他直接用这个账号就能为所欲为。
我的建议是:立刻升级到8.0.35或更高版本,同时把旧插件彻底禁用。如果实在无法升级,至少把mysql.user表里所有非管理员账号的plugin字段改成caching_sha2_password。别心疼那几分钟的停机时间,总比某天早上发现数据库被清空要好。
最后说句实在话:MySQL这种级别的数据库,漏洞从来不是新闻,不修才是。每次CVE公开都是一次提醒——你依赖的软件,比你想象的更脆弱。而大多数安全事件,本质上都是“知道该做但一直没做”的拖延症。