悟空云課堂丨代碼安全第二十二期:HTTP響應(yīng)拆分漏洞

中科天齊傾情打造《悟空云課堂》旨在科普軟件安全相關(guān)知識,助力企業(yè)有效防范軟件安全漏洞,提升網(wǎng)絡(luò)安全防護(hù)能力。本期主題為HTTP響應(yīng)拆分漏洞的相關(guān)介紹。
一、什么是HTTP響應(yīng)拆分?
HTTP響應(yīng)拆分是由于應(yīng)用程序未對用戶提交的數(shù)據(jù)進(jìn)行嚴(yán)格過濾,如果用戶輸入的值中注入了CRLF字符,有可能改變HTTP報頭結(jié)構(gòu)。
HTTP響應(yīng)拆分漏洞,也叫CRLF注入攻擊。CR、LF分別對應(yīng)回車(即URL編碼%0d或\r)、換行(即URL編碼%0a或\n)字符。HTTP頭由很多被CRLF組合分離的行構(gòu)成,每行的結(jié)構(gòu)都是“鍵:值”。
攻擊者可以在HTTP標(biāo)頭中包含攻擊的報文數(shù)據(jù),從而讓瀏覽器按照攻擊者想要達(dá)到的目的進(jìn)行HTTP響應(yīng)。 當(dāng)HTTP請求中包含CR和LF字符時,服務(wù)器可能會響應(yīng)輸出流,該輸出流被解釋為兩個不同 HTTP響應(yīng)(而不是一個)。攻擊者可以實現(xiàn)對第二個響應(yīng)報文的控制并發(fā)起攻擊。例如跨站點腳本和緩存中毒攻擊。
二、HTTP響應(yīng)拆分漏洞構(gòu)成條件有哪些?
滿足以下條件,就構(gòu)成了一個該類型的安全漏洞:
1、數(shù)據(jù)通過不受信任的源(最常見的是HTTP請求)進(jìn)入web應(yīng)用程序;
2、數(shù)據(jù)包含在發(fā)送給web用戶的HTTP響應(yīng)頭中,而不會驗證是否存在惡意字符。
三、HTTP響應(yīng)拆分漏洞會造成哪些后果?
關(guān)鍵詞:修改應(yīng)用程序數(shù)據(jù);獲取特權(quán)或假定身份;
HTTP報頭中的CR和LF字符可能會讓攻擊者控制應(yīng)用程序打算發(fā)送的其余報頭和響應(yīng)主體,并允許他們創(chuàng)建完全在其控制下的附加響應(yīng)。
四、HTTP響應(yīng)拆分漏洞的防范和修補(bǔ)方法有哪些?
1、限制用戶輸入的CR和LF,或者對CR和LF字符正確編碼后再輸出,以防止注入自定義HTTP頭;
2、使用源代碼靜態(tài)分析工具進(jìn)行自動化的檢測,可以有效的發(fā)現(xiàn)源代碼中的HTTP響應(yīng)拆分問題。
五、HTTP響應(yīng)拆分漏洞樣例:

用Wukong軟件檢測上述程序代碼,則可以發(fā)現(xiàn)代碼中存在著“HTTP響應(yīng)拆分” 導(dǎo)致的代碼缺陷,如下圖:

HTTP響應(yīng)拆分在CWE中被編號為CWE-113: Improper Neutralization of CRLF Sequences in HTTP Headers('HTTP Response Splitting')
參讀鏈接:https://www.woocoom.com/b021.html?id=bd0bd9e7bfee4fdda92b84c6f98b9dcf
