Skip to main content

    Översikt över uppdateringen

    Den 28 februari 2024 släppte RARLAB en uppdatering för WinRAR, som åtgärdade en sårbarhet för ANSI escape-injektion som jag hade hittat i konsolversionerna av RAR och UnRAR, som påverkade version 6.24 och tidigare. Denna sårbarhet, som spåras som CVE-2024-33899 för Linux- och Unix-system och CVE-2024-36052 för Windows, gjorde det möjligt för angripare att förfalska fillistan eller utföra en lokal serviceattack (endast Linux och Unix).

    I det här inlägget kommer jag att gå igenom hur den här sårbarheten fungerar och demonstrera ett bevis på koncept. Även om jag demonstrerar detta på ett Linux-system kan samma sak göras på ett Windows- eller Unix-system.

    Bakgrund

    Om du är bekant med kommandoraden i Linux, Unix eller Windows kanske du känner till program som Vim och Neofetch. Dessa program använder ANSI escape-sekvenser för att ändra text och bakgrundsfärg, styra markören och skapa grafiska gränssnitt i terminalen.

    1-1

    Även om ANSI-escape-sekvenser kan användas för att skapa häftiga program för terminalen kan de också användas för skadliga program, vilket framgår av Stok Fredriks DEFCON-föreläsning.

    WinRAR erbjuder konsol RAR och UnRAR som kan användas för att skapa och extrahera RAR-arkiv. Som framgår av bilden nedan har RAR-filer stöd för kommentarer, som visas när innehållet i arkivfilen listas med hjälp av unrar l demo.rar.

    2 (1)

     

    För att kontrollera om ANSI-escape-sekvenser filtreras bort eller inte i kommentarsfältet kan vi använda en enkel nyttolast som visar `THIS IS GREEN` i färgen grön.

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

     

    När vi kör rar l demo.rar kan vi se att THIS IS GREEN skrivs ut i grönt. Detta visar att kommentarsfältet inte filtrerar ANSI-escape-sekvenser i utdata.

    3 (1)

     

    Utnyttjande

    Sårbarheten kan utnyttjas på många olika sätt, men vi kommer att använda en attack som är lämplig för WinRAR som en demonstration.

    Först lägger vi in filen virus.exe i en rar-fil :

    $ ls

    virus.exe

    $ rar a demo.rar virus . exe

     

    Sedan lägger vi till följande nyttolast i kommentarsfältet:

    printf 'Arkiv: demo.rar\nDetaljer: RAR 5\n\nAttribut Storlek Datum Tid Namn\n----------- --------- ---------- ----- ---------\n-rw-r--r-- 7 2024-05-19 16:26 notvirus.pdf\n----------- --------- ---------- ----- ---------\n7 1\e[8m' | rar c demo.rar

     

     

    Den här nyttolasten innehåller en falsk lista där virus.exe ersätts med notvirus.pdf. ANSI-escape-sekvensen \e[8m används för att dölja allt innehåll efter kommentaravsnittet i utdata. Resultatet är att den faktiska filposten är dold och att vår falska filpost visas. I skärmdumpen nedan kan du se ett stort gap mellan utdata och skalprompten. Detta gap beror på att den ursprungliga fillistan skrivs ut, men görs osynlig med hjälp av \e[8m. Erfarna kommandoradsanvändare kan tycka att detta är misstänkt, men mindre erfarna användare kan lätt bli lurade.

    4-1

    Som nämnts finns det två CVE:er kopplade till denna sårbarhet eftersom den är betydligt allvarligare på Linux- och Unix-system jämfört med Windows. Detta beror på att vissa ANSI escape-sekvenser kan användas för att uppnå en lokal serviceattack på Linux- och Unix-system.

    Nyttolasten nedan, som är hämtad från Stok Fredriks Black Hat-bilder, fångar alla markörrörelser och skriver ut koordinaterna till terminalen. Detta fungerar bara på Linux- och Unix-system. När det testades på en Kali Linux VM skickades markörens koordinater ut till terminalen och VM:n frystes senare.

     

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

     

    dos

    Även om det finns begränsad forskning om ANSI-escape-sekvenser är det tydligt att angripare med en djup förståelse för ANSI-escape-sekvenser kan utnyttja dem på ett kreativt, skadligt och ibland till och med irriterande sätt.

     

    Frågor om IT-säkerhet? Kontakta oss här:

     

    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