收藏
0
0
分享
举报
·2 小时前发布·79次阅读

刚忙完PHP漏洞没两天,Node.js又炸出9.2分RCE

独立开发商业增长付费用户

刚忙完PHP漏洞没两天,Node.js又炸出9.2分RCE,这周后端运维属实是渡劫

下午正对着产品改了第三版的需求文档抠逻辑,公司安全群突然就@了全体,消息刷得快得离谱。点进去一眼看到核心内容,头瞬间就大了:Node.js 出高危RCE漏洞了,圈内叫 Node2Shell,CVSS 评分直接干到 9.2,官方补丁刚放出来,要求全部门立刻拉清单排查。

我盯着消息愣了好一会儿。上周 PHP 那两个 9.2 分漏洞的复盘报告我都还没写完,合着年底基础组件是赶着冲 KPI 式爆漏洞是吧,专挑我们后端运维往死里薅。

这漏洞到底有多坑:你代码写得再规范也挡不住

翻完官方公告和安全厂商的分析,我心里凉了半截。这坑根本不在咱们写的 JS 业务层,是 Node.js 内置的 Brotli 解压模块出的问题——底层 Google 原生的 C 代码里,块状态跳转的校验漏了一步,异常状态没被捕获住,解码器带着错误状态继续往堆里写数据,直接造成了内存越界写入。

说人话就是:攻击者随便构造一份畸形的 Brotli 压缩包发过来,只要你的服务碰了这份压缩数据,人家就能顺着这个越界漏洞拿到服务器权限。

最让人头疼的是攻击面实在太广了,几乎只要用了 Node 做后端,就很难完全躲开:

  • Express、Koa 开了 body-parser 支持 br 压缩请求体的,能打;
  • 用原生 fetch 调第三方接口,对方返回带 Content-Encoding: br 响应的,能打;
  • 自己业务里用 node
    模块做用户上传文件解压、压缩包处理的,更能打。

说白了这是运行时地基级别的漏洞,你业务层写再多输入校验、加再多安全拦截都没用。相当于你家门锁装得再高级、保安雇得再多,人家直接从地基挖个洞钻进你家,你上层的防护全形同虚设。

而且这锅还不止 Node.js 一家背。漏洞根源在 Brotli 官方库本身,1.0.3 到 1.2.0 版本全中。Python 的 brotli 库、Envoy 代理、甚至不少 CDN 的压缩组件,只要链了这个版本的库,全员受影响。一个底层坑,连带着半条技术栈集体裸奔。

最难受的是用着老版本的团队:升也不是,不升也不是

官方现在给三个维护中的主线更了补丁,先记一下:

  • 22.x 系列升到 22.23.4 及以上
  • 24.x 系列升到 24.22.1 及以上
  • 26.x 系列升到 26.12.1 及以上

但真正难办的是大量存量老项目。我们组线上就还跑着两套 Node 18 的老业务,早就 EOL 停更了,官方根本不会给这些旧版本出补丁。

下午跟组长对着清单纠结了快一小时:直接升大版本吧,老业务依赖一堆年久失修的 npm 包,好多早就不维护了,万一兼容性出问题,线上直接崩,回滚都得折腾大半天;可不升吧,9.2 分的 RCE 漏洞明晃晃摆这儿,公网开放的服务,分分钟就会被批量扫描工具盯上,真出了数据泄露的事,谁都担不起这个责任。

我估计跟我们有同款困境的团队不在少数。技术债务这东西,平时看着风平浪静,一出漏洞就是照妖镜,欠的债早晚要还。

圈里吵翻的点:这漏洞又是 AI 智能体先挖出来的

比起漏洞本身,这两天技术圈聊得更多的是它的发现路径。

最早定位到这个 Brotli 底层越界缺陷的,不是哪家厂商的人工安全团队,是 OpenAI Codex 安全团队的自主安全 Agent。智能体自己跑模糊测试、做逃逸验证,顺着压缩数据流一路摸进去,精准找到了越界写入的点,比很多传统安全团队的反应速度还快。

我们部门安全组的群里聊了一下午这个事。有个做了五六年安全的老哥吐槽,说以前挖个底层内存漏洞,得对着反汇编代码啃好几天,熬大夜调 fuzz 工具,有时候碰运气半个月才能有进展。现在 AI 吭哧跑几天,十几年的底层老坑就给你扒得明明白白。

还有人开玩笑,说以后安全研究员不用死磕汇编、逆向了,先把 prompt 写明白再说,人负责定方向、做校验,AI 负责熬夜跑测试,最后人来写报告收尾。

倒也不是说人要被取代了,真到漏洞利用、修复方案这些环节,还是得靠人来判断。但不得不承认,AI 把挖漏洞的门槛拉低了太多,以后基础组件的老坑只会被越挖越快、越挖越多,我们做开发运维的,应急响应的节奏只会越来越紧。

今天排查踩的几个坑,给大伙提个醒

忙了一下午,踩了好几个弯路,顺手记下来,免得大伙再踩同样的雷:

第一,别上来就全量往生产推补丁。底层依赖升级最容易出幺蛾子,解压逻辑一调整,说不定哪块老业务就依赖了之前的异常行为。先拉测试环境跑一遍核心业务流程,压测跑个半小时没异常,再灰度逐步推,稳永远比快重要。

第二,还在用 EOL 老版本的,别死等官方补丁了,等不到的。临时兜底先上 WAF 拦截畸形 Brotli 数据包,公网暴露的端口能收敛就收敛,非必要的接口加上访问白名单。虽然是治标不治本,但至少能先挡住一波全网批量扫描。

第三,网上流传的民间缓解方案别瞎抄。漏洞细节刚公开,好多人发的偏方自己都没完整测过,你照着改配置,搞不好漏洞没防住,先把自己业务搞挂了。跟着官方公告走,永远是最稳的。

聊到这儿也说句题外话,这两年大环境起起伏伏的,加上技术迭代又快,身边不少做开发、运维的朋友都在找更稳的平台沉淀。之前帮学弟留意过一些机会,技术大厂的岗位,前端、后端、测试方向都有,全国不少城市都有 HC,待遇和稳定性都还过得去,感兴趣的可以试试:https://jsj.top/f/o38ijj

最后

现在我这边测试环境已经更完补丁了,正开着监控跑压测,盯着各项指标不敢挪眼。等测完没问题,就得安排灰度往生产推,估计今晚又得忙到挺晚,完事还得补排查报告和复盘文档。

干这行就这样,你永远不知道下班前会蹦出来什么级别的漏洞,计划永远赶不上安全公告。吐槽归吐槽,坑该补还是得补,班该加还是得加。

你们都排查得咋样了?有没有碰到什么奇葩的兼容性问题?评论区唠唠。

讨论 (0)

0/250

    目录

    关于作者

    心得体会

    TA 还没有留下个人简介

    Solo 独立开发者社区support@solo.xin
    关于社区成长规则SOLO.cc隐私政策用户协议商务合作友情链接订阅更新(RSS)投稿赞助

    © 2023 SOLO · 为独立开发者而生