[Day19 ] Prototype Pollution - Prototype污染

前言

你使用过Prototype,那你知道它可以被污染吗?

正文

概念

Javascript的物件透过Prototype机制相互继承功能(属性、方法),这种Object-base的继承方法让Web开发者可以很有效率和灵活的方式开发。

然而,这种方式也让他变得很容易被窜改。Prototype Pollution就是攻击者可以通过修改object在应用程序范围内对所有object进行增加、更改现有属性(property)。

当Prototype Pollution发生时,可以触发Javascript导致应用程序的程序码被窜改、XSS、DOS甚至是RCE,严重程度和危害性通常很高。

从上面这张图可以看到,我们用Javascript建立一个简单的Object,有prop1,prop2可以访问,除此之外,还有很多其他属性可以使用和访问,例如toString,这就是因为prototype的关系。当访问object中部存在的属性的时候javascript会在Object的prototype中寻找这个属性。

{
prop1: 1,
prop2: 2
}

这边建立的object的prototype会被设置成Object.prototype,这也是为甚麽当我们输入
testObj.__proto__ === Object.prototype
时会response true的原因

而Prototype Pollution就是利用Web Application中的错误导致Object.prototype可以被覆盖,而又因为每个(典型的)Object都从Object.prototype继承属性,因此我们就可以利用这点来改变应用程序的行为,例如一个简单(常用)的范例:

if (user.isAdmin){

...

}

而这个网站存在Prototype Pollution问题时,我们就可以通过
Object.prototype.isAdmin = true
来让我们在进行管理员身分验证时,始终是ture的状态,bypass了验证机制,或是污染其他的属性像是,cookie,token之类的具有安全效果或身分认证的属性。

Case Study

CVE-2019-7609
官方描述

Kibana versions before 5.6.15 and 6.6.1 contain an arbitrary code execution flaw in the Timelion visualizer. An attacker with access to the Timelion application could send a request that will attempt to execute javascript code. This could possibly lead to an attacker executing arbitrary commands with permissions of the Kibana process on the host system.

简单来说,特定版本的Kibana在Timelion包含可以执行任意程序码的漏洞,有Timelion访问权限的使用者可以发送执行javascript程序码的请求,导致Server用Kibana的权限执行任意命令。

在Timelion中,可以撰写一些expressions来做可视化数据,在这个撰写expressions的地方,就可以使用prop function来操纵一些属性,或是将Object指定(分配)给其他Object。在nodejs中,可以使用NODE_OPTIONS将command line参数传给nodejs,利用--require就可以做到执行部分程序码,甚至透过一些条件来达成RCE。详细可参考此Github

  • 其他Prototype Pollution案例

jQuery - CVE-2019-11358

Hacker One:
Prototype Pollution leads to XSS on swiftype.com


<<:  Day 19 民生公共物联网资料应用竞赛,产品设计讨论过程分享

>>:  Day19 React-Router(四)Hook获取route资讯

[Day 8] Vue的模板语法(Template Syntax)---插值

Vue的模板语法分成两种---插值和指令,而今天我们要来讲的是插值的部分,插值就是Mustache语...

TypeScript | interface 研究心得纪录 1

我习惯理解一个东西,可以套用日常的生活经验,找出类比、拟人化会帮助我更好理解,今天的议题是最近看到 ...

自己做个好用的pysdie 2 cheat sheet

在很多地方都流行可以随时查找的cheatsheet,那PySide2 有吗? 笔者不清楚,乾脆直接做...

咏唱防御魔法,抵御外敌攻击AWS上的服务

防御魔法 今日会继续介绍其他服务的撰写方式,因为篇幅关系,之前讲过的方式,就不会继续在讲述: EC2...

Day02 - this&Object Prototypes Ch3 Objects - Contents - Array

今天读 Ch3 Objects 的 Contents 小节旗下的 Array 小小节 Array 作...