Sudo. Mocný nástroj, umožňující běžným uživatelům spouštět předem nakonfigurované příkazy s oprávněním roota. Stejně jako jiné mocné nástroje, nepatří do rukou nezkušeným a někteří staromilci, zamrzlí v dobách BSD 4, jej považují za bezpečnostní riziko jako celek. Právě ti se minulý týden museli radovat a říkat „Já vám to říkal“. V sudo byla totiž 30. ledna 2012, ve verzi 1.8.3p2, konečně zalepena poměrně snadno zneužitelná bezpečnostní díra, zející zde téměř rok.
Exploit
Sudo ve verzi 1.8.0 přineslo podporu jednoduchého debugování, primárně určenou k vývoji bezpečnostních zásad a logování. Právě v tomto modulu existuje funkce sudo_debug() obsahující céčkovou funkci fprintf(), která má, stejně jako všechny *prinf(), jako jeden z parametrů formát řetězce, do kterého doplňuje další předané parametry. Ty se ale, v tomto konkrétním případě, do fprintf() dostávají přímo z příkazové řádky, resp. argv[0] proměnné, a protože někdo opomněl tyto parametry escapovat nebo jinak ošetřit, bylo možné udělat něco takového:
user@machine:~$ ln -s /usr/bin/sudo ./%s
user@machine:~$ ./%s -D9
debug_level: settings: 9=裓▒
progname: settings: %s=
implied_shell: settings: true▒▒▒
network_addrs: settings: 192.168.16.8/255.255.255.0 fe80::226:eaf:f01e:ec02/ffff:ffff:ffff:ffff::=
Neoprávněný přístup do paměti (SIGSEGV)
Neoprávněný přístup do paměti, SIGSEGV, segmentation fault, je úplně jedno jak tomu říkáte u vás. Ty vysypané znaky jsou vyčteny z paměťového prostoru, kam byste se, v ideálním případě, vůbec neměli dostat. Právě tenhle stav je možno využít k přístupu „oprávněnému“, tedy alespoň do té míry, aby to systému nevadilo. Šikovným formátováním řetězce je tedy možno sudo navést k tomu, aby vás na rootovský účet pustilo, a to dokonce i nezávisle na tom, zda jste nebo nejste uvedeni v konfiguračním souboru /etc/sudoers. A vězte, že zrovna k tomuto typu zranitelnosti existuje spousta metod napadení, protože právě na tomhle většina exploiterů začíná. Běžte si tedy pro jistotu zkontrolovat, zda vaše sudo není ve verzi 1.8.0 - 1.8.3p1 a pokud ano, aktualizujte.