聚焦源代码安全,网罗国内外最新资讯!

编译:奇安信代码卫士团队

一个下载量达数百万次的 Node.js 模块中被指存在一个安全缺陷,可导致攻击者在服务器上执行拒绝服务攻击或者获得完整的远程 shell 访问权限。

该漏洞的编号是 CVE-2020-7699,存在于npm 组件“express-fileupload”中。它在 npm 的下载量至少是730万次,且这个下载量是保守估算,因为这个数字并未考虑从 GitHub、镜像网站和其它克隆仓库中下载的情况。

该漏洞类型被称为“原型污染”,常见于 JavaScript (JS) 代码中。由于 JS 是基于原型的语言,因此该语言中的每个对象、函数和数据结构都继承了可通过“_proto_”赋值函数进行修改的“Prototype”属性。

修改现有代码的能力是一种预期功能,有助于轻松扩展具有更多属性和方法的现有对象的功能。这类原型攻击在现有对象中注入不兼容的对象类型引发错误,至少可导致拒绝服务后果,甚至可能导致远程 shell 访问后果。

原型利用

由于express-fileupload 具有“parseNested”特征,因此真实攻击是很可能发生的。当“parseNested”选项启用时,它负责将上传的 JSON 数据“扁平化 (flatten)”为嵌入式对象。

发现该缺陷的安全研究员 Posix 在博客文章中解释称,“express-fileupload模块为在 Node.js 应用程序中上传并管理文件提供了多种选择。其中,parseNested 的作用是扁平化参数。”

因此,如果我们将{“a.b.c”}作为输入,则在内部它将被用作{“a”:{“b”:{“C”:true}}}。

例如,如果你的应用程序使用“express-fileupload”模块上传文件,则“parseNested”选项被设置为“true”,从而下令使服务器端应用程序开始将收到的数据扁平化为嵌入式 JSON 对象。

下图说明了“parseNested”选项。

如“Content-Disposition” HTTP 标头中提供了简单的 payload,则攻击者可通过提供“__proto__.toString”值来触发攻击。

如之前所述,“__Proto__”赋值函数能够影响 JavaScript 的“Prototype”属性,该属性是所有 JS 对象和结构继承的属性。

这里展示的 HTTP 请求将覆盖并损坏代码中每个对象的内置“toString”方法。研究人员表示,“如果Object.prototype.toString”被污染,那么它将导致出现错误,而且对于每个请求而言,express 总会返回500个错误。”

通过反向 shell 实现 RCE

研究员还描述了更为复杂的exploit 变体,它可导致攻击者获得易受攻击系统上的 shell。然而,该 exploit 基本上依赖于该应用程序是否使用了易受攻击的“express-fileupload”版本以及是否使用了模板引擎 EJS(嵌入式 JavaScript 模板)。

假设你的应用程序正在使用 EJS 解析上传的数据,而没有执行额外的检查,那么攻击者就能够发送HTTP 请求,覆写 EJS 的“outputFunctionName”选项。

以上所示的 payload 利用的是express-fileupload 中的原型污染,并下令 EJS(如使用)发布 Node.js 的一个“child__process”。这一新发布的进程将进一步使攻击者获得反向 shell。

一旦建立了这种连接,攻击者就能够在受陷服务器中执行任意代码。

并不影响所有用户

不过,研究人员在文章中表示,该缺陷可能并非影响所有用户。只有那些启用了“parseNested”选项的应用程序才易受该原型污染缺陷的影响。

此外,实现完全的 shell 访问权限和远程代码执行,必须和其它库如 EJS 结合使用,这是前提条件。不过,值得注意的是,EJS 并非唯一一个可能获得 shell 访问权限的库。

Posix 表示,这些攻击不仅影响 EJS,“我在博客文章中解释了如何通过 EJS 获得 shell,DNA由于原型污染漏洞能够改变多种上下文的流,因此仅仅是添加一些应用模块就可能为攻击者增加很多可能性。”

收到报告的几小时内,“express-fileupload”库就修复了这个漏洞,用户应尽快从 npm 中安装最新的已修复版本 1.1.9。

推荐阅读

原型污染 0day 漏洞影响所有流行的 Lodash 库版本(附详情和 PoC)

jQuery CVE-2019-11358 原型污染漏洞分析和修复建议

原文链接

https://www.bleepingcomputer.com/news/security/nodejs-module-downloaded-7m-times-lets-hackers-inject-code/

题图:Pixabay License

本文由奇安信代码卫士编译,不代表奇安信观点。转载请注明“转自奇安信代码卫士 www.codesafe.cn”。

奇安信代码卫士 (codesafe)

国内首个专注于软件开发安全的

产品线。

 觉得不错,就点个 “在看” 吧~

下载量达数百万次的NodeJS 模块被曝代码注入漏洞相关推荐

  1. 被利用达数百万次、瞄准 Linux 系统的 Top 15漏洞

     聚焦源代码安全,网罗国内外最新资讯! 编译:代码卫士 趋势科技公司发布 Linux 威胁全景报告指出,近1400万台基于 Linux 的系统直接暴露在互联网上,使其成为真实世界攻击者的目标,从而导致 ...

  2. 三年前下载量达600W的老游戏,没想到还能发光发热!

    说好的 TypeScript 版已经三年了,是时候该兑现了! <球球要回家2>是晓衡当年,初开微店晓衡在线时的开门商品(2021 年被 Cocos 招安,在 Cocos 引擎负责 Coco ...

  3. Secure-D揭示下载量达5亿次的可疑Android应用

    Upstream的安全平台阻止了由流行的Android视频下载器发起的1.3亿次可疑移动交易 VidMate劫持移动设备,吞噬数据,产生不必要的费用并收集个人用户信息,可能影响逾5亿用户 伦敦--(美 ...

  4. 免费当天澳洲运营商全天下载量达1841TB

    在情人节当天,澳大利亚运营商Telstra公司打开了闸门,让旗下所有移动用户上网吃到饱,让他们尽情下载,以弥补上周二严重的营运中断事故.虽然这是在周日非工作日进行弥补,但是澳大利亚用户充分发挥了他们的 ...

  5. 游戏类APP应用周末下载量达最高

    周末无聊?周末玩什么! 逛街?爬山?shopping?NO,宅男腐女可不喜欢,对他们来说乖乖待在家里才是王道.于是乎,游戏类APP应用成了宅男腐女度周末的最佳玩伴. 也就因为宅男腐女这样的移动用户,助 ...

  6. 牛客网论坛考研计算机组成原理笔记,GitHub已下载量已过百万

    **前言:**看过很多书,但总是忘得很快.知识广度越大越容易接纳新东西,但从考察角度来说,自然是对某个方面了解越深越好.那些大而全的著作虽然每本都是经典中的经典,但实际工作中可能只用到其中的一小部分. ...

  7. 独家发布!java总结与心得,下载量瞬秒百万

    一. JVM内存区域的划分 1.1  java虚拟机运行时数据区 java虚拟机运行时数据区分布图: JVM栈(Java Virtual Machine Stacks): Java中一个线程就会相应有 ...

  8. 如何才能通过一线互联网公司面试?下载量瞬秒百万

    美团技术一面20分钟 晚7点,因为想到下周一才面试,我刚准备出去打个羽毛球,北京的电话就来了.面试官各种抱歉,说开会拖延了. 1.自我介绍 说了很多遍了,很流畅捡重点介绍完. 2.问我数据结构算法好不 ...

  9. 大牛教你怎么学习Java多进程,下载量瞬秒百万

    前言 一般的小项目,比如几百人左右访问的项目,访问量几万的项目,如果想用缓存,单机实例完全够用.小黄图就是用的阿里云256MB配置的Redis缓存,日几千的访问量是妥妥够用的了.Redis号称可以支撑 ...

最新文章

  1. 系统调用003 系统服务表
  2. vuls漏洞扫描工具
  3. Atomic Integer 原理分析-getAndIncrement
  4. 加载gif动图_【知乎编辑技巧】GIF动图 的插入 2020.05
  5. 关于vue搭建项目运行出行的错误问题,简直是大坑啊
  6. 计算机应用用什么样的笔记本,制图用什么笔记本好
  7. [Markdown语法][快速入门][CSDN]
  8. 一场360容器圈的武林大会“360互联网技术训练营第九期—360容器技术解密与实践” (附PPT与视频)...
  9. c语言将水仙花数放入一维数组a中,C语言考试题库及答案(1)
  10. 使用MyBatis快速生成代码
  11. 加油吧!数字化转型@网络电视台拿了个“云第一”
  12. i510300h和i79750h参数对比哪个好?
  13. 物联网是什么意思?物联网概念是什么?
  14. MATLAB图像处理边缘检测
  15. sift论文_ImageNet一作邓嘉最佳论文,ECCV2020奖项全公布
  16. 测试er如何通过MacOS连接IOS系统iPhone查看系统崩溃日志?
  17. 重读《从菜鸟到测试架构师》-- 测试专家的第一步
  18. 常见思维模型汇总(一)
  19. C语言中静态变量的概念和用法
  20. idea测试rest api方法(HTTP client in IntelliJ IDEA code editor)

热门文章

  1. Windows 8 Beta 64位 简体中文 消费者预览版 安装截图(30P)
  2. Android设备新型恶意软件,融合银行木马、键盘记录器和移动勒索软件等功能
  3. oracle 10g for linux
  4. 【unity】Inspector视图中的get/set使用(四)
  5. android 渐变展示启动屏
  6. linux终端下的网页浏览器w3m
  7. python上传文件到windows_python使用win32gui上传文件
  8. jquery mobile常用的data-role类型
  9. (libgdx学习)Net的使用
  10. 理解 Android 的 ONE_SHOT_MAKEFILE