
字节笔记本
2026年11月3日 · 约 4 分钟读完
日志干干净净,钱没了:metapi 盗刷事件
「日志干干净净,钱却没了」,这是 metapi 盗刷事件里最扎心的一条受害特征。metapi 是一个开源 AI 网关(github.com/cita-777/metapi),把多个 AI provider 的 API 聚合到一个 OpenAI 兼容端点后面,配置、路由规则、上游凭证、日志和 SQLite 数据库全存本地,Docker 镜像 1467078763/metapi,3,337 星、MIT 协议。它有个鉴权漏洞,从 10 月 19 日被社区证实到现在仍未修复,最新版 1.3.0 同样受影响。
先澄清一件事:没有证据指向作者恶意,这不是后门,是一个低级的鉴权写法缺陷;官方至今零回应,漏洞分析是社区层面完成的(用户实测加代码分析)。
一、漏洞本身:一行 startsWith 引发的血案
鉴权中间件用 request.url.startsWith('/api/') 判断请求是否需要鉴权。问题是 request.url 可以带编码:攻击者把路径写成 /%61pi/(%61 是字母 a 的十六进制编码),startsWith 匹配不上 '/api/',鉴权直接放行,内部 API 全部裸奔,包括网关里明文存放的上游 provider 原始 key。zenloop 的回帖验证了这条链路,结论就是 metapi 的问题,「甚至这么简单的问题现在都还没修」。
二、盗刷为什么查不到:绕过网关直接打上游
受害者特征高度一致。10 月 19 日 LINUX DO 用户 yicc2026 首发帖《deepseek被盗刷[已确认Metapi存在漏洞]》:早上用户反馈 agent 报错,一查 DeepSeek 余额归零;metapi 部署给公司内部分发,日志里没有大量请求,只有 10 月 18 日两条来自美国洛杉矶 IP 的请求,「测试已验证鉴权漏洞,现在在用的佬友赶紧下线 metapi」。评论区确认最新版 1.3.0 同样受影响。11 月 2 日 zetaloop 回帖验证自己也被盗刷;11 月 3 日种子用户懒猫(Zber)发预警帖《所有使用metapi的注意盗刷!》:一个很久之前添加的付费站点账户余额全部被刷光,强烈呼吁停用 metapi 里添加的所有账户 key、吊销所有凭证;更多受害者接龙:qq2489226「全部攒的额度都被刷光了」,AIROBOT 则点出了另一个现实,「项目好几个月不更新了,还是得用 New API、sub2API,至少出了问题更新快」。
手法的关键在于:攻击者拿到上游 key 后直接打上游、不走网关,所以 metapi 日志里什么都看不到,钱在别处流走。
三、官方与社区的分野
metapi 项目几个月没有更新,漏洞未修复,没有安全通告,官方零回应。整个漏洞的发现、验证和原因查明全部是社区层面完成的:yicc2026 首报、评论区确认版本范围、zenloop 代码级定位、懒猫发预警。没有证据指向作者恶意,但「无人维护」和「恶意」对用户的区别,只是炸弹是故意的还是遗留的。
四、写给中转 API 用户的四条排查指南
一,网关是单点炸弹:它把你所有上游渠道的真实 key 集中明文存一份,鉴权一破等于全军覆没。选网关先看「凭证怎么存的」。二,日志干净不等于没事:这类盗刷绕过网关直接打上游,网关日志里什么都看不到,排查要看上游账单和余额,不是看网关日志。三,出事后的正确动作是吊销所有上游 key、逐个站点删 key,而不是只改网关密码。密码管的是网关的门,偷走的是门后面的钥匙。四,停更项目别存生产 key:几个月不更新的网关,就是定时炸弹。
五、判断
/%61pi/ 的教训值得所有写鉴权的开发者抄走:URL 在到达你的 startsWith 之前已经解码过很多层,鉴权判断要用解码后的规范路径,或者干脆用框架的正式鉴权中间件。对 metapi 用户,行动清单按紧急度排:停用、吊销 key、迁移到仍在维护的 New API 或 sub2API。AIROBOT 那句「至少出了问题更新快」,就是一个网关最值钱的品质。
来源:LINUX DO 预警帖 linux.do/t/topic/3113196/1(第一手,2026-11-03);首发帖 linux.do/t/topic/3043871(第一手,2026-10-19)。



