CRLF-инъекция
Что такое CRLF-инъекция?
CRLF-инъекцияАтака, внедряющая символы возврата каретки и перевода строки в HTTP-заголовки, журналы и другие текстовые протоколы для подделки новых строк.
CRLF-инъекция эксплуатирует особое значение последовательности CR (0x0D) и LF (0x0A), которая разделяет строки во многих текстовых протоколах. Когда приложение без проверки помещает пользовательский ввод в HTTP-заголовки ответа, журналы, команды SMTP или LDAP-запросы, атакующий может вставить пару CRLF и дополнительные данные, чтобы подделать заголовки, разделить ответ, скрыть журналы или подсунуть команды. Слабость каталогизирована как CWE-93 (неправильная нейтрализация последовательностей CRLF); её специфичный для HTTP-заголовков потомок — CWE-113, охватывающий разделение HTTP-запросов/ответов.
В вебе наиболее опасная разновидность — HTTP response splitting, впервые описанная Амитом Кляйном из Sanctum в статье 2004 года. Поскольку внедрённый CRLF закрывает блок заголовков, атакующий может добавить второй, полностью подконтрольный ему ответ — отравить общие кеши, установить произвольные cookie или внедрить XSS в тело, которое браузер считает доверенным. Ошибка повторяется в стандартных библиотеках: CVE-2019-9740 позволяла последовательностям CRLF в URL, переданном в urllib.request.urlopen Python, внедрять HTTP-заголовки (и даже команды Redis через строку запроса); исправлена в Python 2.7.17 и 3.5.10/3.6.10/3.7.4. Защита — отказ принимать или процентное кодирование CR/LF в любом вводе, попадающем в заголовки, использование высокоуровневых API, отклоняющих управляющие символы в значениях заголовков, и строгие структурированные кодировщики журналов вместо сырой конкатенации строк.
flowchart TD
A[Ввод пользователя<br/>name=foo%0d%0aSet-Cookie: admin=true] --> B{Проверить / удалить CR LF?}
B -->|Нет| C[Ввод записан в заголовок как есть]
C --> D[CRLF завершает текущий заголовок]
D --> E[Подконтрольный атакующему заголовок или тело]
E --> F[Отравление кеша / инъекция cookie / XSS]
B -->|Да, отклонить CR LF| G[Безопасный ответ]● Примеры
- 01
Set-Cookie: id=foo%0d%0aSet-Cookie: admin=true — добавляет второй cookie через CRLF.
- 02
Location: /redir%0d%0aContent-Length:0%0d%0a%0d%0a<html>... — разделение HTTP-ответа.
● Частые вопросы
Что такое CRLF-инъекция?
Атака, внедряющая символы возврата каретки и перевода строки в HTTP-заголовки, журналы и другие текстовые протоколы для подделки новых строк. Относится к категории Атаки и угрозы в кибербезопасности.
Что означает CRLF-инъекция?
Атака, внедряющая символы возврата каретки и перевода строки в HTTP-заголовки, журналы и другие текстовые протоколы для подделки новых строк.
Как защититься от CRLF-инъекция?
Защита от CRLF-инъекция обычно сочетает технические меры и операционные практики, как описано в определении выше.
Какие есть другие названия CRLF-инъекция?
Распространённые альтернативные названия: Инъекция возврата каретки и перевода строки, Инъекция в журналы.