Nell'utility , utilizzata per organizzare l'esecuzione di comandi per conto di altri utenti, (), che consente l'esecuzione di comandi con privilegi di root, in presenza di regole nelle impostazioni sudoers in cui, dopo la parola chiave di autorizzazione «ALL», vi è un'esplicita proibizione di esecuzione con privilegi di root («… (ALL, !root) …»). Nelle configurazioni predefinite delle distribuzioni la vulnerabilità non si manifesta.
In presenza di regole sudoers valide, ma estremamente rare nella pratica, che consentono l'esecuzione di un comando specifico sotto un identificatore UID di qualsiasi utente tranne root, un attaccante con i diritti di esecuzione di tale comando può eludere la restrizione stabilita ed eseguire il comando con privilegi di root. Per eludere la limitazione è sufficiente tentare di eseguire il comando specificato nelle impostazioni con UID «-1» o «4294967295», il che porterà alla sua esecuzione con UID 0.
Ad esempio, se nelle impostazioni è presente una regola che consente a chiunque di eseguire il programma /usr/bin/id con qualsiasi UID:
myhost ALL = (ALL, !root) /usr/bin/id
o un'opzione che consente l'esecuzione solo per l'utente specifico bob:
myhost bob = (ALL, !root) /usr/bin/id
L'utente può eseguire «sudo -u ‘#-1’ id» e l'utility /usr/bin/id verrà avviata con i privilegi di root, nonostante il divieto esplicito nelle impostazioni. Il problema è causato dall'assenza di attenzione ai valori speciali «-1» o «4294967295», che non conducono al cambio di UID, ma poiché sudo stesso è già eseguito come root, senza il cambio di UID anche il comando di destinazione viene eseguito con i privilegi di root.
Nei distributivi SUSE e openSUSE, senza specificare nella regola «NOPASSWD» la vulnerabilità , poiché in sudoers è attivata per impostazione predefinita la modalità «Defaults targetpw», in cui viene verificato l'UID nel database delle password con la richiesta di inserimento della password dell'utente di destinazione. Per tali sistemi, l'attacco può essere effettuato solo in presenza di regole del tipo:
myhost ALL = (ALL, !root) NOPASSWD: /usr/bin/id
Il problema è stato risolto nella versione . La correzione è anche disponibile in forma di . Nei distributivi la vulnerabilità è già stata risolta in , , , , e . Al momento della scrittura della notizia, il problema rimane irrisolto in e . La vulnerabilità è stata identificata dai ricercatori della sicurezza della società Apple.
Fonte: opennet.ru
