CVE-2024-2398
libcurl HTTP/2 push: утечка памяти при слишком большом числе заголовков
Проверьте приложения с libcurl 7.44.0–8.6.0, если они разрешают HTTP/2 server push. При отклонении push с более чем 1000 заголовками память не освобождалась; исправлено в 8.7.0.
Кому нужно проверить
Разработчикам и администраторам приложений, которые используют libcurl с HTTP/2 server push. Важна не только марка продукта, но и конкретная версия, способ установки, операционная система и конфигурация.
В чём риск
Если сервер отправит более 1000 заголовков в push и приложение его отклонит, libcurl может не освободить уже занятую память. Повторение ситуации способно увеличить расход памяти клиентского процесса. Сам curl CLI, по advisory, не затронут.
Затронутые версии
Затронуты версии curl/libcurl 7.44.0–8.6.0, но проблема есть только в приложениях, которые явно разрешают HTTP/2 server push (серверную отправку дополнительных ответов). Командная строка curl сама по себе не затронута. Проверьте конкретную сборку и приложение: оно может использовать встроенную libcurl.
Исправленные версии
Исправлено в curl/libcurl 8.7.0. Для пакетов ОС проверьте наличие backport-исправления у поставщика: номер версии пакета может отличаться от версии upstream.
Что сделать
- 1Уточните, использует ли ваше приложение libcurl, какая именно библиотека загружена и разрешён ли в коде HTTP/2 server push. Проверка системной команды curl не всегда отвечает на эти вопросы.
- 2Подготовьте резервную копию конфигурации/образа приложения и протестируйте обновлённую библиотеку на staging, включая обычные HTTP/2 запросы.
- 3Обновите libcurl до 8.7.0 или установите исправленный пакет поставщика. Для статически собранного приложения пересоберите и разверните само приложение.
- 4До обновления временно отключите server push, если это можно сделать в приложении без нарушения его работы. Это ограничивает путь к проблеме, но не исправляет библиотеку.
- 5После обновления проверьте запуск приложения, журналы и использование памяти под штатной нагрузкой. Держите готовым откат на предыдущий исправленный образ, а не на уязвимую версию.
От заголовков HTTP/2 к расходу памяти
Уязвимый путь существует в приложении с включённым HTTP/2 server push; обычный curl CLI под него не подпадает.
- 1Приложение разрешает HTTP/2 server push.
- 2Сервер отправляет push с более чем 1000 заголовками.
- 3libcurl отклоняет push, но не освобождает всю выделенную память.
- 4Исправленная libcurl освобождает заголовки при ошибке.
Примеры конфигурации и проверки
curl -q --versionБезопасная read-only команда для терминала Linux/macOS, без sudo и сетевого подключения. Показывает версию именно запускаемого исполняемого файла и его возможности. Она не доказывает, какую libcurl загружает другое приложение; для него проверьте зависимости и сведения у владельца сборки. -q отключает чтение стандартного файла настроек. Никаких изменений, требующих отката, команда не вносит.
Как не подпустить ботов к сайту
BotProtection принимает запросы перед вашим сайтом и фильтрует автоматизированные обращения. Поэтому ботам сложнее добраться до уязвимого компонента и начать его проверять или атаковать, а вероятность успешной автоматизированной атаки становится значительно ниже. Это дополнительный слой защиты: обновление уязвимых компонентов, проверка журналов и реагирование на инциденты остаются обязательными.
Первоисточники
Снизьте шанс атаки до того, как бот дойдёт до сайта
Подключите BotProtection как фильтр перед сайтом: подозрительные автоматизированные запросы отсекаются до обращения к вашему серверу. Это значительно снижает вероятность автоматизированной атаки, но не исправляет саму уязвимость, поэтому обновление и настройка компонентов остаются обязательными.