写点什么

细思极恐:后门代码被隐藏在 npm 模块中,差点就得逞

  • 2018-05-13
  • 本文字数:1596 字

    阅读完需:约 5 分钟

看新闻很累?看技术新闻更累?试试下载 InfoQ 手机客户端,每天上下班路上听新闻,有趣还有料!

npm Registry 中没有哪个软件包可以以一种触发后门程序的方式使用恶意模块,虽然未发布到 Registry 的应用程序直接使用恶意模块的能力很小,但它超出了我们的分析范围。

初始报告

来自社区的最初报告显示,该软件包 getcookies 潜藏后门程序,而 express-cookies 和 http-fetch-cookies 依赖于 getcookies,而 mailparser 依赖于 http-fetch-cookies。

系统诊断

收到报告后,npm 的安全团队开始对其进行诊断。诊断的目的是确定报告中提到的软件包是否真的含有恶意代码,如果有,其影响的范围将会有多大。

这里不会披露后门程序的所有信息,但我们会给出在审查过程中得到的一些重点信息。

后门程序通过解析用户提供的 HTTP request.headers,寻找专门为后门程序提供三种不同命令的格式化数据。

JSON.stringify(req.headers).replace(/g([a-f0-9]{4})h((?:[a-f0-9]{2})+)i/gi, (o, p, v) => {})

我们可以在这里看到头文件被字符串化,搜索结果的格式为:gCOMMANDhDATAi

可用的控制流代码:

  • 0xfffe- 重置代码缓冲器
  • 0xfffa- 通过调用 vm.runInThisContext 和提供 module.exports、require、req、res 和 next 参数运行缓冲器内的代码。
  • default - 将远程代码加载到内存中运行。

这些控制代码允许攻击者将任意代码输入到正在运行的服务器运行。

除了后门程序代码,这些模块的其他方面也引起我们的关注:

  • 基于反向图像搜索,发布 getcookies 的用户上的配置文件图像看起来像是一张股票照片。
  • GitHub 用户链接的这些 npm 包是在三月份创建的。
  • getcookies、express-cookies 和 http-fetch-cookies 的下载次数在几个星期前激增,这似乎与依赖于 http-fetch-cookie 的 mailparser 版本相关。

模块的依赖关系

虽然 mailparser 已被弃用,但 mailparser 每周的下载量仍能达到 64,000 次,经过调查,我们发现已发布的依赖于 http-fetch-cookies 的 mailparser 版本并未以任何方式使用过该模块,从而消除了后门程序所带来的风险。我们推测,mailparser 所需的 http-fetch-cookies 会在将来发动攻击或者为了增加 express-cookies 的下载次数而增加其合法性。

因此,mailparser 用户在过去没有受到影响,只有直接需要和使用 express-cookies 或 getcookies 软件包的用户才会受到影响。

采取的行动

对此,npm 官方采取了如下措施:

  • 删除了 dustin87 用户和撤销发布 getCookies,express-cookies 和 http-fetch-cookies;
  • 删除了依赖于 http-fetch-cookies 模块的 3 个 mailparser 版本;
  • 重置 mailparser 作者的 npm tokens 以防止未经授权的发布。

如何看待这次事件

早在 2017 年 8 月,npm 团队就曾删除了 38 个 JavaScript npm 软件包,这些包在受感染的项目中被盗取了环境变量。而目前,npm Registry 已经拥有将近 70 万个软件包和 1000 万用户,这足以吸引攻击者们的注意。

npm 官方似乎也意识到了问题的严重性,他们最近也开始进行了一些行动,上个月,npm 收购了 ^ Lift Security 和 Node Security Platform,并将 Baldwin 并入 npm 团队中,致力于解决 npm Registry 和 npm 应用程序的安全问题。同时,他们在最近新发布的 npm 6 中也加入了安全功能,如安装不受信任或易受攻击的模块时,系统会自动发出警报。

原文链接

https://blog.npmjs.org/post/173526807575/reported-malicious-module-getcookies

前端之巅

「前端之巅」是 InfoQ 旗下关注大前端技术的垂直社群。紧跟时代潮流,共享一线技术,欢迎关注。

活动推荐

PWA、Web 框架、UI 与动画、Node… 大前端的下一站在哪里?前端工程师的价值和成长路径是什么?GMTC2018 上,来自 Google、Facebook、BAT 等 60+ 国内外一线前端大牛,将与你面对面探讨大前端领域最新技术趋势和实践,想要升职加薪就快来吧!扫描下方二维码或点击“阅读原文”了解更多大会详情!

目前大会 8 折热销中,团购更优惠,购票咨询:18514549229(同微信)

2018-05-13 19:003122
用户头像

发布了 83 篇内容, 共 51.4 次阅读, 收获喜欢 187 次。

关注

评论

发布
暂无评论
发现更多内容

详解微信异步队列 MQ 2.0 的功能优化及拓展思路

OpenIM

CSS架构之tool层

Augus

9月日更

博睿数据亮相 2021 服贸会,以智能运维赋能数字化体验

博睿数据

玩转TypeScript 工具类型(上)

有道技术团队

typescript 大前端 客户端

首发10万字Mysql实战文档,几乎涵盖你需要的所有操作|超清PDF

今晚早点睡

Java MySQL 程序员

ipfs矿机挖矿原理是什么?ipfs矿机怎么搭建?

ipfs矿机挖矿原理是什么 ipfs矿机怎么搭建

【数据库】数据库访问控制策略包含哪些?都一样吗?

行云管家

数据库 阿里云

Go- 数据格式解析

HelloBug

json xml Go 语言 gob

弱网下的极限实时视频通信

声网

音视频 编码 极限视频通信

架构1期模块七作业

五只羊

架构实战营

王者荣耀商城异地多活架构设计

木云先森

架构训练营

王者荣耀商城异地多活架构设计

feitian

模块七作业

Clarke

为什么行业老大经常和老二合并?

石云升

市场垄断 9月日更

openLooKeng+Ranger+LDAP 认证鉴权能力演示

LooK

大数据 openLooKeng Ranger

如何拥有自己的openLooKeng?超详细的安装配置指导看这里

LooK

面试官:为何Redis使用跳表而非红黑树实现SortedSet?

Summer

Java 数据库 redis 学习 程序员

又一款Nginx 管理可视化神器!通过界面完成配置监控,一条龙

Summer

Java nginx 学习 程序员 IT

SEO行业的困境:转型还是夹缝中求生存

石头IT视角

实时移动通信中基于时空域联合约束的低照度视频增强技术

OpenIM

模块7

Geek_ywh40v

如何从业务中抽取出通用性模板或框架-通用权限管理框架

张音乐

Java 设计模式 9月日更

网络攻防学习笔记 Day130

穿过生命散发芬芳

数据安全 9月日更

运维工程师主要是做什么的?和网络工程师有啥区别?

行云管家

云计算 运维 网络 IT运维

Android | 音视频方向进阶路线及资源合集

轻口味

android 音视频 9月日更

数据中台是什么?

奔向架构师

数据中台 数据仓库 9月日更

华为云GaussDB(for Redis)发布全新版本,两大核心特性正式亮相

华为云数据库小助手

性能调优 GaussDB GaussDB ( for Redis ) 华为云数据库

应急响应篇:windows入侵排查

网络安全学海

黑客 网络安全 信息安全 WEB安全 应急响应

【VueRouter 源码学习】第六篇 - 路由匹配的实现

Brave

源码 vue-router 9月日更

浪潮云洲×明风机械:让工业“哑设备”发声

云计算

Go- 文件读写-2

HelloBug

文件读写 Go 语言

细思极恐:后门代码被隐藏在npm模块中,差点就得逞_语言 & 开发_覃云_InfoQ精选文章