游客发表

相同漏洞

发帖时间:2026-10-17 05:00:44

2021年冬天,相同漏洞Log4j爆出那个核弹级漏洞的相同漏洞时候,我正坐在办公室里刷手机。相同漏洞推送弹出来的相同漏洞瞬间,技术群里炸了锅,相同漏洞有人发了句“完了,相同漏洞全网裸奔”。相同漏洞我当时的相同漏洞第一反应是打开公司项目挨个查依赖,结果发现手头三个Java服务全中招。相同漏洞那天晚上没睡,相同漏洞整个团队都在打补丁、相同漏洞重启服务、相同漏洞盯着监控。相同漏洞事后复盘,相同漏洞CTO说了句话我记到现在:“这次是相同漏洞Log4j,下次换个名字,代码还是那堆代码。”

他说得没错。漏洞从来不会真正消失,它只是换了个壳子重新出现。

我后来留意到一个现象:很多被曝出的高危漏洞,底层逻辑惊人地相似。2021年Log4j的JNDI注入,和2015年Apache Commons反序列化漏洞,本质上都是同一个问题——程序信任了外部输入,然后拿去做危险操作。再往前翻,2014年的Shellshock,Bash把环境变量里的函数定义当代码执行,也是同一个逻辑。十年间,语言换了、框架换了、架构从单体变成微服务,但那行“信任外部输入”的代码,始终有人写。

这不是巧合。我观察过身边写代码的人,包括我自己,在赶需求的时候最容易犯的错就是默认输入是干净的。产品经理说这个字段前端会校验,你就真的不在后端再验一遍。接口文档写着“参数为整数”,你就直接拿去做数组下标。测试环境跑通了,就认为生产环境也没问题。漏洞的种子往往不是技术能力不够,是心态上觉得“不会那么巧”。

更让人无奈的是修复方式。Log4j出事后,大量团队的应对是升级版本号。升级当然对,但升级完之后呢?有没有人去审查自己的代码里有没有类似的JNDI调用?有没有人把“禁止拼接用户输入到执行语句”写进代码规范?我见过太多团队,补丁打完就翻篇,下次换个组件再爆,流程重走一遍。安全扫描工具装了不少,但扫描规则是死的,人的侥幸心理是活的。

有个做渗透测试的朋友跟我聊过,他说他最喜欢测的就是那些“刚修完上一个漏洞”的系统。因为开发团队刚经历一轮紧急修复,身心俱疲,往往只盯着报告里提到的那一个点去改,周围同类问题根本顾不上。他管这叫“漏洞的迁徙”——你堵住一个洞,压力会把它挤到旁边更薄弱的地方去。

我自己的项目里也发生过类似的事。有次代码审计发现某个接口存在SQL注入,我们赶紧改成参数化查询。改完上线,过了两周,同一个业务逻辑的另一个接口又被扫出命令注入。原因一模一样:拼接了用户可控的字符串。两个接口是不同的人写的,但犯错的路径完全重合。

所以我现在越来越觉得,安全这件事,工具和流程只能兜底,真正起作用的是写代码那个人在敲下回车之前有没有多想一秒。这一秒里,你得问自己:这个变量从哪来?如果它是一把刀,我把它插在哪儿了?

漏洞的名字会变,CVE编号每年新增两万多个,但那些让漏洞得以存在的思维惯性,几十年没怎么变过。我们修的是代码,要改的是习惯。

    热门排行

    友情链接