漏洞关键词

2021年冬天,漏洞Log4j2的关键那个漏洞爆出来时,我正坐在工位上改一个无关紧要的漏洞样式表。手机开始震,关键群里有人甩了条链接,漏洞说“赶紧看,关键天塌了”。漏洞点进去,关键CVE-2021-44228,漏洞一个JNDI注入,关键评分10.0。漏洞那天下午整个技术部没人干活,关键全在翻代码库——我们到底在多少个项目里用了这个日志库?漏洞答案是:几乎全部。

漏洞关键词这东西,关键平时没人关心。漏洞安全圈外的人听到“CVE”三个字母就犯困。可一旦出事,这些编号就是催命符。我后来养成个习惯,每次上线前扫一眼依赖树,看看有没有标红的版本号。这动作跟出门前摸一下口袋确认钥匙在不在差不多,不浪漫,但管用。

说回关键词本身。“反序列化”这三个字,在Java安全里几乎等于“灾难片预告”。Apache Commons Collections那个洞,2015年爆的,到现在还有系统没修。为什么?因为很多老项目根本没人敢动,一动就崩。我见过一个银行内部系统,跑在JDK 6上,依赖的库比我的工龄还长。安全团队发了十七次通告,运维回复永远是“排期评估中”。这种时候,漏洞关键词不是技术问题,是组织问题。

“注入”这个词也很有意思。SQL注入讲了二十年,新手教程还在教预编译语句。但你去翻GitHub上那些star过千的项目,照样能搜出字符串拼接的SQL。不是不知道,是图方便。人嘛,总觉得自己写的代码不会出事。直到某天凌晨三点被叫起来看数据库里多了一张表,表名叫“你被黑了”。

还有“越权”。这词听着温和,实际杀伤力极大。去年帮朋友看一个电商后台,普通用户改个URL里的ID就能看到别人的订单。他问我这算不算漏洞,我说算,而且是最丢人的那种。因为修复它只需要加一行权限校验,但写代码的人当时脑子里想的是“先跑通再说”。

我注意到一个规律:越是听起来简单的漏洞关键词,造成的破坏越大。“弱口令”三个字,每年护网行动里得分最高。某次攻防演练,红队用admin/admin进了三家单位的后台。防守方复盘时脸色铁青,但改密码的通知发下去,还是有人嫌麻烦不改。安全这东西,技术占三成,剩下七成是跟人性较劲。

“供应链”是最近几年热起来的词。以前大家只管自己写的代码,现在得管代码引用的代码引用的代码。npm上一个包被投毒,能波及几十万个项目。我现在的习惯是,新项目能用标准库就用标准库,少一个依赖少一个雷。虽然写起来累点,但半夜睡得踏实。

写这些不是要制造焦虑。漏洞关键词就像体检报告上的箭头,看着烦,但能提醒你哪里该注意了。真正可怕的不是漏洞本身,是看到“远程代码执行”还觉得“跟我没关系”的那种麻木。我见过太多人,补丁永远打在下一版,下一版永远在排期。

最后说个真事。某次内部培训,讲师问在座的人:你们负责的系统里,有多少个已知漏洞没修?没人举手。讲师说:那好,我现在随机抽三个系统扫一下。结果出来,平均每个系统四十多个中高危。会议室安静得能听见空调声。从那以后,我们组每周五下午固定留一小时专门看漏洞报告。不为什么,就图个心安。