curl исправил уязвимость загрузки HTTP/2 после того, как PoC продемонстрировал выполнение кода на стороне клиента

Curl безопасность Http/2 уязвимость Rce thehackernews.com

Исправлена критическая уязвимость в curl, позволяющая удаленное выполнение кода. Обновите curl до версии 8.23.0 или примените патч, чтобы защититься от атаки через HTTP/2.

Уязвимость в обработке HTTP/2-загрузок в curl позволяет вредоносному серверу повредить память клиента, а исследователь превратил это в выполнение кода на машине, выполняющей загрузку. Проект curl исправил ее 14 октября в curl 8.23.0. Захват клиента требует точного знания его сборки и расположения в памяти, а curl ожидает, что реальная атака приведет к сбою.
Уязвимость, отслеживаемая как use-after-free под идентификатором CVE-2026-92392, затрагивает curl и libcurl версий от 8.12.0 до 8.22.0, как командную строку, так и библиотеку, которую многие другие программы используют для передач. curl оценивает ее как High по своей четыреххуровневой шкале, это первая уязвимость высокого уровня опасности с момента переполнения кучи SOCKS5 в октябре 2023 года. Проект сократил цикл выпуска на две недели, чтобы выпустить исправление.
Атака осуществляется с сервера. Клиент должен загрузить файл размером примерно 135 КБ по протоколу HTTP/2 на сервер, контролируемый злоумышленником, и сертификат сервера должен пройти проверку клиента. libcurl по умолчанию согласовывает HTTP/2 для HTTPS-URL, когда сервер его предлагает, и библиотека была собрана с поддержкой HTTP/2.
Уязвимость присутствовала во всех выпусках curl начиная с 8.12.0 в феврале 2025 года. Нет сообщений об атаках, использующих ее. Публикация исследователя на HackerOne с вредоносным серверным скриптом и Docker-контейнером, описанным как воспроизводящий выполнение кода, стала общедоступной 14 октября вместе с консультативным уведомлением.
Обновитесь до версии 8.23.0 или примените коммит с исправлением к локальной сборке. Машиночитаемое консультативное уведомление curl также перечисляет исправленные версии в трех старых ветках, и проект заявил, что выпустит обновленные версии Rock-solid curl, своей линии долгосрочной поддержки для клиентов с контрактами на поддержку, одновременно с 8.23.0.
Выпуск исправляет всего 24 CVE. Остальные 23 оценены как Low.
Если вы пока не можете обновиться, curl советует не использовать HTTP/2. Опция –http1.1 запрашивает у инструмента HTTP/1.1, а приложения устанавливают CURLOPT_HTTP_VERSION в значение CURL_HTTP_VERSION_1_1. Документация curl называет эту настройку запросом, поскольку существующее соединение другой версии может быть повторно использовано.
Поддержка HTTP/2 в libcurl является опцией сборки. Сборка без нее не может согласовывать HTTP/2, поэтому не может достичь пути загрузки, описанного в консультативном уведомлении.
Даниэль Стенберг, ведущий разработчик curl, объяснил ошибку в посте, опубликованном вместе с выпуском, а общедоступный отчет описывает путь кода. HTTP/2 передает несколько данных по одному соединению, и libcurl отслеживает каждую передачу с помощью объекта, который он называет easy handle.
Во время загрузки сервер останавливает передачу, устанавливая окно HTTP/2 в ноль, возвращая часть ответа, а затем сбрасывая поток, сохраняя соединение открытым. curl рассматривает сброс как причину для повторной попытки.
При очистке curl сначала сообщает уровню HTTP/2, что передача завершена, затем сбрасывает оставшиеся неотправленные данные загрузки в то же соединение. Поскольку передача не зарегистрирована, эти оставшиеся байты считываются как новый запрос. Шаблон строки, который исследователь включает в загруженный файл, делает их похожими на строки запроса. Когда это происходит, открывается новый поток, который сохраняет указатель на easy handle.
Повторная попытка завершается в новом HTTP/1.1-соединении, и приложение освобождает handle. Старое соединение все еще хранит указатель и использует его, когда сервер отправляет кадр по этому потоку, что может произойти при выходе из программы.
В эксплойте исследователя данные, отправленные сервером, попадают в память, которую использовал освобожденный handle. Исходящий запрос раскрывает локальные адреса, которые серверу нужны для обхода рандомизации адресного пространства (ASLR). Указатель функции в этой памяти перезаписывается байтами с сервера, и curl затем вызывает его.
Для выполнения кода злоумышленнику необходимо знать точную версию curl цели, архитектуру, аллокатор libc и расположение в куче, чтобы поддерживать два параллельных потока в нужном тайминге, и уместить полезную нагрузку примерно в 23 байта, согласно консультативному уведомлению curl. «Наиболее вероятным исходом попытки атаки является скорее просто сбой», — написал Стенберг, оценив шанс успеха как незначительный. Именно поэтому curl оценил уязвимость как High, а не Critical.
curl использует четыре уровня серьезности и не публикует оценку CVSS. Национальная база данных уязвимостей не анализировала запись по состоянию на 14 октября.
Исправление представляет собой перестановку шести строк в файле lib/multi.c, выполненную Стефаном Айссингом. Уровень HTTP/2 теперь отказывается от своих ссылок на handle после того, как оставшиеся данные загрузки были сброшены, а не до этого.
Отчет поступил в curl 15 сентября через HackerOne, и команда безопасности подтвердила его в течение нескольких часов, по словам Стенберга. 7 октября проект предварительно объявил об исправлении высокого уровня опасности для следующего выпуска, сократив цикл с восьми до шести недель.
curl приписывает находку «Луне с Клодом, Anthropic». Стенберг называет исследователя Луна Тонг из Anthropic, говорит, что находка поступила через новый OSS Scanner компании, и предполагает, что в этом участвовали ее ИИ-модели.
Anthropic запустила OSS Scanner 8 октября как опциональный сервис, который сканирует зарегистрированные проекты с открытым исходным кодом с помощью своих моделей и отправляет результаты по электронной почте без проверки человеком, каждый отчет с воспроизводителем и, где это возможно, с предлагаемым патчем. Отчет curl поступил за три недели до этого публичного запуска. В посте Anthropic о запуске Стенберг цитируется, что сканер обнаружил «одну из худших уязвимостей curl, о которых сообщалось за последние несколько лет», не называя конкретную.
Тот же мейнтейнер написал в июле 2025 года, что примерно пятая часть представленных в этом году сообщений о безопасности curl была тем, что он назвал «AI slop», и только примерно одно из двадцати оказалось подлинным.
curl несколько лет сокращал количество внутренних указателей на handle в пользу идентификаторов, которые он ищет по мере необходимости, написал Стенберг, и это не является гарантией от другой уязвимости use-after-free. curl называет ошибку недосмотром, которого, вероятно, удалось бы избежать в языке с безопасной памятью, и проект не планирует переписывать curl на таком языке.

Всегда имейте в виду, что редакции могут придерживаться предвзятых взглядов в освещении новостей.

Похожие новости: