iT邦幫忙

2021 iThome 鐵人賽

DAY 19
0

前言

你使用過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


上一篇
[Day18] Null byte Injection
下一篇
[Day20] Open Redirect - 開放重定向
系列文
讓Web開發者森77的Hacking Trick30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言