file(1) od podstaw w OpenBSD

OpenBSD zyskuje nową, współczesną i bezpieczną  implementację file(1).

Dlaczego przepisywać tak bazowy program? Jeden rzut oka na bazę CVE wskazuje na 25 błędów związanych z bezpieczeństwem w file(1). Co z tego, nikt nie używa file(1) do poważnych rzeczy. Nieprawda. Większość aplikacji internetowych korzysta z tego programu celem określenia typu uploadowanego pliku. Ponadto część użytkowników odpala ten program na losowych binarkach pobranych z sieci, nawet mając świadomość, że pobrany program jest wirusem. Przecież używam Linuksa/BSD – jestem bezpieczny…

Michał ‚lcamtuf’ Zalewski na swoim blogu opisywał taki wektor ataku poprzez program strings(1) wraz z błędami jakie wykrył jego fuzzer AFL. Tych prostych narzędzi nikt nie przegląda. Odpalenie fuzzera nawet na dużej ilości bazowych programów systemowych nie kosztuje wiele, a pozwala na wykrycie bardzo poważnych błędów. Jeżeli web aplikacja odpala taki program na uploadowanych plikach, to katastrofa, a zdalny dostęp do serwera jest tylko kwestią czasu.

Informacja o nowej implementacji pojawiła się na liście openbsd-cvs@ w postaci commita, którego autorem jest Nicholas Marriott. Informuje on w treści o mocno uproszczonym kodzie implementującym prawie w całości magic(5), z pominięciem parsowania formatu ELF. Zmniejszono też ilość flag dostępnych w programie.

Niedługo po publikacji tego commita, Bryan Steele stworzył przenośną wersję nowej implementacji file(1) informując o tym na twitterze. Udostępnił również nowy manual dla programu w formacie PDF.

Ogłoszenie, wywołało też dość głośną dyskusję na hackernews.

Skomentuj

Twój adres e-mail nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *