Në utilitarin wall, i cili ofrohet në paketën util-linux dhe është i destinuar për dërgimin e mesazheve në terminale, është zbuluar një të metë (CVE-2024-28085) që mundëson sulme ndaj terminaleve të përdoruesve të tjerë përmes manipulimit me sekvencat e escape. Problemi shkaktohet nga fakti se utilitari wall bllokon përdorimin e sekvencave të escape në rrjedhën hyrëse, por nuk e kryen këtë operacion për argumentet në komandën e linjës, çka i lejon sulmuesit të ekzekutojë sekvenca escape në terminalin e përdoruesve të tjerë.
Për shembull, duke ekzekutuar ‘wall $(printf «\033[33mHI»)’ mund të shfaqet shkrimi «HI» me ngjyrë të verdhë. Duke përdorur sekvencat escape, të cilat lejojnë lëvizjen e kursorit, pastrimin dhe zëvendësimin e përmbajtjes në ekran, mund të simulohet shfaqja e një kërkese për hyrje të fjalëkalimit nga utilita sudo në terminalin e një përdoruesi tjetër. Nëse përdoruesi nuk vëren mashtrimin dhe shënon fjalëkalimin e tij, atëherë fjalëkalimi do të shfaqet në historinë e hyrjes si një komandë joekzistuese (në thelb, përdoruesi vendos në vend të komandës fjalëkalimin e tij në linjën e komandës). «\033[3A» // lëvizim kursorin lart me 3 linja «\033[K» // fshijmë shkrimin e mëparshëm «[sudo] password for a_user:» // shfaqim një kërkesë fiktive sudo «\033[?25l» // vendosim ngjyrën e sfondit për të fshehur hyrjen «\033[38;2;48;10;36m»
Gjatë shfaqjes së një paralajmërimi që komanda e futur nuk u gjet, në shumë distribuime aktivizohet përpunuesi /usr/lib/command-not-found, i cili përpiqet të përcaktojë paketën ku ndodhet komanda e munguar dhe të japë një sugjerim për instalimin e saj. Problemi është se kur aktivizohet përpunuesi command-not-found, komanda e paeksistueshme i kalon asaj si një parametr i linjës së komandës, i cili është i dukshëm kur shikoni proceset në sistem (për shembull, kur përpiqeni të aktivizoni utilitarin e painstaluar 'xsnow', në listën e proceseve do të jetë e dukshme '/usr/lib/command-not-found -- xsnow'). Kështu, një sulmues mund të organizojë monitorimin e proceseve të aktivizuara (për shembull, duke analizuar shfaqjen e '/proc/$pid/cmdline' për numrin e parashikuar të PID) dhe të përcaktojë fjalëkalimin e futur nga viktima në linjën e komandës.
Për të bërë që përdoruesi të japë fjalëkalimin në përgjigje të një ftesë të rreme sudo, është propozuar një truk, ku thelbi i tij është ndjekja në listën e proceseve të ekzekutimit real të utilitarit sudo, duke pritur për përfundimin e tij dhe duke realizuar një sulm përmes "wall" menjëherë pas kësaj. Nëpërmjet manipulimeve me sekvencat e kaçurrela, sulmuesi mund të zëvendësojë mesazhin pas realizimit real të sudo me një ftesë të rreme për ri-hyrje të fjalëkalimit. Viktima mund të mendojë se gaboi gjatë futjes dhe të futë fjalëkalimin për herë të dytë, duke e zbuluar fjalëkalimin në argumetet e trajtuesit "command-not-found".
Për një sulm të suksesshëm kërkohet vendosja e modit "mesg" në vlerën "y", që në mënyrë default është e aktivizuar në Ubuntu, Debian dhe CentOS/RHEL. Mundësia e realizimit të sulmit është demonstruar në Ubuntu 22.04 në konfigurimin e tij default duke përdorur gnome-terminal. Në Debian, sulmi është i vështirë, pasi në distribuimin e tij default nuk është aktivizuar trajtuesi "command-not-found", ndërsa në CentOS/RHEL, sulmi nuk do të funksionojë, pasi utilitari wall është instaluar pa flagun setgid dhe nuk ka akses në terminalet e tjerëve. Në përdorimin e windows-terminal, sulmi mund të modifikohet për të ndryshuar përmbajtjen e buferit të shkëmbimit.
Vulnerabiliteti është manifestuar në pakon util-linux që nga viti 2013, pas shtimit të mundësisë për të specifikuar një mesazh në argumentin e komandës wall në versionin 2.24, por është harruar të aplikohet pastrimi i sekuencave të escape. Korrigjimi i vulnerabilitetit është përfshirë në versionin util-linux 2.40 të lëshuar dje. Është e rëndësishme të theksohet se gjatë përpjekjes për të korrigjuar vulnerabilitetin në versionin util-linux 2.39, është zbuluar një vulnerabilitet tjetër i ngjashëm që lejon manipulasionin e karaktereve kontrolluese përmes manipulimit me lokalitetet.
Burimi: opennet.ru
