6.9. „Protokol Manipuláció – http Válasz Elosztás” (Protocol Manipulation - Http Response Splitting)

6.9.1. Leírás

HTTP válasz elosztás (HTTP response splitting) történik, amikor:

  1. Adat kerül a webes alkalmazásba rendezetlen forráson keresztül, ami legtöbbször egy HTTP kérelem.

  2. Az adat egy HTTP válasz fejlécben szerepel, amit egy web használónak küldtek anélkül, hogy a káros karaktereket ellenőrzése megtörtént volna.

A „HTTP response splitting” a befejezés egy módja, nem pedig a befejezés maga. Alapjaiban véve a támadás meglehetősen egyszerű: a támadó káros adatot továbbít egy sebezhető alkalmazásnak, az alkalmazás pedig beleteszi az adatot a HTTP válasz fejlécébe.

A sikeres támadás érdekében, az alkalmazásnak engedélyeznie kell az olyan adatbevitelt, ami CR (carriage return, %0d vagy \r) és LF (line feed, %0a vagy \n) karaktereket is beenged a fejlécbe. Ezek a karakterek nem csak irányítást adnak a támadónak az alkalmazás által küldeni szándékozott válasz maradék fejléce és főrésze fölött, de azt is lehetővé teszik, hogy újabb, teljesen az irányítása alatt lévő válaszokat adjon.

6.9.2. Példák

A következő kódrészlet kiolvassa egy weblog szerzőjének a nevét egy HTTP kérelemből és cookie fejlécként beállítja egy HTTP válaszban.

           String author = request.getParameter(AUTHOR_PARAM);
           ...
           Cookie cookie = new Cookie("author", author);
           cookie.setMaxAge(cookieExpiration);
           response.addCookie(cookie);
         

Ha feltételezzük, hogy olyan sztringet küldünk el a kérelemben, ami csupa normál alfanumerikus karakterből áll, mint például „Jane Smith”, akkor a HTTP válasz, ami ezt a cookie-t tartalmazza a következő formájú lehet:

             HTTP/1.1 200 OK
           ...
           Set-Cookie: author=Jane Smith
           ...
    

De mivel a cookie értéke ellenőrizetlen felhasználói adatbevitelből lett formázva, a válasz csak akkor fogja fenntartani ezt a formát, ha az AUTHOR_PARAM-nak küldött érték nem tartalmaz CR vagy LF karaktereket. Ha a támadó küld egy káros sztringet, mint például "Wiley Hacker\r\nHTTP/1.1 200 OK\r\n...", akkor a HTTP válasz két különböző válaszra lenne bontva, a következő formában:

        HTTP/1.1 200 OK
        ...
          Set-Cookie: author=Wiley Hacker
          
          HTTP/1.1 200 OK
          ...

Nyilvánvaló, hogy a második választ teljesen a támadó irányítja, olyan tartalmú fejlécet és törzset ad neki, amilyet szeretne. Az, hogy a támadó olyan HTTP választ generál, amit akar, lehetővé tesz több más fajta támadást is, többek között a következőket:

Cross-User Defacement, Cache Poisoning, Cross-site Scripting (XSS) és Page Hijacking.