10 kwietnia 2010

Krytyczna luka w środowisku wykonawczym Java

Krytyczny błąd obecny w środowisku wykonawczym Sun Java (Java Runtime Environment, JRE) pozwala na zdalne wykonanie dowolnego kodu. Odwiedzenie specjalnie spreparowanej witryny internetowej może spowodować za pośrednictwem praktycznie dowolnej przeglądarki internetowej uruchomienie złośliwego kodu w naszym systemie operacyjnym. Na atak podatne są wszystkie systemy z rodziny Windows. Prawdopodobnie problem ten dotyczy również systemów Linux.

Tavis Ormandy w sposób praktyczny potwierdził obecność krytycznego błędu w komponencie Java Web Start wchodzącym w skład środowiska wykonawczego Sun Java. Błąd można wykorzystać do zdalnego wykonania kodu (z uprawnieniami bieżącego użytkownika) we wszystkich wersjach systemów Windows. Prawdopodobnie podobny atak może zostać opracowany dla systemów z rodziny Linux.

Praktyczne wykonanie ataku jest niezwykle proste. Wystarczy tylko, że specjalnie spreparowana witryna przekaże odpowiednie polecenia do komponentów Java odpowiedzialnych za uruchamianie aplikacji. Atak jest skuteczny za pośrednictwem praktycznie dowolnej przeglądarki internetowej.

W systemach z rodziny Windows luka obecna jest w kontrolce ActiveX Java Deployment Toolkit (w przypadku Internet Explorera) oraz wtyczce NPAPI (w przypadku Firefoksa oraz innych przeglądarek korzystających z tej wtyczki). Java Deployment Toolkit zawiera metodę launch(), która pozwala na instalację oraz uruchamianie programów za pomocą adresu URL wskazującego na plik Java Networking Launching Protocol (.jnlp). Począwszy od Java 6 Update 10, komponent Java Deployment Toolkit jest domyślnie dostarczany w ramach instalacji Java Runtime Environment.

Problem polega zaś na tym, że w wyniku braku odpowiedniej kontroli, komponent Java Web Start akceptuje komendy zawarte w adresach URL i następnie przekazuje je do dalszego wykonania. Niestety, wyłączenie obsługi ActiveX lub wtyczki NPAPI nie rozwiązuje problemu. Przed udanym atakiem nie uchronią nas również mechanizmy takie jak Microsoft DEP (ang. Data Execution Prevention) lub ASLR (ang. Address Space Layout Randomization).

Luka obecna jest we wszystkich wersjach JRE począwszy od Java 6 update 10. Tavis Ormandy utworzył przykład PoC dowodzący praktycznej możliwości wykonania ataku. Samo tylko odwiedzenie wspomnianej strony pokazowej powoduje całkowicie automatyczne uruchomienie apletu calc.jar. W wyniku działania apletu, w systemie operacyjnym użytkownika następuje automatyczne uruchomienie aplikacji calc.exe. W podobny sposób możliwe jest lokalne uruchomienie dowolnego kodu (np. trojana pobranego przy pomocy odpowiedniej komendy za pomocą protokołu FTP). Ruben Santamarta opublikował natomiast kod PoC.

Obrona przed potencjalnym atakiem nie jest w chwili obecnej prosta. Producent (Oracle — po niedawnym przejęciu Sun Microsystems) został już powiadomiony o całej sprawie, nie zamierza jednak opublikować odpowiedniej poprawki w trybie przyspieszonym. Na chwilę obecną możliwe jest więc jedynie zastosowanie tymczasowych środków zaradczych (wyłączenie obsługi technologii Java w przeglądarce internetowej nie jest wystarczające), które niestety są zależne od stosowanej przeglądarki internetowej. Wielu znanych ekspertów zajmujących się bezpieczeństwem (takich jak Alexander Sotirov) zaleca natomiast całkowite porzucenie technologii Java.

[źródło1] [źródło2]