В последнее время в новостях все больше информации появляется по уязвимостям класса
HTTP Response Splitting, однако о самой сущности уязвимости известно мало (по крайней мере в русском Инете

), посему мы восполним пробел и расскажем о концепции данной уязвимости. Ниже привожу рассказ авторов "сенсации", непосредственно открывших новую уязвимость.
В процессе разработки AppScan (утилита для тестов по безопасности компании Sanctum) мы столкнулись с новым видом атак, который назвали HTTP Response Splitting. Это достаточно мощная и в то же время элегантная техника может найти свое применение во многих веб-средах.
HTTP Response Splitting позволяет проводить целый ряд атак, таких как отравление кэша, cross-user defacement, угон пользовательской информации и Cross-Site Scripting (о них читайте ниже). Ошибки HTTP Response Splitting и его производные свойственны большинству веб-приложений и являются следствием невозможности правильно обработать ввод пользователя, в данном случае неожидаемые символы CR или LF.
Атака HTTP Response Splitting может состояться как минимум при участии трех составляющих:
Уязвимого веб-сервера.
Цели, взаимодействующей с сервером. Обычно это кеширующий сервер (прокси) или броузер (со своим кешем соответственно).
Атакующего, инициирующего нападение.
Сердцем атаки является возможность хакера послать единственный HTTP запрос, который заставит веб-сервер сформировать такой выходной поток, который примется жертвой за целых два HTTP ответа (вместо правильного одного). Первый ответ может частично контролироваться нападающим, однако в этом случае это не важно. Что гораздо более важно - нападающий должен полностью составлять второй ответ - от статуса HTTP до последнего его байта. Если это оказывается возможным, хакер (в самом простом случае) инициирует атаку двумя запросами от жертвы. Первый получает два ответа от веб-сервера, второй обычно обращается к некому невинному ресурсу на сервере. Однако, следите за руками: второй запрос замещается на получателе вторым HTTP ответом от первого "разделенного" запроса, который полностью контролируется хакером. Атакующий таким образом подставляет своей жертве вместо запрошенного ресурса некоторый объем информации им же и сформированный - второй ответ в первом запросе.
Обычно уязвимости такого рода возникают когда серверные скрипты внедряют пользовательские данные в заголовки HTTP ответов - например в URL перенаправления (статус HTTP 3.xx), или когда программы формируют куки на основе введенных пользователем данных. В первом случае URL часть Location HTTP response header, а во втором - Set-Cookie HTTP response header.
Для примера возьмем JSP скрипт redir_lang.jsp. При вызове redir_lang.jsp с параметром lang=English, он перенаправляет пользователя на by_lang.jsp?lang=English. Как видно, параметр языка внедряется в заголовок. С точки зрения HTTP response-splitting, мы можем послать вместо English строку с CRLF, что прервет первый ответ и запустит второй.
Как я уже говорил, HTTP response-splitting открывает целое поле для других атак:
Cross-site scripting - с подменой заголовка Location.
Web-cache poisoning (дефейс) - понятно, что в данном случае мы заставляем жертву вместо http://web.site/index.html получить второй ответ и тем самым мы можем показать ей все, что угодно. В дополнение в этой атаке можно похитить у ушастого куки или изменить их.
Cross-user attacks - атакующий не шлет второго запроса, однако в некоторых случаях сервер может разделять ТСР соединения между несколькими пользователями (некоторые кеш сервера) и в таком случае следующий запрос от жертвы получит второй ответ HTTP Response.
Угон страниц с пользовательской инфой - хакер может получить ответ сервера, принадлежащий пользователю.
Browser-cache poisoning - вариант похож на XSS, однако он предназначается одному человеку и длится несколько дольше, так как поддельный ресурс остается в кеше броузера.
Мораль: HTTP response splitting - новый вид атак. Он возможен только в тех приложениях, где пользовательские данные передаются в заголовке HTTP ответа. В то же время и побороть такие ошибки достаточно просто - достаточно внедрить проверку передаваемых от юзеров величин. Примеров таких атак множество в сети - изучайте, пользуйтесь.
[ by: -=Jul=- ] [ 17.11.05 ]
(с)DKCS security