CRLF-инъекционная атака
CRLF - это аббревиатура, используемая для обозначения перевода каретки ( r), перевод строки ( n). Как можно заметить по символам в скобках, «возврат каретки» относится к концу строки, а «перевод строки» относится к новой строке. Следовательно, и CR, и LF используются для обозначения конечной точки линии. Когда пользователь запрашивает контент на веб-сайте, сервер возвращает содержимое веб-сайта вместе с заголовками HTTP. Заголовки и содержимое разделяются определенной комбинацией CR и LF. Именно благодаря CRLF сервер знает, где начинается или заканчивается новый заголовок. Уязвимость инъекции переноса строки возврата каретки (CRLF) - это тип инъекции на стороне сервера, которая возникает, когда злоумышленник вставляет символы CRLF в поле ввода, чтобы обмануть сервер, заставляя его думать, что объект завершился и начался новый. Это происходит, когда веб-приложение не очищает ввод пользователя от символов CRLF. Он имеет средний рейтинг серьезности (P3 согласно Bugcrowd's VRT).
Атака CRLF Injection имеет два наиболее важных варианта использования:
- Разделение журнала: злоумышленник вставляет символ конца строки и дополнительную строку, чтобы фальсифицировать записи файла журнала, чтобы обмануть системных администраторов, скрывая другие атаки.
- Разделение HTTP-ответа: CRLF-инъекция используется для добавления заголовков HTTP к HTTP-ответу и, например, для выполнения XSS-атаки, которая приводит к раскрытию информации.
Пример:
Простой запрос GET можно создать следующим образом:
GET /% 0d% 0aSet-Cookie: CRLFInjection = PreritPathak HTTP / 1.1
Примечание. % 0d и % 0a - это закодированные формы r и n соответственно. Если веб-приложение уязвимо, злоумышленник сможет установить файл cookie на веб-сайте.
Воздействие инъекции CRLF
CRLF Injection позволяет злоумышленнику устанавливать поддельные файлы cookie, красть токены CSRF, раскрывать информацию о пользователе путем внедрения сценария (XSS) и выполнять множество других атак. Это также позволяет злоумышленникам деактивировать и обходить меры безопасности, такие как фильтры XSS и политика одинакового происхождения (SOP), что делает их уязвимыми для следующих атак:
1. XSS или межсайтовый скриптинг
XSS или межсайтовый скриптинг - это уязвимость системы безопасности, которая позволяет злоумышленнику внедрить вредоносный код JavaScript в веб-приложение. Следующие запросы GET создаются в цепочке попыток внедрения CRLF с помощью XSS.
Путем появления предупреждения, содержащего конфиденциальную информацию о пользователе
www.target.com/%3f%0d%0aLocation:%0d%0aContent-Type:text/html%0d%0aX-XSS-Protection%3a0%0d%0a%0d%0a%3Cscript%3Ealert%28document.domain% 29% 3C / скрипт% 3E
Отключив защиту XSS
www.target.com/%0d%0aContent-Length:35%0d%0aX-XSS-Protection:0%0d%0a%0d%0a23
2. Внедрение файлов cookie
Разделение HTTP-ответа позволяет злоумышленнику установить вредоносные файлы cookie в браузере жертвы. В большинстве случаев следующий запрос GET приведет к перенаправлению 307, и, таким образом, жертва будет перенаправлена на target.com, а URL-адрес не будет содержать параметр Set-Cookie. Однако в фоновом режиме файл cookie будет установлен.
www.target.com/%0d%0aSet-Cookie:CRLFInjection=MaliciousCookieSet
3. Фишинговые атаки
Злоумышленник может установить заголовок Location, который перенаправит жертву на вредоносный веб-сайт. Этот веб-сайт может быть разработан так, чтобы он выглядел так же, как целевой веб-сайт, и когда жертва вводит свои учетные данные, они будут отправлены злоумышленнику. Заголовок местоположения может быть установлен как:
GET /%0d%0aLocation:%20https://evil.com HTTP / 1.1
4. Фиксация сеанса
Подобно атаке Cookie Injection, здесь злоумышленник устанавливает для идентификатора сеанса пользователя определенное значение. Эта ссылка отправляется жертве, и когда жертва входит в систему с использованием этого сеанса, злоумышленник также может войти в систему, используя тот же идентификатор сеанса.
www.target.com/%0d%0aSet-Cookie:session_id=942 ....
5. Внедрение заголовка HTTP
Злоумышленник может использовать CRLF-инъекцию для внедрения HTTP-заголовков в приложение, чтобы обойти механизмы безопасности, такие как фильтры XSS или политику того же происхождения.
www.target.com/%0d%0aHackersHeader:NewHeader
Заголовки активации CORS (Cross Origin Resource Sharing) могут быть введены, и злоумышленник может использовать JavaScript для доступа к конфиденциальным ресурсам, которые в противном случае защищены SOP (Same Origin Policy), которая предотвращает доступ сайтов из разных источников друг к другу.
6. Отравление веб-кеша
Отравление веб-кеша - это метод, с помощью которого злоумышленник может обслуживать отравленный контент, манипулируя веб-кешем. Чтобы успешно воспользоваться этой проблемой, злоумышленнику потребуется отравить кэширующий прокси уязвимого веб-сайта, синдикаторов, сети доставки контента (CDN) или другие механизмы кэширования между клиентом и сервером. После успешного заражения веб-кеша жертва не будет знать о вредоносном контенте, который ей обслуживает кеш. Ниже приведен пример того, как злоумышленник потенциально может использовать инъекцию заголовка хоста (с использованием CRLF), отравив веб-кеш.
Для следующего запроса:
$ telnet www.target.com 80 Пробуем хххх .. Подключен к www.target.com. Экранирующий символ - '^]'. GET /%0d%0aX-Forwarded-Host:hacker.com HTTP / 1.1 // или хост Хост: target.com
Был бы такой ответ:
HTTP / 1.1 200 ОК
html
< title >Example</ title > |
Разные варианты использования:
1. Внедрение поддельного заголовка HTTP-ответа:
Длина содержимого: 10
Теперь веб-браузер проанализирует только следующие 10 байтов.
2. Внедрение поддельного заголовка HTTP-ответа:
Content-Length: 0
Это рассматривается как прерванный ответ, и веб-браузеры начинают анализировать новый ответ.
Смягчения:
Чтобы предотвратить внедрение CRLF, разработчик должен помнить следующее:
- Санитарная обработка пользовательского ввода.
- Закодируйте символы CR и LF ( r, n), чтобы сервер не распознал их даже в том случае, если они указаны.
- Проверяйте вводимые пользователем данные до того, как они дойдут до заголовков ответов (например, с помощью таких методов, как StringEscapeUtils.escapeJava ()).
- Ненужный заголовок следует отключить.
В следующей таблице подчеркивается серьезность инъекции CRLF в соответствии с различными отраслевыми стандартами:
Классификация | ID / серьезность |
---|---|
OWASP 2017 | A1 |
CWE | 93 |
CVSS: 3.0 | CVSS: 3.0: AV: N / AC: L / PR: N / UI: N / S: U / C: H / I: L / A: H |
Bugcrowd VRT | P3 |