Remote Code Execution

Zdalne wykonywanie kodu na serwerze ofiary (eng. Remote Code Execution) to bardzo groźny typ ataku na strony internetowe, ponieważ dopuszcza on atakującego do interakcji z systemem operacyjnym serwera, który hostuje aplikację webową, która to z kolei stała się celem ataku.

Benefitem, który jest osiągalny dla atakującego to między innymi zestawienie nieautoryzowanej sesji terminalowej pomiędzy serwerem hostującym (podatną na zdalne wykonywanie kodu) aplikację webową a maszyną atakującego oraz wyświetlenie zawartości poufnych danych.

Na czym polega atak Remote Code Execution?

Remote Code Execution polega na zdalnym wywołaniu komendy systemu operacyjnego hostującego aplikację do której atakujący ma dostęp, jednakże samo wywołanie owej komendy odbywa się w sposób nieautoryzowany.

Co warte podkreślenia, atakujący wykonuje komendy systemowe na serwerze ofiary nie mając do niego dostępu a jedynie, posiadając możliwość interakcji z aplikacją webową która jest serwowana przez owy serwer.

Przykładowy scenariusz:

Atakujący ma dostęp do aplikacji WWW, która ma jedną funkcjonalność. Tą funkcjonalnością jest możliwość wywoływania komendy ping z serwera hostującego tę aplikację webową.

A zatem, atakujący wpisuje adres IP, który chce pingować z serwera aplikacji webowej:

Powyższa akcja zakończyła się sukcesem, ponieważ została wywołana komenda ping w kierunku adresu IP 1 oraz połączona z wywołaniem komendy ls. Pierwsza została wykonana niepomyślnie (stąd poniżej paska do wpisania adresu IP nie ma wyświetlonego wyniku pingowania), natomiast druga została wykonana pomyślnie i stąd wyświetlona została lista zasobów: help, index.php i source.

Względem jakich zasobów atakujący może wykonywać czynności?

Atakujący może m.in. wyświetlać zawartość tylko tych plików, do których ma uprawnienia. Tutaj należy mieć świadomość, że każda aplikacja webowa hostowana jest na danych uprawnieniach. W przypadku, który jest analizowany, aplikacja korzysta z uprawnień niskich, czyli www-data.

To implikuje fakt, że atakujący może np. wyświetlić plik /etc/passwd, ale nie będzie w stanie wyświetlić pliku /etc/shadow, ponieważ uprawnienia użytkownika systemowego www-data są zbyt niskie, aby tego dokonać.