Jogosultságkiterjesztésre alkalmas hibát fedeztek fel a sudo eszközben. A sebezhető kódrészlet az alábbi:
void sudo_debug(int level, const char *fmt, ...) { va_list ap; char *fmt2; if (level > debug_level) return; /* Backet fmt with program name and a newline to make it a single write */ easprintf(&fmt2, "%s: %s\n", getprogname(), fmt); va_start(ap, fmt); vfprintf(stderr, fmt2, ap); va_end(ap); efree(fmt2); }
Az easprintf() elhelyezi a getprogname() visszatérési értékét a fmt2 változóban, majd ez a karakterlánc kerül felhasználásra a vfprintf() formátum sztringjeként. Mivel a getprogname() a hívott program saját nevét (argv[0]) adja vissza, a formátum lényegében közvetlenül kontrollálható, ha debug módban indítjuk a programot:
/tmp $ ln -s /usr/bin/sudo %n
/tmp $ ./%n -D9
*** %n in writable segment detected ***
Aborted
/tmp $
Ahogy a fenti hibaüzenet is mutatja, a FORTIFY_SOURCE terminálja a futást, amint %n-t lát egy írható memóriaszegmensben, ami megnehezíti a hiba kihasználását, de nem akadályozza meg. A VUPEN-nél állítólag már van egy működő exploit (persze ha annyi infót tennék közzé, mint ők, én is írogathatnék ilyeneket a Twitterre...).
A hiba a sudo 1.8.0-ás változatában került bevezetésre, az 1.8.3p2 javítja.