在讲这个漏洞之前我们来理解一下JAVAscript 。与其他的语言不同的是,Js在Es6之前是没有class的,他更多的是一个原型语言,在Js里有一句话很有名——“一切皆对象” 。什么是原型语言
【Javascript原型链攻击与防御】1.只有对象,没有类;对象继承对象,而不是类继承类 。关于Function.prototype和Object.__proto__
2.“原型对象”是核心概念 。原型对象是新对象的模板,它将自身的属性共享给新对象 。一个对象不但可以享有自己创建时和运行时定义的属性,而且可以享有原型对象的属性 。
3.每一个对象都有自己的原型对象,所有对象构成一个树状的层级系统 。root节点的顶层对象是一个语言原生的对象,只有它没有原型对象,其他所有对象都直接或间接继承它的属性 。
1.对象有__proto__属性,函数有prototype属性;在没有手动修改__proto__属性的指向时,以上三条便是JavaScript默认原型链指向逻辑 。如果要更形象的去理解这个就可以看下下图的这个结构
2.对象由函数生成;
3.生成对象时,对象的__proto__属性指向函数的prototype属性 。
文章插图
什么是JavaScript原型链污染原型链污染来自一个CVE,这个CVE是一个在jquery中修复的漏洞,但是这个漏洞广义的推广的话,受影响的范围应该是一切使用了ecmascript的应用,无论前后端 。关于这个漏洞,是修复了jQuery的$.extend(true…)方法,在jQuery中,这个方法用于将一个或多个对象的内容合并到目标对象 。所以你永远不知道有不有人会不会写出一些类似以下的代码
当我们可控$.extend的参数的时候,我们就可以覆盖对象的__proto__或者prototype方法从而控制整个原型链的最顶端的方法,重写该方法将覆盖子对象或者函数的方法,从而导致污染原本的方法意图 。
在npmjs官方搜下对象操作的库可以看到一大堆,例如“xtend”、 “deepmerge”、 “webpack-merge”、 “merge2”、 “lodash.merge” 。假如一些应用使用了这些方法,但是对参数没做任何处理 。
漏洞范围影响提出这个Javascript原型链污染攻击的作者写了一个pdf,在该pdf中,作者不仅做了漏洞的成因分析,还针对此漏洞做了受害范围分析,他在github上搜索了部分的组件,这些组件都是可以操作对象,一般都是对象合并操作的,较为底层,因此也会有大量的应用基于这些组件 。例如“hoek”,“lodash”,“defaults-deep”等修复了这个原型链污染的可能性,当然还有一些组件他没统计到,例如“xtend”之类的,光weekly download的数量就有“12,097,425” 。
笔者在npm上搜索了基于xtend的一些应用,找到一个language-exec这样的一个组件 。这个组件是一个基于xtend的,不过这个组件好像年久失修而且没啥人用,看了源代码其中就有这样的一句话
可以看到类似的写法都是存在问题的(主要是我没找到具体的基于xtend的受影响应用) 。
所以基于这个,大家不是有了刷CVE的思路了?没错…只要你敢花时间去爬全部的dependence就可以有机会获得javascript pollution attack CVE 。
案例一远程命令执行
作者在github上搜到了一款叫做ghost cms的应用,当然这个漏洞已经修复,当黑客发送以下请求即可实现控制任意方法或者对象的任意属性 。当然也就是rce了
在一切皆对象的JavaScript中,所有对象都可以调用toString和valueOf方法,当你通过__proto__重写这2个方法的时候,就容易在express等web框架中产生dos,导致服务无法正常运行 。类似以下的写法就容易产生拒绝服务 。
文章插图
案例二DOS
在一切皆对象的JavaScript中,所有对象都可以调用toString和valueOf方法,当你通过__proto__重写这2个方法的时候,就容易在express等web框架中产生dos,导致服务无法正常运行 。类似以下的写法就容易产生拒绝服务
文章插图
案例三任意文件读取
如果你可以通过污染原型链来重写一些“私有属性”的话(Javascript没有私有属性),可能可以重写那些在WEB中用来定义渲染模板文件的属性值,就有可能产生任意文件读取了,如以下这个图片
推荐阅读
- 揭开 JavaScript 引擎的面纱
- 雪容融是灯笼还是糖葫芦,雪容融是以什么为原型设计的
- 珍珠项链长度 珍珠项链直径
- 被钓鱼软件骗了怎么办 钓鱼链接诈骗
- JavaScript中面向对象&&原型的概念
- javascript实现web通讯的几种方式
- 什么是核心交换机的链路聚合、冗余、堆叠、热备份
- 周杰伦|周杰伦300多万NFT被黑客盗走 上链加密艺术就这?
- 恋恋不忘的原型小说 贺先生的恋恋不忘有小说吗
- 图解 MySQL 索引