Biuletyn Bezpieczeństwa PLOUG

Od 2006-05-04 do 2006-08-03

Wojciech Dworakowski, SecuRing wojtekd@securing.pl

18 lipca 2006 Oracle udostępniło zestaw poprawek „Oracle Critical Patch Update October 2006”. Poprawiono 65 podatności w różnych komponentach, w tym 23 w bazie, 10 w serwerze aplikacji i 20 w Oracle Applications. Tradycyjnie najwięcej podatności wiąże się z błędami z różnych preinstalowanych pakietów pozwalających na atak metodą SQL injection. Między innymi poprawiono podatność w pakiecie DBMS_EXPORT_EXTENSION. Istnienie tej podatności wiązało się z dużym ryzykiem ponieważ w kwietniu 2006 został opublikowany przykładowy kod wykorzystujący tę dziurę (pisałem o tym w poprzednim numerze Biuletynu).

Uwaga: Niestety nie usunięto podatności umożliwiającej uzyskanie większych uprawnień przez manipulację widokami, o której pisałem w kwietniu.

Najciekawszym doniesieniem w omawianym okresie było niewątpliwie wykrycie podatności związanych z pakietem DBMS_ASSERT. Pakiet ten (wprowadzony w 10gR2 i zestawie poprawek CPU Oct 2005) był wykorzystany przez Oracle do załatania licznych dziur pozwalających na wykonanie wrogiego kodu SQL (SQL injection). Okazało się jednak że zabezpieczenie jest nieskuteczne oraz że daje się je łatwo obejść.

Poniżej opisuję szczegóły najważniejszych podatności ujawnionych po publikacji ostatniego CPU.

Nieprawidłowe użycie zabezpieczeń DBMS_ASSERT w wielu funkcjach wewnętrznych

Produkty podatne na zagrożenie: Oracle Database – 10gR2 oraz wcześniejsze z wgranym zestawem poprawek CPU Oct 2005.

Data publicznego ujawnienia: 7.06.2006 – Alexander Kornburst, Red-Database-Security GmbH.

Opis: Podatność pozwala na wykorzystanie ponad 30 podatności typu SQL injection usuniętych wcześniej przez Oracle. Wynika to z nieprawidłowego usunięcia podatności przy użyciu funkcji zabezpieczającej DBMS_ASSERT. Skutkiem wykorzystania podatności SQL-injection jest z reguły możliwość wykonania kodu PL/SQL z uprawnieniami właściciela podatnej procedury (np. DBA).

Status: Podatności nie poprawiono w CPU Jul 2006.

Ryzyko: bardzo duże Aby wykorzystać podatność, intruz musi mieć dowolne konto w bazie i możliwość wywoływania podatnych procedur. W większości procedury te są dostępne dla grupy PUBLIC. Udostępniono szczegóły techniczne pozwalające na wykorzystanie podatności średnio zaawansowanemu intruzowi.

Skutki potencjalnego ataku: duże Skutkiem udanego ataku jest wykonanie dowolnego kodu PL/SQL z uprawnieniami właściciela podatnej procedury (z reguły DBA).

Szczegóły techniczne: Ze względu na dużą liczbę wykrywanych podatności pozwalających na atak metodą SQL injection (doklejenie wrogiego kodu SQL do parametrów wywołania podatnej procedury), w wersji 10gR2 Oracle wprowadził pakiet DBMS_ASSERT. Pakiet ten został również wprowadzony do wcześniejszych wersji bazy w poprawce CPU October 2005. Pakiet DBMS_ASSERT umożliwia proste sprawdzanie poprawności (walidowanie) nazw obiektów wprowadzanych przez użytkownika.

Oracle od blisko roku wykorzystuje pakiet DBMS_ASSERT jako podstawową metodę usuwania podatności SQL injection w swoich procedurach. Okazało się, że zabezpieczenie to było stosowane w sposób nieprawidłowy i udaje się je obejść odpowiednio stosując znak cudzysłowu. Funkcje DBMS_ASSERT po prostu nie sprawdzają podatności, jeśli parametr jest zawarty w cudzysłowach. Dzięki temu nieskutecznemu zabezpieczeniu, pomimo wgrania wszystkich najnowszych poprawek można wykorzystać blisko 30 podatności pozwalających na atak metodą SQL injection.

Usunięcie podatności: Jako ograniczenie skutków wykorzystania podatności zaleca się odebranie przywilejów CREATE PROCEDURE i ALTER PROCEDURE użytkownikom, dla których nie jest to niezbędne.

Podatności pozwalające na atak metodą SQL-injection

Produkty podatne na zagrożenie: Oracle Database – wszystkie wersje od 8i.

Data publicznego ujawnienia: 18.07.2006.

Opis: W procedurach PL/SQL instalowanych wraz z bazą Oracle wykryto wiele podatności pozwalających na atak metodą SQL-injection i w rezultacie na uzyskanie większych przywilejów w bazie.

Status: Podatności poprawiono w CPU Jul 2006.

Ryzyko: duże Żeby wykorzystać opisywane podatności intruz musi mieć konto w bazie danych i prawa do wykonywania podatnej procedury. Wiele z tych procedur jest dostępnych dla grupy PUBLIC. Opublikowano nazwy podatnych procedur oraz nazwy parametrów podatnych na manipulację. W związku z powyższym, pomimo tego że nie upubliczniono szczegółowego przepisu na wykorzystanie podatności, należy zakładać że średnio zaawansowany intruz jest w stanie je wykorzystać.

Dla jednej z podatności (w funkcji DBMS_EXPORT_EXTENSION) został również opublikowany exploit pozwalający na wykorzystanie podatności nawet niezaawansowanemu intruzowi.

Skutki potencjalnego ataku: duże Skutkiem udanego ataku jest możliwość wykonania kodu PL/SQL z przywilejami właściciela podatnej procedury (dla niektórych procedur jest to DBA).

Szczegóły techniczne: Atak SQL injection polega na manipulacji parametrem przyjmowanym przez procedurę. Skutkiem jest wykonanie kodu PL/SQL z uprawnieniami właściciela podatnej procedury (z reguły DBA) i w rezultacie osiągnięcie wyższych przywilejów w bazie. Wykryte podatności dotyczą kilkunastu pakietów PL/SQL standardowo instalowanych z bazą Oracle, w większości dostępnych dla grupy PUBLIC. M.in.:

SYS.DBMS_STAT_FUNCS
SYS.DBMS_UPGRADE
SYS.DBMS_CDC_IMPDP
SYS.DBMS_CDC_ISUBSCRIBE
SYS.DBMS_EXPDP
SYS.KUPW$WORKER
SYS.DBMS_EXPORT_EXTENSION
SYS.DBMS_XDBZ0
SYS.DBMS_ADVISOR

Pełna lista podatnych procedur wraz z podaniem parametrów oraz wymaganych przywilejów dostępna jest pod adresem: http://www.red-database-security.com/advisory/oracle_cpu_jul_2006.html

Usunięcie podatności: Podatności są uwzględnione w zestawie poprawek „Oracle Critical Patch Update October 2006”. Jednakże należy zaznaczyć, że zastosowane zabezpieczenia w większości przypadków są nieskuteczne, ze względu na nieprawidłowe użycie funkcji walidujących z pakietu DBMS_ASSERT (vide poprzedni rozdział).

Podatności pozwalające na atak metodą buffer overflow

Produkty podatne na zagrożenie: Oracle Database – wszystkie wersje od 8i.

Data publicznego ujawnienia: 18.07.2006.

Opis: Manipulacja parametrami przekazywanymi do podatnych procedur może doprowadzić do wykonania wrogiego kodu w systemie operacyjnym. Kod wykona się z uprawnieniami właściciela instalacji Oracle.

Status: Podatności nie poprawiono w CPU Jul 2006.

Ryzyko: średnie Podatność może być wykorzystana przez dowolnego użytkownika mającego możliwość wywoływania procedur z bazy danych (podatne procedury są dostępne dla grupy PUBLIC). W chwili obecnej nie ma dostępnych publicznie informacji o funkcjach i parametrach, w których jest możliwe przepełnienie bufora. Są jedynie znane nazwy niektórych podatnych pakietów. W związku z tym wykorzystanie omawianych podatności nie jest trywialne.

Skutki potencjalnego ataku: duże Skutkiem ataku jest wykonanie dowolnego kodu w systemie operacyjnym z uprawnieniami właściciela instalacji Oracle lub zawieszenie procesu serwera bazy danych.

Szczegóły techniczne: Podatności istnieją między innymi w pakietach

ORDSYS.ORDIMGIDXMETHODS
SYS.DBMS_XRWMV

Pakiety te są dostępne dla grupy PUBLIC.

Usunięcie podatności: Podatności są usuwane przez wgranie zestawu poprawek „Oracle Critical Patch Update October 2006”.