Vulnerabiliteti BatBadBut, që godet bibliotekat standarde të gjuhëve të ndryshme të programimit

Aplikacionet që ekzekutojnë skriptet në formatin bat dhe cmd në platformën Windows duke përdorur funksionet standarde për nisjen e proceseve janë të ndjeshëm ndaj një dobësie që lejon ekzekutimin e kodit të tyre në rast se argumentohet nisja pa eskapimin e veçantë të karaktereve speciale. Kjo dobësi ka marrë emrin kodor BatBadBut dhe shfaqet në aplikacione që përdorin bibliotekat standarde të gjuhëve si Rust, PHP, Node.js, Python, Ruby, Go, Erlang dhe Haskell.

Problemi është klasifikuar si një dobësi pasi preku funksionet e bibliotekës, siç janë Command::arg dhe Command::args në Rust, të dizajnuara për të kaluar direkt argumentet në proces, pa i përpunuar ato nga interpreti i komandave. Supozohet se zhvilluesi i aplikacionit mund të mos verifikojë argumentet, pasi ato kalohen direkt në procesin që niset. Në sistemet Unix, argumentet i kalohen procesit një nga një në një array, ndërsa në Windows, kur përdoret API CreateProcess, argumentet paraqiten si një string i vetëm, me analizimin e të cilit ngarkohet procesi që niset.

Kur ekzekutohen skriptet bat dhe cmd në platformën Windows, funksioni CreateProcess() pa e thënë qartë thërret skedarin ekzekutiv cmd.exe, edhe nëse aplikacioni nuk e specifikon atë gjatë thirrjes. Programi cmd.exe përmban logjikën e tij të ndërlikuar për ndarjen e argumenteve për të ndarë argumentet e veta, skriptin që nisi dhe argumentet e këtij skripti. Për të mbrojtur nga zëvendësimi i argumenteve në platformën Windows, bibliotekat standarde të gjuhëve të programimit përdorin mekanizma të veçantë për eskapim, të cilët, siç duket, mund të kalohen duke manipuluar me thonjëzat e dyfishta.

PĂ«r shembull, nĂ« njĂ« program qĂ« thĂ«rret skriptin ‘./test.bat’ me njĂ« argument tĂ« bazuar nĂ« tĂ« dhĂ«nat e marra nga pĂ«rdoruesi, njĂ« sulmues mund tĂ« kalojĂ« vlerĂ«n ‘»&calc.exe’, e cila, gjatĂ« ekzekutimit tĂ« skriptit, do tĂ« shndĂ«rrohet nĂ« stringun ‘C:\Windows\System32\cmd.exe /c .\test.bat «»&calc.exe»‘ dhe do tĂ« çojĂ« nĂ« ekzekutimin e procesit calc.exe. Kjo metodĂ« funksionon gjithashtu nĂ« rastet kur skriptet ekzekutohen nĂ« mĂ«nyrĂ« tĂ« paqartĂ«, kur ekzekutohet skedari me emrin «test» pa specifikuar zgjatimin, dhe nĂ« njĂ« nga katalogĂ«t e pĂ«rmendur nĂ« variablin e mjedisit PATH, ndodhet skedari «test.bat».

Aktualisht, një rregullim është lëshuar (CVE-2024-24576) për bibliotekën standarde të gjuhës Rust dhe është përfshirë në përditësimin Rust 1.77.2. Në procesin e përgatitjes janë përditësime për të adresuar një vulnerabilitet për Node.js dhe PHP (të gjitha versionet 8.2.18 dhe 8.3.5 janë ngarkuar, por lëshimi ende nuk është shpallur). Projektet Python, Ruby, Go, Erlang dhe Haskell për momentin kanë bërë vetëm një paralajmërim në dokumentacion rreth manifestimit të vulnerabilitetit në mungesë të duhur të ekranuarjes së simboleve speciale.

Në Rust 1.77.2, në bibliotekën standarde është shtuar një verifikim shtesë që kthen një gabim në rastin kur argumenti i skenarit të ekzekutuar përmban simbole speciale, të cilat nuk mund të ekranuar në mënyrë të sigurt. Për zhvilluesit që implementojnë logjikën e ekranuarjes vetë, është ofruar metoda CommandExt::raw_arg, e cila çaktivizon plotësisht ekranuarjen nga thirrjet e bibliotekës.

Shtimi i mbrojtjes pengohet nga fakti se vetëm ekranuarasi i cituar nuk është i mjaftueshëm, pasi interpretoni i komandave përpunon dhe zbulon variablat, të tillë si "%PATH%". Për shembull, një citohet mund të vendoset përmes manipulimit të variablit të mjedisit "%CMDCMDLINE%", duke specifikuar në vend të '"&calc.exe' - '%CMDCMDLINE:~-1%&calc.exe'.

Burimi: opennet.ru

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster