Den 15 mars 2024 släppte GNOME en uppdatering för libvte som åtgärdade en sårbarhet i minnesförbrukningen, nu känd som CVE-2024-37535. Denna sårbarhet påverkar många populära terminalemulatorer som GNOME Terminal, XFCE Terminal och MATE Terminal som använder libvte version 0.76.2 eller äldre. Denna sårbarhet kan utnyttjas av en angripare för att döda Xorg-sessionen, vilket leder till att offret förlorar allt sitt osparade arbete.
Många terminalemulatorer, t.ex. XFCE Terminal, iTerm2 och Windows Terminal, har stöd för ANSI escape- och OSC-sekvenser (Operating System Command). Med hjälp av dessa sekvenser kan användaren ändra färgerna i terminalen, formatera texten och göra ändringar i själva terminalemulatorn. En enkel ANSI escape-sekvens kan t.ex. få ordet "GREEN" att visas i grön färg.
Användningen av OSC-sekvenser varierar ofta beroende på terminalemulator. I terminalemulatorn Kitty kan du till exempel överföra filer via TTY-protokollet, vilket inte är möjligt i de flesta andra. Men i terminalemulatorer som GNOME Terminal, XFCE Terminal och MATE Terminal, som är baserade på gamla XTerm, kan du använda OSC-sekvenser för att justera storleken på själva terminalfönstret, som visas i bilden nedan.
I OSC-sekvensen \e[4;W;Ht representerar W bredden och H höjden på fönstret. Biblioteket libvte kontrollerar storleken på terminalfönstret genom dessa sekvenser. Bredd och höjd lagras som int16, där 32767 är det största talet som stöds.
Eftersom förfrågningar om justering av fönsterstorlek via OSC-sekvenser inte valideras kan en angripare skicka värden som överskrider int16-gränsen. En skadlig sekvens som \e[4;65535;65535t kommer att leda till att minnet förbrukas, vilket gör att Xorg-fönsterservern kraschar med ett segmenteringsfel, vilket visas i loggen nedan
En angripare kan leverera den här skadliga sekvensen via ett antal verktyg som analyserar escape-sekvenser, t.ex. curl, cat och head. Angriparen kan till exempel
placera sekvensen på en webbsida och locka offret att använda curl för att hämta innehållet eller lägga sekvensen i en textfil som offret kan läsa med cat eller head. Dessutom är det också möjligt att använda sårbarheten ANSI escape injection i WinRAR (CVE-2024-33899) för att leverera sekvensen.
Som demonstreras i videon nedan kan utnyttjande av denna sårbarhet leda till att användarens session avbryts, vilket kan leda till förlust av osparat arbete.