Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book
Niezałatana podatność w Dockerze – może dać roota na głównym systemie
Podatność CVE-2018-15664 została upubliczniona przez jednego z inżynierów SUSE Linux. W pewnym uproszczeniu chodzi o podatność klasy race condition z użyciem linków symbolicznych. Z drugiej strony to podatność klasy TOCTOU. Np. jakaś operacja tworzy link symboliczny, jest on rozwiązywany na odpowiednią ścieżkę w kontenerze, w tym momencie go szybko podmieniamy na coś wskazującego na główną maszynę (poza kontenerem) – mamy na to minimalną ilość czasu – i ww. operacja używa już nowego linku (myśląc, że jest on bezpieczny).
Zatem przy pewnych warunkach można z kontenera uzyskać za pomocą linku symbolicznego dostęp do plików na głównym systemie (odczyt/zapis).
Do wykorzystania podatności najprawdopodobniej wystarczy mieć: a) dostęp do dowolnego kontenera lub b) udostępnić odpowiednio spreparowany kontener.
Całość PoC-a to odpalenie dość prostego skryptu (załączonego do opisu podatności):
./run_read.sh &>/dev/null & ; sleep 10s ; pkill -9 run.sh % chmod 0644 ex*/out # to fix up permissions for grep % grep 'SUCCESS' ex*/out | wc -l # managed to get it from the host 2 % grep 'FAILED' ex*/out | wc -l # got the file from the container 334
Jak pisze autor, pojedyncza szansa na „wygranie wyścigu” jest < 1%. Ale odpowiednio duża liczba iteracji robi to co trzeba (czyli nieautoryzowany dostęp jest realizowany w czasie około 10 sekund).
In the case of run_read.sh, I get a <1% chance of hitting the race condition (my attack script is quite dumb, it’s possible with better timing you’d be able to hit the race window much more effectively).
However <1% still means it only takes 10s of trying to get read access to the host with root permissions.
Obecny exploit wymaga użycia docker cp, ale różne osoby wskazują, że jest to tylko przykład i najprawdopodobniej dużo miejsc w samych dockerze jest podatnych.
–ms