20 lat temu bezpieczeństwo IT było abstrakcyjnym terminem a każdy system miał trywialne w wykorzystaniu dziury. Myśleliśmy, że dzisiaj znane błędy są już od dawna załatane. Najwyraźniej przez ostatnie 20 lat IBM miał inne rzeczy na głowie.
Za tamtych dobrych czasów większość znanych wówczas błędów umożliwiających uzyskanie uprawnień roota wynikała nie z pomyłek w kodzie programu, ale z niedopracowania logiki zawartej w aplikacji. W latach 80-tych autorzy oprogramowania zwracali uwagę na to, by wykonywało podstawowe zadania, a bezpieczeństwo było pojęciem dość mglistym i bliżej niezidentyfikowanym. Jednym z klasycznych błędów wynikających z tego podejścia były niezliczone dziury w sendmailu, wówczas najpopularniejszej , a w zasadzie jedynej usłudze poczty elektronicznej.
Ach, ten sendmail
Sendmail, dzięki błędom odkrywanym przez kolejne pokolenia domorosłych hakerów, był przez wiele lat jednym z najczęściej wykorzystywanych sposobów uzyskania dostępu do cudzego systemu. Legendarne P0WER & Lcamtuf HACK FAQ w wersji 1.1 z roku 1997 wyliczało 11 znanych exploitów na tę usługę, z których najbardziej skomplikowany miał 3 linijki i wymagał na przykład przekierowania treści emaila „+ +” do pliku .rhosts.
.forward kluczem do roota
Jednym z najstarszych błędów w sendmailu jest wykorzystanie funkcjonalności pliku .forward. Autorzy programu wpadli na pomysł, by plik ten, umieszczony w folderze domowym użytkownika, nie tylko umożliwiał przesyłanie przychodzącej poczty na inny adres, ale także wykonywanie określonych w nim poleceń. Problem polegał na tym, że polecenia wykonywane były z uprawnieniami procesu sendmaila – a ten najczęściej wtedy korzystał z uprawnień roota. Wystarczyło więc umieścić w swoim pliku .forward ciąg np. |/bin/echo r00t::0:0:r00t:/:/bin/bash >>/etc/passwd i wysłać do siebie emaila, by dostać nowe konto roota bez hasła.
23 lata minęły…
Na najstarszy ślad opisu tego problemu udało nam się natrafić w Open Source Vulnerability Database. Opis analogicznego błędu pochodzi ze stycznia roku 1989. Prawdopodobnie błąd występował wcześniej (sendmail powstał na początku lat 80-tych), lecz starsze opisy mogły zaginąć w mroku dziejów. Wydawało się nam, że tego typu rewelacje można w roku 2012 znaleźć już tylko na bardzo zakurzonych półkach. Aż tu nagle 2 dni temu pojawił się biuletyn bezpieczeństwa IBMa dotyczący ich flagowego systemu operacyjnego AIX w wersji 6.1 i 7.1. W tym biuletynie możemy wyczytać, że, uwaga… sendmail runs piped commands in .forward with root privilages.
Kiedy już wszyscy pozbieramy się z podłogi możemy zacząć się zastanawiać, co robił dział bezpieczeństwa IBMa od roku 1989 do 2012 lub też ile razy ten błąd został wykorzystany podczas ostatnich 23 lat. Możemy też pokiwać głową z zrozumieniem, mrucząc lepiej późno, niż wcale i przypomnieć sobie klasyczny fragment filmu Hakerzy.