CVE-2026-18924 в Ubuntu: use-after-free в libcurl при обработке HTTP/2 Server Push

CVE: CVE-2026-18924
Продукт: Ubuntu
Дата публикации: 06.09.2026
Критичность: CRITICAL
CVSS: 9.1 (3.1)
EPSS: 0,61%; процентиль 47,10%
CISA KEV: нет подтверждения в каталоге CISA KEV

Краткое описание​


В libcurl обнаружен дефект, приводящий к use-after-free при обработке потоков HTTP/2 Server Push в режиме общего использования соединений. Уязвимость затрагивает широкий спектр версий Ubuntu, включая LTS-релизы и системы, поддерживаемые через Ubuntu Pro. В материале описаны технические причины ошибки, условия эксплуатации и порядок проверки установленных пакетов.

Основные характеристики​


Дефект позволяет нарушителю повлиять на память процесса, использующего libcurl, что может привести к выполнению кода или сбою службы. Риск оценивается как критический, поскольку атака возможна удалённо без предварительной аутентификации.

  • Тип ошибки: CWE-416 (Use After Free). Обращение к освобождённой памяти приводит к непредсказуемому поведению программы.
  • CVSS: 9.1 (CRITICAL). Вектор: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H. Высокая оценка обусловлена удалённым доступом и отсутствием требований к пользователю.
  • Эксплуатация: Подтверждена через HackerOne, но массовая эксплуатация в дикой природе не зафиксирована.
  • EPSS: 0,61% (процентиль 47,10%). Вероятность эксплуатации в ближайшие 30 дней оценивается как низкая, но не нулевая.

Какие продукты и версии затронуты​


Уязвимость затрагивает пакет curl и связанные библиотеки libcurl в дистрибутивах Ubuntu. Список включает как текущие LTS-релизы, так и версии, поддерживаемые через Ubuntu Pro (ESM).

  • Ubuntu 26.04 LTS (resolute): curl 8.18.0-1ubuntu2.5, libcurl3t64-gnutls, libcurl4t64.
  • Ubuntu 24.04 LTS (noble): curl 8.5.0-2ubuntu10.13, libcurl3t64-gnutls, libcurl4t64.
  • Ubuntu 22.04 LTS (jammy): curl 7.81.0-1ubuntu1.27, libcurl3-gnutls, libcurl3-nss, libcurl4.
  • Ubuntu 20.04 LTS (focal, ESM): curl 7.68.0-1ubuntu2.25+esm7, libcurl3-gnutls, libcurl3-nss, libcurl4.
  • Ubuntu 18.04 LTS (bionic, ESM): curl 7.58.0-2ubuntu3.24+esm12, libcurl3-gnutls, libcurl3-nss, libcurl4.
  • Ubuntu 16.04 LTS (xenial, ESM): curl 7.47.0-1ubuntu2.19+esm18, libcurl3, libcurl3-gnutls, libcurl3-nss.
  • Ubuntu 14.04 LTS (trusty, ESM): curl 7.35.0-1ubuntu2.20+esm22, libcurl3, libcurl3-gnutls, libcurl3-nss.

Причина уязвимости​


Причина дефекта кроется в некорректном управлении жизненным циклом объектов при обработке потоков HTTP/2 Server Push. Если родительский обработчик (handle) настроен на шаринг соединений с другими обработчиками, возникает конфликт в очистке ресурсов.

В процессе очистки (cleanup) libcurl обращается к памяти, которая уже была освобождена ранее. Это классический сценарий use-after-free: указатель продолжает использоваться после вызова free() или аналогичной операции. В результате нарушается целостность структуры данных, что может быть использовано для перезаписи указателей и управления потоком выполнения программы.

Как работает атака​


Атака реализуется через сетевой канал. Злоумышленник отправляет специально сформированный HTTP/2-запрос, инициирующий Server Push. Ключевым условием является использование клиентом libcurl в режиме, где соединения разделяются между несколькими обработчиками.

При обработке такого потока libcurl попадает в ветку кода, где происходит преждевременное освобождение памяти, связанной с потоком. Последующее обращение к этой памяти в процессе очистки соединения приводит к повреждению кучи. Атакующий может контролировать содержимое освобождённого блока, чтобы подменить указатели на функции или данные, что в итоге приводит к выполнению произвольного кода в контексте процесса, использующего libcurl.

Условия успешной эксплуатации​


Для успешной эксплуатации уязвимости необходимо соблюдение ряда условий, связанных с конфигурацией клиента и сетевым доступом.

  • Доступ к клиенту: Атакующий должен иметь возможность отправлять HTTP/2-запросы на уязвимый сервис или приложение, использующее libcurl.
  • Конфигурация libcurl: Клиент должен быть настроен на использование HTTP/2 и иметь активный режим шаринга соединений (shared connections) между обработчиками.
  • Отсутствие защиты: Сервер или прокси, стоящий перед приложением, не должен отсекать или модифицировать HTTP/2 Server Push таким образом, чтобы предотвратить срабатывание дефекта.

Возможный сценарий атаки​


Типичный сценарий предполагает, что уязвимое приложение (например, веб-сервер или бот) делает исходящие HTTP/2-запросы к внешнему ресурсу, управляемому атакующим. Атакующий сервер отправляет клиенту Server Push с аномальными параметрами.

Клиент libcurl обрабатывает эти данные и, из-за ошибки в логике очистки при шаринге соединений, обращается к освобождённой памяти. Если атакующему удалось подготовить кучу (heap grooming), он может перехватить управление процессом. Результатом становится выполнение кода атакующего, что позволяет ему получить доступ к данным приложения или установить бэкенд-доступ к системе.

Есть ли публичный эксплойт​


Существует публичный отчёт об уязвимости на платформе HackerOne, что подтверждает наличие технического описания и, вероятно, PoC (Proof of Concept). Однако в доступных официальных источниках нет данных о массовой эксплуатации в реальных атаках или о появлении готовых эксплойтов в публичных репозиториях.

Наличие отчёта на HackerOne означает, что уязвимость была обнаружена и передана разработчикам. Отсутствие сведений о массовом использовании не гарантирует, что эксплойт не существует, но указывает на то, что он пока не стал широко доступным инструментом для атакующих.

Признаки эксплуатации​


Специфичных индикаторов компрометации (IOC) именно для CVE-2026-18924 в доступных источниках не опубликовано. Поэтому для мониторинга следует использовать общие признаки аномального поведения приложений, использующих libcurl.

  • Сегфолты (Segfaults): Внезапные падения процессов, использующих libcurl, особенно при обработке HTTP/2-трафика.
  • Аномальные исходящие соединения: Необычные запросы к внешним ресурсам, которые не соответствуют логике работы приложения.
  • Изменение целостности бинарников: Если в системе обнаружены новые файлы или модифицированные библиотеки, связанные с curl, это может указывать на успешную эксплуатацию.

Как обнаружить атаку​


Обнаружение атаки затруднено из-за отсутствия специфичных сигнатур. Рекомендуется внедрить мониторинг на уровне приложений и сети.

  • Логи приложений: Анализ логов на предмет ошибок памяти (memory errors), core dump'ов или нештатных завершений процессов.
  • Сетевой анализ: Мониторинг HTTP/2-трафика на предмет аномальных Server Push-сообщений, особенно если приложение не должно их получать.
  • Инструменты защиты: Использование WAF или сетевых шлюзов, способных фильтровать подозрительные HTTP/2-запросы, может снизить риск успешной атаки.

Как проверить свою версию​


Для проверки версии установленных пакетов curl и libcurl в Ubuntu используйте следующие команды. Замените <имя-пакета> на конкретное имя пакета (например, curl или libcurl4), если требуется проверка конкретного компонента.

Bash:
cat /etc/os-release
uname -r
apt-cache policy curl
ubuntu-security-status

Команда apt-cache policy curl покажет установленную версию и доступные обновления. ubuntu-security-status поможет проверить, есть ли для системы критические обновления безопасности.

Исправление​


Единственным надёжным способом устранения уязвимости является обновление пакетов curl и libcurl до версий, содержащих исправление. Для систем, поддерживаемых через Ubuntu Pro (ESM), обновления доступны в соответствующих репозиториях.

  • Обновление пакетов: Выполните sudo apt update && sudo apt upgrade для установки последних версий пакетов.
  • Ubuntu Pro: Если вы используете ESM-релизы (14.04, 16.04, 18.04, 20.04), убедитесь, что подписка активна и обновления загружаются из ESM-репозиториев.
  • Перезапуск сервисов: После обновления перезапустите все сервисы, использующие libcurl, чтобы изменения вступили в силу.

Временные меры защиты​


Пока обновление не установлено, можно снизить риск, ограничив использование уязвимых функций libcurl.

  • Отключение HTTP/2: Если возможно, настройте приложения на использование только HTTP/1.1. Это исключит срабатывание дефекта, связанного с Server Push.
  • Ограничение шаринга соединений: Измените конфигурацию приложений, чтобы избежать использования shared connections между обработчиками libcurl, если это технически допустимо.
  • Сетевые фильтры: Настройте WAF или прокси для блокировки HTTP/2 Server Push, если приложение не использует эту функциональность.

Как проверить устранение уязвимости​


После обновления пакетов необходимо убедиться, что уязвимые версии более не присутствуют в системе.

  • Проверка версий: Используйте apt-cache policy curl и dpkg -l | grep curl для подтверждения, что установлены исправленные версии.
  • Тестирование: Проведите функциональное тестирование приложений, чтобы убедиться, что они корректно работают с новыми версиями библиотек.
  • Мониторинг: Продолжайте отслеживать логи на предмет аномального поведения в течение нескольких дней после обновления.

Вывод​


CVE-2026-18924 представляет собой серьёзную угрозу для систем, использующих libcurl в режиме HTTP/2 с шарингом соединений. Высокий CVSS-скор и возможность удалённой атаки делают обновление пакетов приоритетной задачей. Администраторам Ubuntu следует проверить версии установленных пакетов, применить доступные обновления и при необходимости временно ограничить использование HTTP/2 Server Push до полного устранения уязвимости.

Официальные источники​


  1. NVD — CVE-2026-18924
  2. Ubuntu OSV — CVE-2026-18924
  3. FIRST EPSS — CVE-2026-18924

История обновлений статьи​


  • 10.09.2026 — Опубликована первая версия материала.
 
Назад
Верх Низ