HTTP 響應分割漏洞
- 1.漏洞概述
- 2.漏洞案例
1.漏洞概述
HTTP 響應拆分發生在以下情況:
- 數據通過不受信任的來源(最常見的是 HTTP 請求)進入 Web 應用程序。
- 該數據包含在發送給 Web 用戶的 HTTP 響應標頭中,且未經過惡意字符驗證。
從根本上來說,攻擊很簡單:攻擊者將惡意數據傳遞給易受攻擊的應用程序,并且該應用程序將數據包含在 HTTP 響應標頭中
要成功利用該漏洞,應用程序必須允許將包含 CR(回車符,也由 %0d
或 \r
給出)和 LF(換行符,也由 %0a
或 \n
給出)字符輸入到標頭
2.漏洞案例
以下代碼段從 HTTP 請求中讀取博客條目作者的姓名,并將其設置在 HTTP 響應的 cookie 標頭中:
String author = request.getParameter(AUTHOR_PARAM);
...
Cookie cookie = new Cookie("author", author);
cookie.setMaxAge(cookieExpiration);
response.addCookie(cookie);
一個正常的請求(例如“Jane Smith”),則包含此 cookie 的 HTTP 響應可能采用以下形式:
HTTP/1.1 200 OK
...
Set-Cookie: author=Jane Smith
...
如果攻擊者提交惡意字符串,例如“Wiley Hacker\r\nContent-Length:999\r\n\r\n...
”,則 HTTP 響應將被拆分為冒名頂替者響應,后跟原始響應:
HTTP/1.1 200 OK
...
Set-Cookie: author=Wiley Hacker
Content-Length: 999<html>malicious content...</html> (to 999th character in this example)
Original content starting with character 1000, which is now ignored by the web browser...
攻擊者構造任意 HTTP 響應的能力允許產生各種攻擊,包括:跨用戶破壞、緩存中毒、跨站點腳本 (XSS)和頁面劫持