RCE 18-vjeçar në nginx (CVE-2026-42945)

Më 13 maj u korrigjua një dobësi në serverin popullor të internetit nginx për sisteme të ngarkuara: CVE-2026-42945, që potencialisht mund të çojë në RCE. Kjo dobësi ka lindur 18 vjet më parë (në vitin 2008) në versionin 0.6.27.

Për ta shfrytëzuar atë, duhet një kombinim i caktuar i direktivave në konfigurimin e serverit, jo që të gjithë ta kenë, por që ndonjëherë të jetë e pranishme, për shembull:
rewrite ^(.*) /new?c=1;
set $myvar $1;
return 200 $myvar;

Detaje të rëndësishme:

  • Së pari vjen direktiva rewrite, ku (argumenti i parë) një shprehje e rregullt me një parametr të nxjerrë (diçka në kllapa të rrethuara) zëvendësohet me (argumentin e dytë) një rrugë që përmban një pyetje;
  • direktiva set (në vend të saj gjithashtu do të funksiononte një rewrite i dytë ose if), e cila përdor parametrin e nxjerrë nga rruga e shkruar e origjinës (në këtë rast është $1).

Dobësia funksionon kështu:

  • Direktiva e parë rewrite, përballë shenjës së pyetje, vendos një flamur të brendshëm is_args, që do të thotë "po grumbullojmë parametrat get për url-në e zëvendësuar, duhet ta gjithë ta heqim", dhe (kjo është thelbi i defektit) harron ta resetojë këtë flamur në fund të punës së saj;
  • Direktiva e mëpasme set, gjatë formimit të vlerës për $myvar, mëkaton të aplikojë is_args që ishte vendosur më parë, dhe regjistron në my_var vlerën e nxjerrë të parametrin $1; problemi është se buffer-i për $myvar ndahet më herët, ende para se zëvendësimet të përfundojnë, dhe gjatësi e tij llogaritet me is_args=0, që do të thotë se vlera e zëvendësuar del më e gjatë se buffer-i i ndarë, prandaj regjistrimi ndodhi jashtë buffer-it të ndarë në struktura të tjera të dhënash të serverit. Për të ndodhur kjo, mjafton të dërgoni një kërkesë me simbole që duhet të zëvendësohen, për shembull shenjat "plus", në vendin e nxjerrjes së parametrave të shprehjes së rregullt.

Nëse në host nuk ka ALSR, kjo dobësi mund të shfrytëzohet për ekzekutimin e kodit nga distanca me të drejtat e procesit punues të nginx, ka PoC (aty nuk ka exploit në formë të pastër, është një demonstrim në sandbox).

Dobësia është korrigjuar në degën stabile të nginx 1.30.1, dhe në degën e re zhvillimore 1.31.0. shtëpia në komitet.

Është e rëndësishme të theksohet se 14 vjet më parë (në vitin 2012) një gabim i ngjashëm u korrigjua në një vend tjetër pranë.

——-

Në faqen F5 ka një rekomandim për neutralizimin e përkohshëm të dobësisë në rast se nuk është e mundur të përditësohet shpejt versioni i nginx - duhet të zëvendësohen parametrat e ndarë pa emër me ato të emëruara, dhe në këtë rast, sipas tyre, dobësia nuk do të shfaqet. Një shembull nga aty:
ishte: rewrite ^/users/([0-9]+)/profile/(.*)$ /profile.php?id=$1&tab=$2 last;
u bë: rewrite ^/users/(?[0-9]+)/profile/(?

.*)$ /profile.php?id=$user_id&tab=$section last;

Informacioni rreth dobësisë është ofruar nga Zhenpeng (Leo) Lin nga DepthFirst. Për më tepër, ai gjithashtu njoftoi për problemet e tjera që gjithashtu janë të korrigjuara:

  • CVE-2026-40701 (komit) përdorim-pas-lirimit në përdorimin e ssl_verify_client+ssl_ocsp (duke qenë pa RCE)
  • CVE-2026-42934 (komit) leximi jashtë burimit në parser-in utf-8 në rrethana specifike, mund të shkaktojë një rrjedhje të vogël të të dhënave ose crash-in e procesit të punës
  • CVE-2026-42946 (komit) alokimi i tepruar i memories dhe leximi jashtë burimit në përdorimin e moduleve scgi/uwsgi, problemi shfaqet në prani të një backend-i të keq (upstream) përmes protokollëve të caktuar, ose gjatë mitm-it të kanalit të komunikimit me backend-in, mund të çojë në leximin e memories të nginx ose crash-in e procesit të punës

Burimi: linux.org.ru

Blini hostim të besueshëm për faqe interneti me mbrojtje DDoS, serverë VPS VDS 🔥 Blini hostim të besueshëm për faqe interneti me mbrojtje DDoS, serverë VPS VDS - ProHoster