好久沒寫文章了, 部落格都長草了,早上起來本來想去上班,一看這麼大雨,這要上路了不得堵死啊。
\\ 再加上有同學對我昨天**的微博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的資料。一些安全研究員表示 無需任何特權資訊或...