關於HTTPOXY漏洞的分析說明

2021-09-17 18:31:07 字數 2039 閱讀 5150

好久沒寫文章了, 部落格都長草了,早上起來本來想去上班,一看這麼大雨,這要上路了不得堵死啊。

\\ 再加上有同學對我昨天**的微博httpoxy漏洞表示不理解,問會不會影響普通應用,於是就寫篇文章介紹下,等早高峰過了吧;)…

\\ 不過要注意的是,這裡我只是介紹php這個角度,關於go和python等其他角度的,因為我也不是」很」懂,你們還是看原文吧 :)

\\ 漏洞原文在這裡,沒看懂的一定都是英語沒過6級的 :)

\\ 這裡有乙個核心的背景是,長久一來我們習慣了使用乙個名為http_proxy的環境變數來設定我們的請求**,比如在命令列我們經常這麼用:

通過設定乙個http_proxy的環境變數,讓wget使用**請求

\\ 有據可考的是,這樣的設定最初來自2023年的cern libwww 2.15,我猜測大概是當時很多任務具是基於這個類庫做的,於是就慢慢成了乙個既定標準吧.只不過這些應用都要求http_proxy是全部小寫的,還不足以造成今天這個漏洞。

\\ 但估計是因為環境變數習慣都是大寫的原因吧,後來有的類庫開始支援大寫的http_proxy,比如yum。

\\ 再後來很多的類庫,各種語言的,都開始支援這種配置,有的支援大寫的,有的支援小寫的,還有的都支援。\\

包括我們自己,也很有可能在日常的工作中寫出如下的**(我就曾經在寫爬蟲的時候寫過):

那麼問題來了,在cgi(rfc 3875)的模式的時候,會把請求中的header,加上http_字首,註冊為環境變數,所以如果你在header中傳送乙個proxy:******,那麼php就會把他註冊為http_proxy環境變數,於是getenv(「http_proxy」)就變成可被控制的了,那麼如果你的所有類似的請求,都會被**到攻擊者想要的位址,之後攻擊者就可以偽造,監聽,篡改你的請求了…

\\ 比如:

\\

\curl -h \"proxy:127.0.0.1:8000\"
\\

所以,這個漏洞要影響你,有幾個核心前提是:\\

如果你沒有滿足上面的條件,那麼恭喜你,你不受此次漏洞影響 :)。

\\

\

後記:經過微博同學的提醒,我可能把這個問題的影響潛意識的讓大家覺得危害不大,但實際上,延伸一下——所有http_開頭的環境變數在cgi下都是不可信的,千萬不要用於敏感操作,另外一點就是,我深刻的體會過,做安全的同學想象力非常豐富,雖然看似很小的乙個點,但到了安全的同學手裡,配合他們豐富的想象力,強大的社工能力,也是能做出巨大攻擊效果的….

\

\\

那知道了原理修復起來也很簡單了,以nginx為例,在配置中加入:

所以建議,即使你不受此次漏洞影響,也應該加入這個配置。

\\ 而如果你是乙個類庫的作者,或者你因為什麼原因沒有辦法修改服務配置,那麼你就需要在**中加入對sapi的判斷,除非是cli模式,否則永遠不要相信http_proxy環境變數。

就好比guzzle的這個修復:addressing http_proxy security vulnerability

\\

關於HTTPOXY漏洞的分析說明

好久沒寫文章了,部落格都長草了,早上起來本來想去上班,一看這麼大雨,這要上路了不得堵死啊。再加上有同學對我昨天 的微博httpoxy漏洞表示不理解,問會不會影響普通應用,於是就寫篇文章介紹下,等早高峰過了吧 不過要注意的是,這裡我只是介紹php這個角度,關於go和python等其他角度的,因為我也不...

關於HTTPOXY漏洞的分析說明

好久沒寫文章了,部落格都長草了,早上起來本來想去上班,一看這麼大雨,這要上路了不得堵死啊。再加上有同學對我昨天 的微博httpoxy漏洞表示不理解,問會不會影響普通應用,於是就寫篇文章介紹下,等早高峰過了吧 不過要注意的是,這裡我只是介紹php這個角度,關於go和python等其他角度的,因為我也不...

關於OpenSSL「心臟出血」漏洞的分析

ttp 當我分析gnutls的漏洞的時候,我曾經說過,那不會是我們看到的最後乙個tls棧上的嚴重bug。然而我沒想到這次openssl的bug會如此嚴重。openssl 心臟出血 漏洞是乙個非常嚴重的問題。這個漏洞使攻擊者能夠從記憶體中讀取多達64 kb的資料。一些安全研究員表示 無需任何特權資訊或...