Уязвимост в начина, по който curl обработва качвания през HTTP/2, позволява на злонамерен сървър, приемащ качването, да повреди паметта на клиента, като изследователят, съобщил за нея, успя да я превърне в изпълнение на код на качващата машина.
Проектът curl отстрани проблема на 14 октомври във версия curl 8.23.0. Поемането на контрол над клиента изисква точни познания за неговата компилация и разпределението на паметта, като разработчиците на curl очакват реална атака по-скоро да завърши със срив на програмата.
Уязвимостта от тип use-after-free, проследявана като CVE-2026-92392, засяга curl и libcurl от версия 8.12.0 до 8.22.0 – както инструмента за команден ред, така и библиотеката, която множество други програми използват за трансфер на данни. curl я оценява като High по своята четиристепенна скала, което я прави първата уязвимост с висока степен на опасност от октомври 2023 г. насам (препълването на динамичната памет при SOCKS5). Проектът съкрати цикъла си на издаване с две седмици, за да предостави корекцията за сигурност.
Атаката се извършва от страната на сървъра. Клиентът трябва да качи файл с размер около 135 KB през HTTP/2 към сървър, контролиран от атакуващия, като сертификатът на сървъра трябва да премине успешно проверките на клиента. libcurl договаря HTTP/2 по подразбиране за https:// адреси, когато сървърът го предлага и библиотеката е компилирана с поддръжка на HTTP/2.
Уязвимостта присъства във всяка версия на curl от 8.12.0 насам, издадена през февруари 2025 г. Към момента няма данни за атаки, които я експлоатират. Докладът на откривателя в HackerOne, заедно със злонамерения сървърен скрипт и Docker контейнер, възпроизвеждащ изпълнението на код, стана публичен на 14 октомври заедно с бюлетина за сигурност.
Какво да инсталирате и какво да направите дотогава
Надградете до 8.23.0 или приложете коригиращия комит към локална компилация. Машинно четимият бюлетин на curl посочва и коригирани версии в три по-стари клона, като проектът обяви, че паралелно с 8.23.0 ще предостави и обновени версии на Rock-solid curl – линията за дългосрочна поддръжка за клиенти с договори за поддръжка:
- curl и libcurl от 8.12.0 до 8.22.0: надграждане до 8.23.0
- клон 8.14.x: 8.14.3
- клон 8.16.x: 8.16.2
- клон 8.20.x: 8.20.2
- Debian 13 (trixie): 8.14.1-2+deb13u7 чрез DSA-6558-1, според системата за проследяване на Debian. Debian 12 (bookworm) не съдържа уязвимия код.
Версията отстранява общо 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, следователно не може да достигне до проблемния път за качване, описан в бюлетина.
Как враждебен сървър превръща грешката в изпълнение на код
Даниел Стенберг (Daniel Stenberg), водещият разработчик на curl, обясни грешката в публикация, издадена заедно с новата версия, а публичният доклад описва подробно пътя на изпълнение на кода. HTTP/2 пренася няколко трансфера през една връзка, а libcurl проследява всеки трансфер чрез обект, наречен „easy handle“.
По време на качване сървърът спира трансфера, като задава размер нула на прозореца на HTTP/2, връща част от отговора и след това рестартира потока, запазвайки връзката отворена. curl приема рестартирането като повод за повторен опит.
При освобождаването на ресурсите curl първо съобщава на HTTP/2 слоя, че трансферът е завършен, след което изпраща остатъка от неизпратените данни за качване в същата връзка. Тъй като няма регистриран трансфер, тези остатъчни байтове се разчитат като нова заявка. Структурата на редовете, които изследователят е включил в качения файл, ги кара да изглеждат като редове на заявка. Когато това се случи, се отваря нов поток, който запазва указател към въпросния „easy handle“.

Повторният опит се извършва през нова HTTP/1.1 връзка и приложението освобождава манипулатора. Старата връзка обаче все още пази указателя и го използва, когато сървърът изпрати фрейм по този поток, което може да се случи при затварянето на програмата.
В експлойта на изследователя данните, изпратени от сървъра, попадат в паметта, която освободеният манипулатор е използвал. Изходяща заявка разкрива локални адреси, които са необходими на сървъра, за да преодолее рандомизацията на адресното пространство (ASLR). Указател към функция в тази памет бива презаписан с байтове от сървъра, след което curl го извиква.
За изпълнение на код е необходимо атакуващият да знае точната версия на curl на целевата система, архитектурата, алокатора на libc и разпределението на динамичната памет (heap), да синхронизира прецизно два паралелни трансфера и да побере зловредния код в около 23 байта, според бюлетина на curl. „Най-вероятният изход от опит за атака е просто срив“, пише Стенберг, определяйки шанса за успех като минимален. Поради тази причина curl оценява уязвимостта като High, а не като Critical.
curl използва четири нива на сериозност и не публикува CVSS оценка. Към 14 октомври Националната база данни за уязвимости на САЩ (NVD) все още не беше анализирала записа.
Корекцията се състои в пренареждане на шест реда в lib/multi.c от Щефан Айсинг (Stefan Eissing). Сега HTTP/2 слоят освобождава референциите си към манипулатора едва след като остатъчните данни за качване са изчистени, а не преди това.
Докладът е получен от екипа на curl на 15 септември чрез HackerOne и потвърден в рамките на часове от екипа по сигурността, според Стенберг. На 7 октомври проектът предварително обяви корекция с висока степен на сериозност за следващата версия, съкращавайки цикъла си от осем на шест седмици.
curl отдава заслугите за откритието на „Luna with Claude, Anthropic“. Стенберг посочва откривателя като Луна Тонг (Luna Tong) от Anthropic и уточнява, че уязвимостта е намерена чрез новия инструмент на компанията OSS Scanner, като предполага, че са участвали нейни AI модели.
Anthropic представи OSS Scanner на 8 октомври като услуга с предварително записване, която сканира включените проекти с отворен код чрез своите модели и изпраща резултатите по имейл без човешка намеса – всеки доклад с пример за възпроизвеждане и, при наличност, примерна корекция за сигурност. Докладът за curl е изпратен три седмици преди официалното стартиране. В публикацията по повод старта на инструмента Anthropic цитира Стенберг, който казва, че скенерът е открил „една от най-тежките уязвимости в curl, докладвани през последните няколко години“, без да посочва конкретно коя.
Същият разработчик написа през юли 2025 г., че около една пета от подадените доклади за сигурност в curl през тази година са били това, което той нарича „AI генериран пълнеж“ (AI slop), като едва един на всеки двадесет се е оказал реален проблем.
curl е прекарал няколко години в намаляване на броя на вътрешните указатели към манипулатори в полза на идентификатори, които се търсят при необходимост, пише Стенберг, но това не е гаранция срещу пореден проблем от тип use-after-free. curl определя дефекта като грешка, която език с безопасно управление на паметта най-вероятно би предотвратил, но проектът не планира пренаписване на такъв език.