跳到主要内容
这期没选手:LiteLLM 被投毒,PHP2Shell 抢在补丁前开打

这期没选手:LiteLLM 被投毒,PHP2Shell 抢在补丁前开打

小周
小周

· 阅读约 4 分钟

十月的第三周,本来在写另一期。候选池里排着三个 CLI,README 都翻完了,定调句也拟好了。然后通知连着响了几轮,节奏就没了。

先是 LiteLLM 在 PyPI 上被人传了个恶意版本,年内第二次。接着 Railway 通报,说攻击者摸到了客户的环境变量。再往前两天是 PHP2Shell——两个 PHP 高危洞,攻击在官方补丁出来之前就已经被观察到。

这几条我是从一个叫 Drew Silcock 的汇总里补全的。他那篇标题起得挺狠,“Is this the new cyber normal?”。我盯着看了会儿,觉得说得不太对:这不算新的常态,只是旧常态回来了,只是这次快得多。

补丁窗口没了,理由不复杂。AI agent 会去读已经发出来的补丁,从 diff 反推洞在哪,顺手把 exploit 写出来,几小时的事。以前防守方手里攥着一段时间差,靠“对方还没跟上”活着。现在时间差翻到攻击那边去了。

还有一层更烦人的:跑不通的 exploit 可以量产,一百个里成一个就够。防守这边一行没少——读公告、判断自己暴没暴露、找出是哪几个服务、测、发版,最后还得去日志里翻有没有人已经进来过。

所以那句我抄下来准备贴墙上的话是:AI 把找洞的成本打下来了,没把补洞的成本打下来。

我平时判断一个项目值不值得点进去,看 README 颜值,看 issue 区有没有活人回话,看 commit 节奏像不像人干的。这周给自己的筛选条件加了一条,加得不太情愿:这东西出事的时候,我有没有退路。

大厂过这种周靠的是编制——专职安全、值班表、演练过的 playbook,出事有人接。四个人那种团队没有这些,安全、发布、数据库、客服、需求全压在一个人身上,那个人这周本来是要写功能的。这不是态度问题,是排班问题。

更别扭的是,小团队根本没有“不用第三方”这个选项。框架、包、托管、模型 API,一层叠一层,全是别人家的东西。别人家出事,当天就变成你的事。装了那个恶意版本的,凭据可能已经出去了;Railway 那边通报之后,真正要先做的不是打补丁,是轮换 secrets——而轮换这件事,你得先知道自己有哪些 key、放在哪、谁在用。

说到这个,每接一个 AI 工具就多一把 key、一个依赖、一份服务访问权,攻击面就这么一点点堆起来。清单里那个数据库公司泄的是一批 AI 供应商的 key,来源是内部工单里直接贴的。我看到这条的时候去翻了自己项目的 .env,翻了半分钟就关掉了。脸红。

刷着刷着差点忘了正事。那几天我还是照常刷 trending,刷完才觉得荒谬:一边有人在下线服务器,一边我在看某个新 CLI 的 demo gif。拉回来。

那篇下面攒了 47 条评论,吵的方向大概四个:砍依赖、自动盘点、轮换 secret、给危险功能做 kill switch。这里说句偏心话——砍依赖是最像自我安慰的那一条。你砍不掉托管平台,砍不掉模型 API,也砍不掉上一层的基础镜像,到头来还是在用别人家的东西,只是用得少一点、心里舒服一点。真能提前铺的是另外三样:一份对得上的清单(哪个服务用了哪把 key、哪台机器跑哪个版本)、一条十分钟内能走完的轮换路径、一个说关就能关的开关。这三样都不好看,没有 star 可刷,也没人会给它写 demo gif。

先声明一句:我不搞安全,没值过 IR 的班,上面全是一个天天 pip install 的人的第一手感受,别当安全建议看。同周还有 GitLab 的最高危修复、几个内核补丁发错了邮件列表——发错这条我笑不出来,那意味着有人会漏掉。

这期就先这样,没有选手,候选池里那三个先欠着。下一期照常挖项目,但我会顺手多看一眼它们的依赖更新节奏和有没有 SECURITY.md,这算加筛选条件,不算改版。至于这周,别急着收藏什么新工具了,先翻一遍自己的 .env 更实在。