In de tool , dat wordt gebruikt voor het uitvoeren van opdrachten namens andere gebruikers, kwetsbaarheid (), die het mogelijk maakt om je privileges in het systeem te verhogen tot die van de rootgebruiker. Het probleem doet zich voor vanaf de release van sudo 1.7.1, maar alleen wanneer de optie «pwfeedback» in het bestand /etc/sudoers is ingeschakeld, wat standaard is uitgeschakeld, maar in sommige distributies zoals Linux Mint en Elementary OS is ingeschakeld. Het probleem is opgelost in de release , die enkele uren geleden is gepubliceerd. In de distributies blijft de kwetsbaarheid voorlopig onopgelost.
De optie «pwfeedback» zorgt ervoor dat het symbool «*» wordt weergegeven na elk ingevoerd teken bij het invoeren van een wachtwoord. Door de implementatie van de functie getln(), zoals gedefinieerd in het bestand tgetpass.c, kan het zijn dat een te lange tekenreeks die via de standaardinvoer (stdin) is doorgegeven onder bepaalde omstandigheden niet past in de toegewezen buffer, waardoor andere gegevens op de stack worden overschreven. De bufferoverloop vindt plaats tijdens het uitvoeren van de sudo-code met root-rechten.
Het probleem is dat tijdens het invoeren van het speciale teken ^U (regel wissen) en bij een fout in de schrijfoperatie, de code die verantwoordelijk is voor het wissen van de weergegeven symbolen «*» de beschikbare buffer grootte reset, maar de pointer naar de huidige positie in de buffer niet naar de oorspronkelijke waarde terugbrengt. Een andere factor die bijdraagt aan de exploitatie is het ontbreken van automatische deactivatie van de «pwfeedback»-modus wanneer gegevens niet van de terminal komen, maar via een invoerstream (dit gebrek maakt het mogelijk om een schrijf-fout te creëren, bijvoorbeeld op systemen met unidirectionele de fout treedt op bij een poging om over de rand van de lees-pijp te schrijven).
Aangezien de aanvaller volledige controle heeft over het overschrijven van gegevens op de stack, is het niet moeilijk om een exploit te creëren die zijn privileges tot rootgebruiker kan verhogen. Het probleem kan door elke gebruiker worden uitgebuit, ongeacht de rechten voor het gebruik van sudo en het al dan niet hebben van specifieke gebruikersinstellingen in sudoers. Om het probleem te blokkeren, moet ervoor worden gezorgd dat de instelling «pwfeedback» niet aanwezig is in /etc/sudoers en deze indien nodig worden uitgeschakeld («Defaults !pwfeedback»). Om te controleren op het probleem kan de volgende code worden uitgevoerd:
$ perl -e ‘print((«A» x 100 . «\x{00}») x 50)’ | sudo -S id
Wachtwoord: Segmentatiefout
Bron: opennet.ru
