Node2Shell mundëson code execution në një build standard të Node.js
Node2Shell, një cenueshmëri e Node.js në decoder-in e integruar Brotli, mund t’i shndërrojë të dhënat e kompresuara keqdashëse në kod të dhënë nga sulmuesi brenda një aplikacioni, sipas një demonstrimi nga studiuesit e Imperva. Node.js është software që përdoret për të ekzekutuar JavaScript jashtë një web browser, përfshirë në aplikacione dhe shërbime web. Brotli është një format për kompresimin e të dhënave. E meta, e regjistruar me identifikuesin Common Vulnerabilities and Exposures (CVE) CVE-2026-111497, mund të rezultojë në remote code execution (RCE), që do të thotë se një sulmues mund ta bëjë aplikacionin e prekur të ekzekutojë komanda ose software të zgjedhur prej tij.
Imperva arriti code execution në image zyrtar të Node.js 24.22.0 për Linux arm64, arkitektura 64-bit e procesorëve ARM. Testi përdori një release të zakonshëm dhe jo një build të dobësuar posaçërisht, si dhe nuk u mbështet te një debugger, një mjet për ekzaminimin e një programi gjatë ekzekutimit. Megjithatë, rezultati nuk ishte i besueshëm në çdo përpjekje. Imperva-s iu deshën disa tentativa në mjedisin e saj Linux arm64 përpara se kodi i dhënë të ekzekutohej. Studiuesit nuk testuan arkitektura të tjera procesorësh ose linjat e release-eve Node.js 22.x dhe 26.x, prandaj rezultati i demonstruar kufizohet në atë build dhe në atë konfigurim aplikacioni.
Node.js e bëri publike cenueshmërinë dhe nxori korrigjimet më 21 tetor. Kur Imperva e përsëriti testin me release-in e korrigjuar 24.22.1, runtime i refuzoi të dhënat e përgatitura posaçërisht dhe nuk e ekzekutoi kodin e dhënë. Deri më 22 tetor nuk ishte raportuar asnjë shfrytëzim në sulme reale. Mungesa e abuzimeve të raportuara nuk e heq nevojën për të përditësuar aplikacionet që përpunojnë të dhëna Brotli nga burime të pabesuara.
Demonstrimi i Node2Shell shkon më tej se proof of concept i parë i disponueshëm publikisht, i cili është kod testues i synuar për të treguar nëse një cenueshmëri mund të aktivizohet. Puna e mëparshme arriti code execution vetëm në një build testimi të dobësuar qëllimisht. Autori i saj raportoi se e njëjta qasje shkaktoi një crash dhe ekspozoi një sasi të kufizuar të memories së procesit në një build normal, por nuk prodhoi code execution funksional në të. Rezultati i Imperva tregon se shfrytëzimi ishte i mundur në një build zyrtar dhe standard të Node.js, megjithëse suksesi jo i qëndrueshëm dhe fusha e ngushtë e testimit mbeten kufizime të rëndësishme.
Decoder-i bazë përfshihet në Node.js 22.x, 24.x dhe 26.x, kështu që ekspozimi nuk kufizohet te versioni i saktë që përdori Imperva. Një aplikacion mund të arrijë decoder-in e cenueshëm nga secili drejtim i një shkëmbimi Hypertext Transfer Protocol (HTTP), sistemi i kërkesave dhe përgjigjeve që përdoret nga faqet dhe shërbimet web. Një rrugë është funksioni i integruar fetch(), i cili lexon një përgjigje të kompresuar me Brotli nga një server tjetër. Rruga tjetër është middleware, software i vendosur midis një kërkese hyrëse dhe aplikacionit, që dekodon një request body të kompresuar me Brotli.
Body parsers të Express 5, përfshirë express.json(), express.urlencoded(), express.text() dhe express.raw(), mund të dekodojnë request bodies Brotli kur aktivizohen për një route. Ata mbështesin gjithashtu kompresimin gzip dhe deflate. Vetëm marrja e një kërkese të kompresuar me Brotli nga një server bazë HTTP i Node.js nuk mjafton për të aktivizuar kodin e prekur. Aplikacioni duhet të përdorë middleware të përshtatshëm dekodimi ose ta thërrasë decoder-in drejtpërdrejt.
Imperva riprodhoi code execution si përmes rrugës së request body hyrës, ashtu edhe përmes rrugës së përgjigjes dalëse. Testet e saj përdorën versione pinned, të përzgjedhura posaçërisht, të Express nga 5.0.0 deri në 5.3.0 dhe të body-parser nga 2.0.0 deri në 2.3.0. Studiuesit nuk testuan çdo release midis këtyre pikave fundore, prandaj rezultatet nuk duhet të interpretohen si një vlerësim version pas versioni i këtyre paketave.
Defekti shfaqet kur stream Brotli arrin në një ndryshim blloku që, sipas strukturës së deklaruar më parë nga po ai stream, duhet të jetë i pamundur. Në vend që t’i trajtonte të dhënat si të pavlefshme, decoder-i i cenueshëm e interpretoi gjendjen si një kërkesë për më shumë input dhe vazhdoi përpunimin në një gjendje të pavlefshme. Në një test të veçantë që përdori një memory sanitizer, një mjet diagnostikues që zbulon aksesin e pasigurt në memorie, Imperva vëzhgoi një out-of-bounds write. Kjo do të thotë se decoder-i shkroi të dhëna përtej zonës së memories së përcaktuar për t’i mbajtur ato. Node.js e trajtoi problemin duke importuar një ndryshim upstream të Brotli që ndalon dekodimin dhe kthen një format error në atë pikë.
Përgjigjja kryesore është instalimi i një release-i të korrigjuar të Node.js. Administratorët duhet gjithashtu të përditësojnë container images dhe artefakte të tjera të paketuara që përfshijnë binary-n e tyre Node.js, sepse një inventar software mund të mos identifikojë çdo kopje të integruar. Node.js 20.x dhe versionet më të hershme janë linja end-of-life, që do të thotë se nuk e marrin më këtë korrigjim dhe duhet të kalohen në një linjë release-esh që mbështetet.
Njoftimi i Node.js nuk ofron asnjë workaround brenda runtime. Kur përditësimi i menjëhershëm nuk është i mundur, Imperva rekomandon kufizimin, kur është praktik, të trafikut të pabesuar Brotli në rrugët e prekura të kërkesave dhe përgjigjeve, duke theksuar se vetëm përditësimi e heq cenueshmërinë. Imperva shtoi rregulla në web application firewall (WAF) të vet dhe i testoi ato kundër sulmeve që riprodhoi. Vercel tha se vendosi inbound-request rules më 21 tetor, por këto rregulla nuk mbrojnë aplikacionet që marrin përgjigje keqdashëse Brotli nga serverë të tjerë dhe nuk e zëvendësojnë instalimin e korrigjimit.
Për pronarët e faqeve, pyetja e menjëhershme është nëse aplikacioni, image i hosting-ut ose paketa e tyre e deployment përmban një runtime të prekur të Node.js dhe përpunon të dhëna Brotli nga burime të pabesuara. Organizatat që kanë nevojë për ndihmë për të shqyrtuar mirëmbajtjen e runtime dhe të infrastrukturës mund të marrin në konsideratë AEU-I, që ofron IT, infrastrukturë dhe konsulencë me sigurinë si përparësi. Pavarësisht organizimit të hosting-ut, remedimi efektiv për Node2Shell është zëvendësimi i binary-ve të prekura të Node.js, rindërtimi i artefakteve të integruara kur është e nevojshme dhe redeployment i aplikacionit të përditësuar.