In de tool wall, geleverd in het util-linux pakket en bedoeld om berichten naar terminalen te sturen, is een kwetsbaarheid (CVE-2024-28085) ontdekt die een aanval op de terminals van andere gebruikers mogelijk maakt door manipulatie van escape-sequenties. Het probleem wordt veroorzaakt doordat de tool wall het gebruik van escape-sequenties in de invoerstroom blokkeert, maar deze operatie niet uitvoert voor argumenten in de opdrachtregel, waardoor een aanvaller escape-sequenties kan uitvoeren in de terminal van andere gebruikers.
Bijvoorbeeld, door ‘wall $(printf «\033[33mHI»)’ uit te voeren, kan de tekst ‘HI’ in gele kleur worden weergegeven. Met behulp van escape-sequenties, die het mogelijk maken om de cursor te verplaatsen, de inhoud op het scherm te wissen en te vervangen, kan men een schijnbaar verzoek om een wachtwoord van de sudo-tool simuleren in de terminal van een andere gebruiker. Als de gebruiker de valstrik niet opmerkt en zijn wachtwoord invoert, zal het wachtwoord in de invoergeschiedenis verschijnen als een niet-bestaande opdracht (feitelijk zal de gebruiker zijn wachtwoord in de opdrachtregel invoeren in plaats van een opdracht). ‘\033[3A’ // verplaats de cursor omhoog met 3 regels ‘\033[K’ // wis de vorige uitvoer ‘[sudo] wachtwoord voor een_gebruiker:’ // geef een valse sudo-aanroep weer ‘\033[?25l’ // stel de achtergrondkleur in om invoer te verbergen ‘\033[38;2;48;10;36m’
Tijdens de weergave van de waarschuwing dat de ingevoerde opdracht niet is gevonden, wordt in veel distributies de handler /usr/lib/command-not-found gestart, die probeert het pakket te bepalen waarin de ontbrekende opdracht aanwezig is en een suggestie doet voor de installatie. Het probleem is dat tijdens het starten van de command-not-found handler de niet-bestaande opdracht als een opdrachtregelparameter aan hem wordt doorgegeven, die zichtbaar is bij het bekijken van de processen in het systeem (bijvoorbeeld, bij het proberen uit te voeren van de niet-geïnstalleerde tool ‘xsnow’ zal in de lijst met processen ‘/usr/lib/command-not-found -- xsnow’ zichtbaar zijn). Dienovereenkomstig kan een aanvaller het starten van processen in de gaten houden (bijvoorbeeld door het analyseren van het verschijnen van ‘/proc/$pid/cmdline’ voor het voorspelbare PID-nummer) en het wachtwoord bepalen dat het slachtoffer in de opdrachtregel heeft ingevoerd.
Om ervoor te zorgen dat een gebruiker zijn wachtwoord invoert als reactie op een nep-sudo-prompt, is er een truc beschikbaar waarin het doel is om het proces van de werkelijke sudo-tool te volgen, te wachten tot deze voltooid is en aan te vallen via 'wall' direct daarna. Door manipulatie met escape-sequenties kan de aanvaller de boodschap na de werkelijke uitvoering van sudo vervangen door een nep-prompt om het wachtwoord opnieuw in te voeren. Het slachtoffer kan denken dat het een fout heeft gemaakt bij het invoeren en het wachtwoord een tweede keer invoeren, waardoor het wachtwoord zichtbaar wordt in de argumenten van de 'command-not-found' handler.
Voor een succesvolle aanval is het vereist om de 'mesg' modus in te stellen op 'y', wat standaard is ingesteld in Ubuntu, Debian en CentOS/RHEL. De mogelijkheid om een aanval uit te voeren is gedemonstreerd in Ubuntu 22.04 met de standaardconfiguratie bij gebruik van gnome-terminal. In Debian is de aanval bemoeilijkt omdat de 'command-not-found' handler standaard niet is ingeschakeld, en in CentOS/RHEL zal de aanval niet werken omdat de wall-tool zonder de setgid-vlag is geïnstalleerd en geen toegang heeft tot andere terminals. Bij gebruik van windows-terminal kan de aanval worden gemodificeerd om de inhoud van het klembord te wijzigen.
De kwetsbaarheid is aanwezig in het util-linux-pakket sinds 2013, toen in versie 2.24 de mogelijkheid om een bericht op de commandoregel van wall op te geven werd toegevoegd, maar vergeten werd escape-sequenties op te schonen. Een oplossing voor de kwetsbaarheid is opgenomen in de release van util-linux 2.40 van gisteren. Opmerkelijk is dat bij een poging om de kwetsbaarheid te verhelpen in util-linux 2.39 een andere soortgelijke kwetsbaarheid werd ontdekt, die het mogelijk maakte om controlekarakters te injecteren via manipulatie van locales.
Bron: opennet.ru
