Metabase零日漏洞披露:3%云客户受影响,0.58+全版本中招
DataHot 速览
Metabase 于2026年8月3日收到云客户异常API key创建报告,经调查发现攻击者可生成有效会话的零日漏洞,影响所有 0.58 及以上版本。官方在8月6日推送补丁,并确认不到3%的云客户在修复前遭入侵,部分开源/自托管且公开访问的实例也受影响。漏洞源于密码重置接口参数处理与代码层交互缺陷。
为什么值得关注:Metabase 是广泛使用的BI工具,此安全漏洞允许攻击者生成有效会话并已造成实际入侵,数据团队应尽快确认版本并升级。
译文
AI 逐段翻译2026年8月3日,我们的一位Metabase云客户报告称,在正常工作时间之外创建了一个API密钥。
我们进行了调查,并注意到一个异常的访问模式——单个IP在两个不同的客户实例上,以相同的端点顺序创建了一个API密钥。我们确定了发起攻击链的初始端点,并在我们的客户实例群中实施了网络封锁。
我们调查并确定了一个有效的会话ID被创建,通过逆向工程,我们识别出一个未知(“零日”)漏洞,该漏洞允许威胁行为者生成活动会话。我们创建了一个补丁,并立即推送到我们的客户云实例。
我们搜索了日志,并开始调查任何客户影响。我们还聘请了一家第三方事件响应和取证公司。
我们开始准备公开发布,并在调查中发现了来自同一原语的另外几个衍生漏洞,并为这些漏洞添加了修复,纳入该发布中。
我们打包了这些修复,并于8月6日发布了修补版本。
谁受到了影响?
所有运行0.58及以后版本的Metabase安装均受影响。
在修补之前,我们不到3%的云客户因该漏洞而受到入侵,一些开源用户和具有公开可访问Metabase实例的自托管客户也受到影响。
未知漏洞是什么?
该漏洞是一种链式攻击,利用了代码库中4层交互方式。
攻击的起点是我们的密码重置URL(/reset-password)
该URL接受请求体:
`[:map [:token ms/NonBlankString] [:password ms/ValidPassword]]`
链条中的第一环是我们在Malli中的API类型注解不是“封闭的”;类型注解只验证了必需的键存在且类型正确。额外的键不会导致验证错误。
第二步是认证系统重构于2025年11月11日将参数处理从仅传递token和password键改为传递整个请求体。
第三步是在Auth流程的入口,如果指定了用户ID,那么该用户的记录会由我们的ORM,Toucan2,按ID查找。这是使用Toucan2的select-one函数完成的,用户的“ID”是密码重置URL中传入的值。
最后,toucan2使用HoneySql生成查询。
如果过滤谓词包含一个“raw”键,honeysql会将其视为原始SQL并保持不变地插入。
通过提交如下请求体
{ "token": "any",
"password": "pass",
"user_id": {"raw": "1);INSERT INTO ...; --"} }
攻击者可以注入SQL。
实际攻击利用这一点在会话表中插入一条记录,使用已知的user_id为1(Metabase实例中的第一个用户,始终初始创建为“管理员”),然后利用该会话浏览数据,并创建API密钥以允许批量表下载。
这次攻击的特征是什么?
虽然这种攻击可以通过多种方式执行,但我们看到的模式是
HTTP POST /api/session/password-reset 400
HTTP GET /api/user/current 200
我们修复了什么?
我们在三个不同层面防范了这种攻击:
- 从API处理程序仅传递token和password字段
- 在Auth流程入口拒绝可滥用的键
- 在工具宏中遇到意外键时抛出异常
我们未来将做什么来防止这种情况?
鉴于这种攻击的复杂性、对我们代码库的了解要求以及两个嵌套依赖(Toucan2和Honey SQL)的行为,我们认为这种攻击需要强大的LLM能力。
早期请求使用的用户代理字符串暗示了覆盖LLM上的护栏:“metabase-postgres-admin-session-lab-verifier/1”、“metabase-read-only-sqli-verifier/1”,然后在类似“Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0”和“Safari/537.36 Edg/146.0.0.0 Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:149.0) Gecko/20100101 Firefox/149.0”之间轮换25个变体。
鉴于LLM代码扫描能力的飞速提升及其编织深层攻击链的能力,我们正在跨层加固Metabase,而不仅仅是修复这一漏洞。
这种加固正在我们代码库的许多层面进行,包括:
- 防止SQL注入在没有带外加密密钥的情况下在数据库中创建会话和其他敏感值;
- 对所有端点默认关闭模式验证;
- 添加额外数据验证;
- 统一分散的权限检查;
- 通过HoneySQL raw防止Toucan中的SQL注入;
- 强化我们的MBQL查询处理器,禁止无引号地发出原始SQL;
- 锁定潜在的SSRF途径;
- 增加跨用户缓存键的分离;
- 强化沙箱和数据库连接模拟;以及
- 更多其他措施。
我们在63.13版本中发布了第一批加固措施,并将发布另一个加固版本,然后恢复正常开发节奏。
我们还在与外部研究人员合作(再次感谢Ophion Security和Anthropic红队),并继续使用更多种类的模型和方法扫描我们的代码库。
这篇内容对你有用吗?
反馈只用于改善内容筛选,不等同于收藏