Security
針對 CVE-2014-7169 的更新後的 Shellshock 漏洞測試如何工作?
我了解 CVE-2014-6271 的原始測試,即:
$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
但我對 CVE-2014-7169 的更新測試和相應輸出感到困惑:
$ env X='() { (a)=>\' sh -c "echo date"; cat echo sh: X: line 1: syntax error near unexpected token `=' sh: X: line 1: `' sh: error importing function definition for `X' Thu 25 Sep 2014 08:50:18 BST
有人可以簡要解釋一下這裡發生了什麼以及它如何繞過 CVE-2014-6271 的更新檔嗎?
自從我第一次發布這個問題以來,我一直在網上搜尋。
根據漏洞的原始發現者,在 CVE-2014-6271 更新檔之前的 bash 導入了一個函式,例如:
foo=() { code }
通過用空格替換等號並解釋它……這意味著解釋超出函式定義是可能的。
CVE-2014-6271的更新檔引入了 parse_and_execute() 函式的特殊模式,以限制對函式定義的評估,而不是超出它。
但是,正如該執行緒中所解釋的,CVE-2014-7169 漏洞測試的特製環境變數旨在 1) 將解析器混淆至死 2) 在緩衝區中留下碎片 3) 完全改變原始 bash 命令在它與緩衝區中已經存在的廢料相結合。
所以要剖析環境變數:
X='() { (a)=>\'
- 解析器將分析
() { (a)=>\
. 請注意,這\
是字元串的一部分;它沒有轉義尾隨單引號。
() {
- 解析器將此標識為函式定義。
(a)=
- 這會使解析器感到困惑。
>\
- 解析器將最後兩個字元留在緩衝區中。
>\[NEWLINE]
- 在
sh
命令執行之前的某個時刻,緩衝區中會放置一個換行符。
>\[NEWLINE]echo date
- 當
sh
被呼叫時(在這種情況下可能是 bash 的符號連結),它會將其命令參數 , 添加echo date
到緩衝區中已經存在的字元中。
>echo date
- 由於換行符被轉義,bash 會將緩衝區解析為
>echo date
,其效果與date > echo
. 創建一個名為的文件echo
,並將命令的標準輸出date
重定向到其中。
; cat echo
- 第二個命令只是顯示新創建文件的內容。