CVE-2020-7699:NodeJS模塊代碼注入

2020-12-14 騰訊網

研究人員在下載量超700萬的Node.js 模塊中發現其存在安全漏洞,攻擊者利用該漏洞可以發起DoS 攻擊或完全獲取遠程shell 訪問權限。

該漏洞CVE編號為CVE-2020-7699,位於express-fileupload npm組件中,該組件從npm處下載量超過730萬,其中不含有從GitHub、鏡像網站和其他克隆庫中下載的。

該漏洞屬於Prototype Pollution(原型汙染)漏洞類型,這是JS代碼中的常見漏洞類型。因為JS是基於原型的語言,語言中的每個對象、函數和數據結構都有Prototype特徵,可以通過"_proto__"進行修改。

使用這種設計漏洞的原型攻擊通過注入不相適應的對象類型到現有的對象中來引發錯誤,導致DoS攻擊。

利用現有原型的攻擊

由於express-fileupload 提供的"parseNested"特徵使得現實的攻擊成為可能。啟用"parseNested"選項後,其負責將上傳的JSON數據轉化為對象。

安全研究人員Posix稱express-fileupload 模塊提供了[Node.js] 應用中上傳和管理文件的多個選項,其中parseNested負責將參數降維。

'parseNested'選項如下圖所示:

有漏洞的express-fileupload配置

在"Content-Disposition" HTTP header中提供一個簡單的payload,攻擊者就可以提供一個"__proto__.toString" 值來觸發攻擊。

可以觸發原型汙染攻擊的樣本payload

"_proto__" 可以影響JS的原型特徵,因為繼承了所有JS對象和結構。

通過逆向shell實現遠程代碼執行

此外,攻擊者還可以在有漏洞的系統上獲取shell。該漏洞利用了有漏洞的express-fileupload 版本,使用了模板引擎EJS(嵌入式JS模板)。

假設你的應用使用了EJS 來分析上傳的數據,而沒有進行額外的檢查。那麼攻擊者就可以發送一個HTTP 請求來覆寫EJS的outputFunctionName 選項。

遠程代碼執行的EJS payload

上面的payload中利用了express-fileupload 中的原型汙染,讓EJS 來啟動Node.js 子進程。新啟動的進程可以派生一個逆向shell到攻擊者的計算機。

建立連接後,攻擊者就可以在被黑的伺服器上執行任意代碼。

通過EJS payload實現shell 訪問

漏洞影響

研究人員稱該漏洞並不影響所有用戶。只有啟動了"parseNested" 選項的應用受到該原型汙染漏洞的影響。

此外,為了實現完全的shell訪問和遠程代碼執行,有漏洞的express-fileupload和EJS庫是必備條件。但需要注意的是EJS 並不是唯一實現shell 訪問的唯一庫。在接收到研究人員的報告後,express-fileupload很快就修復了該漏洞,用戶可以更新到npm v1.1.9。

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

相關焦點

  • 簡單說說Nodejs框架Koa和Express
    之前有一篇文章寫到過nodejs的express框架,個人覺得寫的還挺不錯然後最近在工作當中接觸使用到了一個更為年輕的框架--koa框架
  • 基於NodeJS從零構建線上自動化打包工作流
    但是我們仔細思考之後就能發現, 這些產物的背後都是靠nodejs和babel做底層支持。我們無非就是設計一種架構模式,通過babel的加載器和nodejs的服務能力,將代碼由JS - AST - JS的過程(這裡忽略css和插件處理)。在吹完牛逼之後,我們開始介紹如何設計一款在線工作流。1.
  • nodejs的調試debug
    nodejs也不例外。今天我們來詳細介紹一下如何調試nodejs程序。開啟nodejs的調試還記得之前我們講到的koa程序嗎?本文將會以一個簡單的koa服務端程序為例,來展開nodejs的調試。我們需要加上 –inspect 參數:node --inspect app.js上面的代碼將會開啟nodejs的調試功能。
  • 知錯能改的nodejs之父
    而隨之帶來的就是在2009年,伺服器端的node誕生了,而這個語言的創造者就是今天我們要介紹的主人公——nodejs之父-Ryan Dahl。Ryan Dahl出生在美國加利福尼亞洲的聖地牙哥。他的家庭環境很好,小的時候,他的父母就給他買了一臺Apple IIc電腦。
  • 格物致知-記一次Nodejs源碼分析的經歷
    作者: theanarkh 來源:編程雜技昨天分析http模塊相關的代碼時,遇到了一個晦澀的邏輯,看了想,想了看還是沒看懂。百度、谷歌了很多帖子也沒看到合適的答案。突然看到一個題目有點相似的搜索結果,點進去是Stack Overflow上的帖子,但是已經404,最後還是通過快照功能成功看到內容。
  • SUMAP網絡空間測繪|2021年CVE漏洞趨勢安全分析報告
    圖 :cve 10年增長趨勢 通過圖1-1整體趨勢我們可以看出歷年漏洞數量整體還是持續增長,並且在10年中最明顯的變化2020年的cve數量已經超過
  • 高清還原漏洞——被微軟發布又秒刪的遠程預執行代碼漏洞CVE-2020...
    概述  ◆2020年3月10日是微軟補丁日,安全社區注意到Microsoft發布並立即刪除了有關CVE-2020-0796的信息;  ◆2020年3月11日早上,Microsoft發布了可糾正SMBv3協議如何處理特製請求的修補程序;  ◆2020年03月
  • JavaScript之nodeJS核心API中fs模塊的方法詳解
    上篇文章中我們知道fs模塊中路徑操作存在下面的問題使用 fs 模塊操作文件的時候,如果提供的操作路徑是相對路徑, 則會根據當前執行node命令時的磁碟目錄,去拼接提供的文件的相對路徑,從而容易出現問題;
  • 利用運行按鈕,從模塊(Module)運行代碼
    今日的內容是第一章「初識VBA代碼及應用VBA代碼」的第三節「利用運行按鈕,從模塊(Module)運行代碼」第三節 利用運行按鈕,從模塊(Module)運行代碼作為Excelvba的初學者,您可能會發現很難決定將VBA代碼放在哪裡。
  • 標準模塊代碼(Standard Code Modules)的深度解讀
    大家好,我們這講開始一個新的專題,這個專題中我們首先講解一下VBA代碼應用的模塊(module),然後介紹給大家如何利用VBA代碼實現已經打開文件的自動關閉。我們要知道,模塊是代碼的容器。所有代碼必須寫在模塊中才能執行。可以將模塊看做為一個文件,實際上,我們確實可以將模塊導出為一個文本文件。
  • 前端理解依賴注入(控制反轉)
    ,個人覺得面向對象的應用是前端對於項目以及整體架構來講是一件利器,代碼結構好與壞與面向對象有一定的關係,但不是全部。不過我們可以藉助計算機領域的一些優秀的編程理念來一定程度上解決這些問題,接下來簡單的說下依賴注入(控制反轉)。什麼是依賴注入依賴注入一般指控制反轉,是面向對象編程中的一種設計原則,可以用來減低計算機代碼之間的耦合度。
  • CVE-2020-0423 Android內核提權漏洞分析
    官方給出影響的版本在Android 8-11之間,詳細的英文文章請參考這裡https://blog.longterm.io/cve-2020-0423.html。binder_work到thread->todo鍊表中當sender線程傳送的內容裡包括BINDER_TYPE_BINDER或者BINDER_TYPE_WEAK_BINDER,binder_node結構體將會創建,接收端的線程同時會有一個引用(如果這個引用變為0,將會釋放binder_node)這時候會調用binder_translate_binder,最終會走到以下代碼
  • Java Web系列:Spring依賴注入基礎
    因此學習Spring Framework在架構和模式方面的結構和原理,對我們在架構和模塊級別的理解幫助極大。Spring Framework(參考1)的宗旨是簡化Java開發,主要的手段如下:(1)在架構上解耦:通過DI(依賴注入)管理類型依賴,通過AOP分離關注點,減少重複代碼。
  • python String模塊在實際應用的代碼介紹
    python String模塊在實際應用的代碼介紹 本文以python String模塊的相關代碼的方式來介紹python String模塊的具體應用方法的介紹,那麼下面的文章就讓我們一起分享吧!
  • CVE-2018-11235:git爆遞歸clone嚴重漏洞致任意代碼執行
    該漏洞允許在運行'git clone --recurse-submodules'(或已棄用的'git clone --recursive')時可實現任意代碼的執行。惡意倉庫包含指向倉庫外部的.git modules子模塊配置文件。 當git clone這樣的倉庫時,它可以被誘騙到clone子模塊內(非.git目錄)的hook,從而實現任意代碼執行。
  • cve-2015-6620學習總結
    想學習下 Android漏洞方面的知識,搜了下發現Flanker Edward在知乎上有個回答,提到了binder的經典漏洞cve
  • Node初學者入門,一本全面的NodeJS教程(上)
    但是如果我想加入更多的內容,同時還想保持代碼的可讀性呢?實際上,只要把不同功能的代碼放入不同的模塊中,保持代碼分離還是相當簡單的。這種方法允許你擁有一個乾淨的主文件(main file),你可以用Node.js執行它;同時你可以擁有乾淨的模塊,它們可以被主文件和其他的模塊調用。
  • 和平精英漂亮女生捏臉代碼一覽 美女捏臉代碼合集
    漂亮女生捏臉代碼有哪些?很多玩家在找好看的捏臉代碼,這裡小編就給大家帶來了和平精英漂亮女生捏臉代碼匯總,有需要的玩家一起來看看吧。和平精英漂亮女生捏臉代碼匯總1.鄰家小姐姐代碼:3109-4204-4061-2255-122、陽光少女代碼:3042-1774-7699-5866-57
  • 深入研究VBScript—CVE-2018-8174利用分析
    在腳本執行之前,它被編譯成p代碼,然後由虛擬機解釋。沒有找到關於此虛擬機的內部結構及其說明的開源信息。我花了很多精力來追蹤幾個網頁,其中包含1999年和2004年的微軟工程師報告,這些報告與p代碼相關。那裡有足夠的信息讓我完全逆向所有VM指令並寫一個反彙編程序!在我們的Github存儲庫中可以找到用於在IDA Pro和WinDBG調試器的內存中反彙編VBScript p代碼的最終腳本。