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

Aplikacionet që ekzekutojnë skenarë në formatin bat dhe cmd në platformën Windows duke përdorur funksionet standarde për ndihmën e proceseve janë të ndjeshëm ndaj një dobësie që lejon ekzekutimin e kodit të tyre në rast se argumentet kalohen gjatë ekzekutimit pa ekranimin e veçuar të simboleve të veçanta. Dobësia është emërtuar BatBadBut dhe shfaqet në aplikacionet që përdorin bibliotekat standarde të gjuhëve si Rust, PHP, Node.js, Python, Ruby, Go, Erlang dhe Haskell.

Kjo çështje është identifikuar si një dobësi pasi përfshin funksionet e bibliotekës, si Command::arg dhe Command::args në Rust, që janë projektuar për të kaluar argumente direkt te procesi, pa përpunimin e tyre nga interpreti i komandave. Supozohet se zhvilluesi i aplikacionit mund të mos kontrollojë argumentet, pasi ato kalohen direkt te procesi të cilin e drejton. Ndërsa në sistemet Unix, argumentet kalohen tek procesi veçmas në një varg, në Windows me përdorimin e API-së CreateProcess, argumentet paraqiten si një string i vetëm, dhe analizimi i tij bie nën përgjegjësinë e procesit që po niset.

Kur ekzekutohen skenarë bat dhe cmd në platformën Windows, funksioni CreateProcess() tërheq në mënyrë të ngjashme skedarin ekzekutues cmd.exe, edhe nëse aplikacioni nuk e tregon atë gjatë thirrjes. Programi cmd.exe ka logjikën e tij komplekse për ndarjen e argumenteve për të ndarë argumentet e veta, argumentet e skenarit të drejtuar dhe argumentet e skenarit të këtij skenari. Për t'u mbrojtur nga zëvendësimi i argumenteve në platformën Windows, bibliotekat standarde të gjuhëve të programimit përdorin menaxherë të veçantë për ekranimin, të cilat, siç doli, mund të anashkalohen duke manipuluar me thonjëzat e dyfishta.

Për shembull, në një program që thirrin skenarin ‘./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ë skenarit do të zgjerohet në stringun ‘C:\Windows\System32\cmd.exe /c .\test.bat «»&calc.exe’ dhe do të çojë në ekzekutimin e procesit calc.exe. Ky metod funksionon edhe gjatë ekzekutimit të heshtur të skenarëve, kur lansohet një skedar ekzekutiv me emrin «test» pa treguar prapashtesën, dhe në një nga katalogët e përmendur në variablin e mjedisit PATH ka një skedar «test.bat».

Aktualisht, është lëshuar një rregullim (CVE-2024-24576) për bibliotekën standarde të gjuhës Rust dhe ka hyrë në përditësimin Rust 1.77.2. Përditësimet për eliminimin e dobësisë janë në proces për Node.js dhe PHP (të cilat tashmë kanë lëshuar etiketat 8.2.18 dhe 8.3.5, por lëshimet ende nuk janë shpallur). Projektet Python, Ruby, Go, Erlang dhe Haskell aktualisht kanë bërë vetëm përditësime në dokumentacion për të paralajmëruar printimin e dobësisë në rast të mos-ekranimit të duhur të simboleve të veçanta.

Në Rust 1.77.2 është shtuar një kontroll i mëtejshëm në bibliotekën standarde, që kthen një gabim nëse në argumentin e skenarit të drejtuar ka simbole të veçanta që nuk mund të ekranohen me siguri. Për zhvilluesit që implementojnë vetë logjikën e ekranimit, është ofruar metodi CommandExt::raw_arg, i cili çaktivizon plotësisht ekranimin në anën e thirrjeve të bibliotekës.

Shtimi i mbrojtjes ndikohet nga fakti se ekranimi i thjeshtë i thonjëzave të dyfishta nuk është i mjaftueshëm, pasi interpreti i komandave merret me variabla të tjerë si «%PATH%». Për shembull, thonjëzën mund ta kalosh duke manipuluar me variablin e mjedisit «%CMDCMDLINE%», duke treguar në vend të ‘»&calc.exe’ — ‘%CMDCMDLINE:~-1%&calc.exe’.

Burimi: opennet.ru

Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS 🔥 Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS | ProHoster