Абнаўленне nginx 1.31.0 з ухіленнем RCE-уразлівасці, эксплуатаванай праз HTTP-запыт

Сфарміраваны выпуск асноўнай галіны nginx 1.31.0, у рамках якой працягваецца развіццё новых магчымасцяў, а таксама выпуск раўналежна падтрымоўванай стабільнай галінкі nginx 1.30.1, у якую ўносяцца толькі змены, злучаныя з ухіленнем сур'ёзных памылак і ўразлівасцяў. У абнаўленнях ухілена 6 уразлівасцяў, найболей небяспечная з якіх дапушчае выдаленае выкананне кода праз адпраўку адмыслова аформленага HTTP-запыту. Для angie і freenginx на момант напісання навіны выпраўлення не апублікаваны.

Уразлівасць (CVE-2026-42945), якой прысвоены крытычны ўзровень небяспекі, выклікана перапаўненнем буфера ў модулі ngx_http_rewrite_module, якое можа быць эксплуатавана для выканання кода з правамі працоўнага працэсу nginx праз адпраўку HTTP-запыту са адмыслова аформленым URI. Праблема выяўляецца ў канфігурацыях з дырэктывай "rewrite", у якой у рэгулярных выразах выкарыстоўваюцца падстаноўкі масак пры дапамозе неназваных зменных (напрыклад, $1 і $2), пры ўмове, што ў які замяняе радку маецца знак "?". Прыклад уразлівай канструкцыі: rewrite ^/users/([0-9]+)/profile/(.*)$ /profile.php?id=$1&tab=$2 last;

Выразы з найменнымі падстаноўкамі ўразлівасці не схільныя. Напрыклад, уразлівасць не закранае канструкцыі: rewrite ^/users/(? [0-9]+)/profile/(? .*)$ /profile.php?id=$user_id&tab=$section last;

Уразлівасць прысутнічае пачынаючы з версіі 0.6.27, выпушчанай у сакавіку 2008 гады. Чыннікам з'яўлення ўразлівасці стала тое, што буфер вылучаўся з разлікам, што ў яго будуць запісаныя неэкранаваныя дадзеныя, а фактычна капіяваліся дадзеныя пасля выканання экранавання спецзнакаў, памер якіх быў больш, бо кожны знак "+", "%" і "&" кадзіраваўся не адным, а трыма байтамі. Падобнае разузгадненне ўзнікала з-за таго, што пры наяўнасці ў правіле rewrite сімвала "?" выстаўляўся сцяг "e->is_args", пры якім уключалася экранаванне, але вылучэнне буфера ажыццяўлялася пры скінутым сцягу, пры якім экранаванне не ўжывалася.

Іншыя ўразлівасці:

  • CVE-2026-42926 - магчымасць падстаноўкі дадзеных атакавалага ў праксуемы запыт пры выкарыстанні ў наладах дырэктывы "proxy_set_body" і звароце да бэкэнду праз HTTP/2 (proxy_http_version=2).
  • CVE-2026-40701 - зварот да памяці пасля яе вызвалення (use-after-free) у модулі ngx_http_ssl_module, якое ўзнікае пры апрацоўцы адказаў ад DNS-сервера ў канфігурацыях з дырэктывай "ssl_ocsp".
  • CVE-2026-42946 - чытанне з вобласці за межамі буфера ў модулях ngx_http_uwsgi_module і ngx_http_scgi_module, якое ўзнікае пры апрацоўцы спецыяльна аформленага адказу. Праблема можа прывесці да ўцечкі змесціва памяці працоўнага працэсу або яго аварыйнага завяршэння.
  • CVE-2026-42934 - чытанне з вобласці за межамі буфера ў працоўным працэсе, якое ўзнікае пры апрацоўцы адказаў з дэкадаваннем з кадоўкі UTF-8 пры выкарыстанні дырэктывы «charset_map». Праблема можа прывесці да ўцечкі змесціва памяці працоўнага працэсу або яго аварыйнага завяршэння.
  • CVE-2026-40460 - уразлівасць у рэалізацыі пратаколу HTTP/3, якая дапускае спуфінг IP-адрасы для абыходу аўтарызацыі або абмежаванняў.

Паляпшэнні, дададзеныя ў выпуску nginx 1.31.0:

  • У склад уключаны модуль ngx_http_tunnel_module, які рэалізуе магчымасць працы ў выглядзе проксі («forward proxy»), які перанакіроўвае запыты на іншы сервер пры звароце кліента пры дапамозе метаду HTTP/1.1 CONNECT. Магчыма настройка аўтэнтыфікацыі звароту да проксі, выкарыстоўваючы дырэктывы "auth_basic", "satisfy" і "auth_delay".
  • У блок "upstream" дададзена дырэктыва "least_time", якая ўключае метад балансавання нагрузкі з перадачай запыту серверу з найменшымі сярэднім часам адказу і найменшай колькасцю актыўных злучэнняў.
  • У модуль "stream_proxy" дададзена дырэктыва "proxy_ssl_alpn" для задання спісу пратаколаў, дапушчальных у пашырэнні ALPN пры падлучэнні да праксіраванага сервера. Напрыклад: "proxy_ssl_alpn h2 http/1.1".
  • Забяспечана адхіленне запытаў па пратаколах HTTP/2 і HTTP/3, якія ўключаюць загалоўкі "Connection", "Proxy-Connection", "Keep-Alive", "Transfer-Encoding", "Upgrade".
  • У модулі ngx_http_dav_module забяспечана адхіленне запытаў COPY і MOVE з паўтаральнымі зыходным і мэтавым рэсурсам або ўкладзенымі калекцыямі.
  • Узровень лагавання памылак SSL "invalid alert", "record layer failure" і "SSL alert number N" паніжаны з "crit" да "info".
  • У скрыпт configure дададзены параметр "-without-http_upstream_sticky_module" для адключэння зборкі модуля http_upstream_sticky_module (параметр "-without-http_upstream_sticky" абвешчаны састарэлым).

Дадатак: Даступны эксплоит для RCE-уразлівасці ў ngx_http_rewrite_module.

Крыніца: opennet.ru

Купіць надзейны хостынг для сайтаў з абаронай ад DDoS, VPS VDS серверы 🔥 Купіць надзейны хостынг для сайтаў з абаронай ад DDoS, VPS VDS серверы | ProHoster