Dziwny błąd wyglądający zupełnie jak tylna furtka w bazach Oracle

dodał 21 stycznia 2015 o 15:50 w kategorii Top  z tagami:
Dziwny błąd wyglądający zupełnie jak tylna furtka w bazach Oracle

Niektóre błędy od razu wyglądają podejrzanie. Szczególne wątpliwości nas ogarniają, gdy nie jest to typowa pomyłka programisty, błąd jest dobrze ukryty przed przypadkową identyfikacją i pozwala na przejęcie kontroli nad systemem.

Oracle wypuścił wczoraj niecałe 170 łat na swoje systemy. Wśród usuniętych błędów znajduje się jeden szczególnie ciekawy. Jak donosi znany badacz bezpieczeństwa systemów bazodanowych David Litchfield, odkrywca problemu, błąd umożliwia przejęcie kontroli nad dowolną bazą danych w produkcie Oracle eBusiness Suite (wersje 12.2.x, 12.1.x, 12.0.x, 11.5.10).

Dziwne uprawnienia w dziwnym miejscu

Błąd CVE-2015-0393 jest ciekawy, ponieważ wynika z nieprawidłowej konfiguracji uprawnień dostępu, pozwalającej dowolnemu użytkownikowi (a wg badacza dzięki innym błędom nie jest nawet potrzebne konto) na wykonywanie poleceń z uprawnieniami administratora. Sam błąd jest „ukryty” w rzadko analizowanym obszarze bazy, dzięki czemu do tej pory umykał uwadze specjalistów. Polega on na tym, że rola PUBLIC posiada uprawnienie INDEX na tablicy DUAL, której właścicielem jest SYS. Oznacza to, że użytkownik, posiadający wiedzę o takiej konfiguracji uprawnień, może wykonywać na bazie polecenia SQL z najwyższymi uprawnieniami SYS i na przykład odczytywać dowolną jej zawartość lub ją modyfikować.

Logo firmy Oracle

Logo firmy Oracle

Jak wykorzystać ten problem do podniesienia uprawnień użytkownika? Opisuje to sam autor odkrycia. Wystarczy korzystając z konta zwykłego użytkownika stworzyć funkcję GETDBA, która przypisuje rolę DBA do roli PUBLIC. Następnie trzeba stworzyć indeks np. EXPLOIT_INDEX na tablicy SYS.DUAL, który wywołuje funkcję GETDBA. Potem wystarczy już tylko wykonać SELECT na tablicy DUAL. Spowoduje to wykonanie funkcje GETDBA i przyznanie uprawnień.

Po co to komu

Litchfield znalazł błąd  przy okazji audytu wykonywanego dla jednego ze swoich klientów i na początku myślał, że trafił na specjalnie skonstruowaną tylną furtkę, która ma umożliwiać atakującemu ciągły dostęp do bazy. Tablica DUAL pełni funkcję stricte techniczną, posiada tylko jeden wiersz i nie ma żadnego powodu, dla którego trzeba by zakładać na niej indeks. Oczywiście nie ma również żadnego uzasadnionego powodu, dla którego rola PUBLIC ma mieć uprawnienie do zakładania takiego indeksu. Dopiero później z zaskoczeniem odkrył, że jest to domyślna konfiguracja produktu Oracle dostarczanego wszystkim klientom.

Litchfield informacje o odkrytym problemie przekazał Oracle jeszcze w czerwcu 2014 wraz z prośbą o ustalenie, w jaki sposób taka podejrzana konfiguracja znalazła się w kodzie produkcyjnym. W odpowiedzi usłyszał, że nie udało się ustalić kto, kiedy ani po co wprowadził taką zmianę do kodu. Nie da się ukryć, że w takiej sytuacji ludzki błąd bardzo trudno odróżnić od celowego działania.

Litchfield opublikował także dokładny opis innych odkrytych przez siebie błędów w bazach Oracle załatanych w ostatniej aktualizacji.