CRLF-инъекционная атака

Опубликовано: 23 Декабря, 2021

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 >
< script src = " http://hacker.com/script.js " >

Разные варианты использования:

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