The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Уязвимости в проекте Pingora, позволяющие вклиниться в сторонние запросы

10.03.2026 19:30 (MSK)

Компания Cloudflare объявила об устранении трёх уязвимостей во фреймворке Pingora, двум из которых присвоен критический уровень опасности (9.3 из 10). Фреймворк Pingora написан на языке Rust и предназначен для разработки защищённых высокопроизводительных сетевых сервисов. Построенный при помощи Pingora прокси используется в сети доставки контента Cloudflare и обрабатывает более 40 млн запросов в секунду. Уязвимости устранены в выпуске Pingora 0.8.0.

Две наиболее опасные уязвимости допускают проведение атак класса "HTTP Request Smuggling", позволяющих обходить системы ограничения доступа и вклиниваться в содержимое запросов других пользователей, обрабатываемых в том же потоке между фронтэндом и бэкендом (например, для подстановки вредоносного JavaScript-кода в сеанс другого пользователя с сайтом). Проблемы выявлены участником программы Bug Bounty, предусматривающей выплату вознаграждения за обнаружение уязвимостей.

В схеме с обращением к бэкенду через обратный прокси запросы клиентов принимает дополнительный узел, который устанавливает длительно действующее TCP-соединение с бэкендом, осуществляющим непосредственную обработку запросов. Через данное общее соединение обычно передаются запросы разных пользователей, которые следуют по цепочке один за другим с разделением средствами протокола HTTP. Атаки класса HTTP Request Smuggling возникают из-за разной трактовки HTTP-заголовков и спецификаций протокола HTTP на фронтэндах и бэкендах, например, когда фронтэнд использует для определения размера запроса HTTP-заголовок "Content-Length", а бэкенд "Transfer-Encoding: chunked".

Первая уязвимость CVE-2026-2835 присутствует в коде разбора запросов HTTP/1.0 и вызвана некорректной обработкой заголовка "Transfer-Encoding" с несколькими значениями, а также использованием закрытия соединения как признака конца тела запроса (close-delimited). Pingora проверял только вариант "Transfer-Encoding: chunked" и игнорировал данный заголовок, если в нём указывалось несколько значений. В этой ситуации Pingora не учитывал размер в заголовке "Content-Length", а считал телом запроса все данные, полученные до закрытия соединения.

Через указание нескольких значений в заголовке "Transfer-Encoding" атакущий мог создать условия, при которых на бэкенд перенаправлялся запрос, фактический размер которого не соответствовал размеру chunked-цепочки, вычисленному на основе заголовка "Transfer-Encoding. Pingora перенаправлял все полученные данные как один запрос, а бэкенд, например, Node.js, вычислял запрос на основе "Transfer-Encoding: chunked" и оставшийся хвост обрабатывал как начало другого запроса.


   GET / HTTP/1.0
   Host: example.com
   Connection: keep-alive
   Transfer-Encoding: identity, chunked
   Content-Length: 29

   0

   GET /admin HTTP/1.1
   X:


Вторая уязвимость CVE-2026-2833 вызвана некорректной обработкой HTTP-заголовка "Upgrade" в запросах HTTP/1.1. При наличии в запросе заголовка "Upgrade" прокси сразу пробрасывал к бэкенду и остальные данные запроса, следующие за заголовком "Upgrade", не дожидаясь от бэкенда ответа с кодом 101 (Switching Protocols). Из-за этого синхронизация потока между прокси и бэкендом нарушалась и бэкенд воспринимал отправленные после заголовка "Upgrade" данные как отдельный запрос, и отправлял результат выполнения этого запроса в ответ на пришедший следом запрос другого пользователя.


   GET / HTTP/1.1
   Host: example.com
   Upgrade: foo


   GET /admin HTTP/1.1
   Host: example.com


Проблемы проявляются при использовании Pingora в форме обратного прокси (ingress proxy), транслирующего запросы пользователей к бэкендам с использованием протоколов HTTP/1.0 или HTTP/1.1. Применяемая в сети доставки контента Cloudflare конфигурация Pingora не позволяла эксплуатировать уязвимости, так как Pingora в CDN не используется в роли ingress-прокси, перенаправляет запросы только с использованием протокола HTTP/1.1, блокирует запросы с некорректными значениями Content-Length, перенаправляет только одно значение заголовка "Transfer-Encoding: chunked" и подставляет в запросы с заголовком "Upgrade:" дополнительный заголовок "Connection: close", не позволяющий передавать дополнительные запросы в том же соединении.

Третья уязвимость CVE-2026-2836 (степень опасности 8.4 из 10) приводит к отравлению кэша (cache poisoning) из-за генерации ключа размещения данных в кэше (CacheKey) только на основе пути из URI, игнорируя содержимое заголовка "Host". Подобная недоработка приводит к формированию одинаковых ключей кэширования для одинаковых HTTP-путей к разным хостам. Уязвимость может использоваться для подмены содержимого кэша при использовании режима кэширования для нескольких хостов. В Pingora кэширование является экспериментальной функцией, не рекомендованной для рабочих внедрений.

  1. Главная ссылка к новости (https://blog.cloudflare.com/pi...)
  2. OpenNews: Выпуск Pingora 0.7, фреймворка для создания сетевых сервисов
  3. OpenNews: SMTP Smuggling - новая техника спуфинга почтовых сообщений
  4. OpenNews: Атака Continuation flood, приводящая к проблемам на серверах, использующих HTTP/2.0
  5. OpenNews: Атака на системы фронтэнд-бэкенд, позволяющая вклиниться в сторонние запросы
  6. OpenNews: Новая атака на системы фронтэнд-бэкенд, позволяющая вклиниться в запросы
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/64957-pingora
Ключевые слова: pingora, http, smuggling
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (40) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.2, Диды (ok), 20:53, 10/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +9 +/
    Ну ожидаемо.
    На brainfuck весьма сложно отслеживать логику приложения.
     
     
  • 2.19, Аноним (19), 21:39, 10/03/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > В Pingora кэширование является экспериментальной функцией, не рекомендованной для рабочих внедрений.

    Если так, почему её использовали?

     
  • 2.28, Аноним (28), 22:21, 10/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > На brainfuck весьма сложно отслеживать логику приложения.

    А на каком легко? На Go?

     

  • 1.3, Аноним (3), 20:53, 10/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    РЕШЕТO!!1

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

     
     
  • 2.16, Аноним (16), 21:23, 10/03/2026 [^] [^^] [^^^] [ответить]  
  • –2 +/
    https://www.opennet.ru/opennews/art.shtml?num=64574
     
  • 2.34, Аноним (34), 22:52, 10/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    никакой спеки там нет, костыль на костыле
     

  • 1.8, Аноним (16), 21:08, 10/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >Уязвимости устранены в выпуске Pingora 0.8.0

    Реагируют, уже хорошо.
    Хотя сейчас везде так, ПО становится всё сложнее и сложнее.

     
     
  • 2.9, Аноним (16), 21:10, 10/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    >Проблемы выявлены участником программы Bug Bounty, предусматривающей выплату вознаграждения за обнаружение уязвимостей.

    А это прям хорошо.

     
  • 2.12, Аноним (12), 21:17, 10/03/2026 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Хотя сейчас везде так, ПО становится всё сложнее и сложнее.

    Так и есть. Диды не зря завещали: "Keep it simple, stupid". Но теперь же надо всё переписать, да навернуть покруче.

     
     
  • 3.15, Аноним (16), 21:22, 10/03/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/
    И без переписывания за всем не уследишь:
    1) https://opennet.ru/62635-kernel
    2) https://opennet.ru/64574-bug
     
  • 3.33, Аноним (33), 22:41, 10/03/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Диды не зря завещали: "Keep it simple, stupid".

    А делали Keep it simple-stupid.
    В первом же новом юниксе выcpaли дырень в 50 строках.

    Как говорится "не мешки ворочать".

     

  • 1.24, Аноним (24), 22:02, 10/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    "haha, classic" (ц)
    Оказывается, если использовать язык программирования, с которым не надо тщательно обдумывать каждую строку, то можно знатно нафакапить.
     
     
  • 2.27, Аноним (28), 22:20, 10/03/2026 [^] [^^] [^^^] [ответить]  
  • +6 +/
    > Оказывается, если использовать язык программирования, с которым не надо тщательно обдумывать каждую строку, то можно знатно нафакапить.

    Обдумавания вроде "как не вылезти за пределы буфера", "как не сделать дабл-фри" и "как не уронить память" на каждую строку никак не спасут тебя от багов, о которых говорится в новости.

    Наоборот: в дополнение к проблемам ищ новости у тебя были бы те самые дабл-фри, вылазания за буфер и т.п.

     
     
  • 3.37, Аноним (37), 23:06, 10/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Мне кажется ты не разобрался.
     
  • 2.29, Аноним (29), 22:25, 10/03/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Он берёт на себя некие гарантии по безопасной работе с памятью, что снижает потребность пограммиста заботиться именно об этом - о памяти. Какие из этого можно сделать выводы? На кону миллион долларов:

    A) Освобождаются силы, что позволяет больше уделять времени другим вещам (общее количество трудозатрат остаётся то же, но перераспределяется на другие проблемы)

    B) Программист перестаёт думать над каждой строчкой вообще, а не только о некоторых моментах с памятью

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

     
     
  • 3.42, Аноним83 (?), 23:31, 10/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    а) теперь все силы уходят на борьбу с компилятором - чтобы это всё как то собралось за пару часов.
    б) ...и начинает думать о жизни: как с этим всем дальше жить :)
     
     
  • 4.56, Аноним (29), 00:16, 11/03/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Нет никакой борьбы с компилятором если ты научился писать на расте, что занимает... большой текст свёрнут, показать
     
     
  • 5.60, Аноним (19), 00:26, 11/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > писать на расте, что занимает месяц-два

    Странно, языку уже 20 лет, но пока ещё нет научившихся писать.

     
  • 3.57, Аноним (19), 00:19, 11/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > критический уровень опасности (9.3 из 10). Фреймворк Pingora написан на языке Rust

    "позволяет больше уделять времени другим вещам" - интересно, каким таким другим вещам программисты уделили время.

     
  • 2.40, Аноним (40), 23:25, 10/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Что характерно, если использовать язык программирования, где приходится обдумывать каждую строчку, то тоже можно знатно нафакапить.
     

  • 1.35, ятупойтролль (ok), 23:00, 10/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    так, а зачем на этот небезопасный язык переписывают ядро и коре утилс?
     
     
  • 2.43, Сладкая булочка (?), 23:44, 10/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    1. Чтобы лицензию сменить
    2. Чтобы подсадить на компилятор без стандарта хз кем развиваемый.
     

  • 1.36, Аноним10084 и 1008465039 (?), 23:03, 10/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Противники божественного Rust'а сейчас побегут писать: "Ага, вот видите, Раст не спасает!1" Но на деле эта новость именно что подтверждает, что божественный Раст спасает! Уязвимость не переполнение буффера, а реальная логическая ошибка. Она и на Си завсегда могла быть, только прежде чем ее обнаружить, было бы куча ошибок памяти. А тут сразу логика - успех.
     
     
  • 2.41, Аноним83 (?), 23:28, 10/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Но ведь получилось что растовики облажались, теперь кого то из них жестоко покарают и отлучат!
    Нужно срочно придумать или ещё более защищённый язык где такое будет не возможно или какой ИИ с блокчейном приплести, только бы больше программист не было ни в чём виноват - это не выносимый уровень давления на психику!
     
     
  • 3.46, Аноним (46), 23:53, 10/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > Но ведь получилось что растовики облажались, теперь кого то из них жестоко покарают и отлучат!

    Конечно.

    > Нужно срочно придумать или ещё более защищённый язык где такое будет

    Можешь начинать.
    Я буду первый кто захочет это попробовать.
    Но разве вы на такое способны?)

     

  • 1.38, Tron is Whistling (?), 23:19, 10/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Так и запишем: критический уровень опасности на языке Rust предназначен для разработки защищённых сетевых сервисов.
     
  • 1.39, Аноним (39), 23:19, 10/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Это только цветочки. Всё, что переписывается на Rust будет обложено бэкдорами и уязвимостями, которые потом задействует. А люди будут верить, что уязвимостей там нет, ибо Rust. Если надо, они её подтянут очередной версией какого-нибудь crate при сборке. Rust пропихивается теми, кто заинтересован через него распространять бэкдоры.
     
     
  • 2.45, 12yoexpert (ok), 23:48, 10/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    и самое забавное, что для того, чтобы разобраться в проекте на С, тебе обычно достаточно молотка и отвёртки, вплоть до кишок компилятора, а для того, чтобы разобраться в конюшнях раста... ну, как минимум нужен тулчейн под несвободной лицензией, к нему такой же компилятор, пакетный менеджер и бутылка чего-нибудь крепкого, потому что синтаксис
     
     
  • 3.47, Аноним (28), 23:53, 10/03/2026 Скрыто ботом-модератором     [к модератору]
  • +/
     
     
  • 4.51, Аноним (51), 23:58, 10/03/2026 Скрыто ботом-модератором     [к модератору]
  • +/
     
  • 3.49, Аноним (46), 23:56, 10/03/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > и самое забавное, что для того, чтобы разобраться в проекте на С, тебе обычно достаточно молотка и отвёртки, вплоть до кишок компилятора,

    Напоминает описаныи жигулей или уаза)

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

    Несвободной? Даже Столлман и FSF признают пермиссивные лицензии - лицензией свободного программного обеспечения.
    Как раз недавно какая-то баба из FSF комментировала.

    Так что тут ты просто обделался.
    Впрочем это не удивительно.

    > к нему такой же компилятор, пакетный менеджер и бутылка чего-нибудь крепкого, потому что синтаксис

    Конечно, это же не на жаваскипте писать.


     
     
  • 4.52, 12yoexpert (ok), 23:58, 10/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > Конечно, это же не на жаваскипте писать.

    почему тогда на расте пишут исключительно и только джаваскриптеры? задумайся

     
  • 3.53, Аноним (28), 23:59, 10/03/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > чтобы разобраться в конюшнях раста... ну, как минимум нужен тулчейн под несвободной лицензией

    С каких это пор Apache стал несвободной лицензией?

     
  • 2.50, Аноним (28), 23:58, 10/03/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > А люди будут верить, что уязвимостей там нет, ибо Rust.

    Люди знают, что в сишном коде есть уязвимости (их поток уже более полувека не останавливается) - и все равно пользуются софтом, на нем написанном. Так с чего ты драму именно про Раст разводишь?

     
  • 2.55, Анончик давай выпьем чаю. Анончик выручай. (?), 00:02, 11/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Я так и не понял, а как собрать rust компилятор из исходников. Он везде как бинарный пакет распространяется. Как Гентушники с этим справляются?
     

  • 1.44, Сладкая булочка (?), 23:45, 10/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Вы не понимаете! Это blazing fast memory safe критическая уязвимость! На сишке так нельзя!
     
  • 1.48, Аноним (28), 23:55, 10/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Я не пойму, у mc сегодня ПМС, что он от балды трет комменты, в которых нет никаких прочих нарушений? Дядя, ау!
     
     
  • 2.54, 12yoexpert (ok), 00:00, 11/03/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    миша его напоил, 100%
     
  • 2.58, Аноним (19), 00:22, 11/03/2026 Скрыто ботом-модератором     [к модератору]
  • +/
     
  • 2.59, Аноним (19), 00:23, 11/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    принимал поздравления недавно, тяжёлое начало рабочей недели.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2026 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру