Stack Clash to exploit oparty na dość starej technice. Pamięć używana przez proces jest podzielona na dwa regiony - stos i stertę . Ogólnie można sobie wyobrazić, że stos rośnie w dół, a sterta rośnie w górę. Co się stanie, gdy jedno z nich dorasta do starcia z drugim? Mówiąc bardziej ogólnie, co dzieje się, gdy stos rośnie wystarczająco, aby wkroczyć w niezwiązane obszary pamięci? Oryginalna luka ma 12 lat, a programiści jądra Linuksa naprawili ją tymczasowo, używając strony ochronnej . Jednak naukowcom z Qualys udało się to wykorzystać, pomimo strony straży.
Raporty Ars Technica :
Luki w stosach Clash powoli zyskały powszechną świadomość, najpierw w 2005 r. Dzięki odkryciom badacza bezpieczeństwa Gaëla Delalleau, a pięć lat później w związku z wydaniem luki w zabezpieczeniach Linuksa przez badacza Rafała Wojtczuka. Programiści systemu Linux
wprowadzili ochronę, która miała zapobiegać kolizjom stosów, ale dzisiejsze badania pokazują, że napastnicy stosunkowo łatwo omijają ten środek.
Główny atak typu proof-of-concept opracowany przez Qualys wykorzystuje lukę zindeksowaną jako CVE-2017-1000364. Badacze Qualys opracowali również ataki wykorzystujące Stack Clash do wykorzystania oddzielnych luk w zabezpieczeniach, w tym CVE-2017-1000365 i CVE-2017-1000367. Na przykład, w połączeniu z CVE-2017-1000367, niedawno naprawioną wadą Sudo, również odkrytą przez Qualys, lokalni użytkownicy mogą wykorzystać Sudo do uzyskania pełnych uprawnień roota w znacznie szerszym zakresie systemów operacyjnych. Qualys do tej pory nie był w stanie dokonać exploitów w celu zdalnego wykonania kodu. Jedyną zdalną aplikacją, którą zbadali, był serwer pocztowy Exim, który przypadkowo okazał się niewykonalny. Qualys powiedziała, że nie można wykluczyć istnienia takich exploitów do zdalnego wykonywania kodu. Qualys powiedział, że wyda exploity oparte na koncepcji w późniejszym terminie,
[...] O wiele więcej informacji można znaleźć w tym szczegółowym poradniku technicznym Qualys oraz w analizie technicznej opracowanej przez Grsecurity .
Cytując artykuł LWN o oryginalnej poprawce z 2010 roku:
Ponieważ Linux nie rozdziela stron stosu i stosu procesów, możliwe jest przekroczenie strony stosu na sąsiedniej stronie stosu. Oznacza to, że odpowiednio głęboki stos (na przykład z wywołania rekurencyjnego) może skończyć się użyciem pamięci na stercie. Program, który może pisać na tej stronie sterty (np. Klient X), może następnie manipulować adresem zwrotnym jednego z wywołań, aby przejść do wybranego przez siebie miejsca. Oznacza to, że klient może spowodować, że serwer uruchomi wybrany przez siebie kod - wykonanie dowolnego kodu - który można wykorzystać do uzyskania uprawnień roota.
Powyższy opis dotyczy różnych jąder uniksopodobnych.
Ars Technica, podczas gdy robi pamiętać tymczasowe obejście wymienionych w sprawozdaniu Qualys ( „ustawić dysk rlimit stosu i RLIMIT_AS z użytkowników lokalnych i zdalnych usług do niskiej wartości”), należy zauważyć, że nie musi to zabezpieczenie przed tego wykorzystać . Jedynym bezpiecznym wyjściem jest obecnie aktualizacja. Według analizy Grsecurity:
Powinno być jasne, że próby rozwiązania tego problemu tylko przez jądro zawsze będą zawsze niekompletne, ponieważ prawdziwym problemem jest brak sondowania stosu. Ponieważ alternatywne rozwiązanie rzeczywiste zależy od przebudowy całego obszaru użytkownika, jest to prawdopodobnie jedyne możliwe rozwiązanie w dającej się przewidzieć przyszłości.
Najlepsze, co możemy teraz zrobić, to zaktualizować jądro do łatanej wersji.
W exploicie z 2010 r. Użyto serwera X, w tym sudo, następnym może być dowolny z wielu programów użytkownika, które w pewnym momencie działają z podwyższonymi uprawnieniami.
Qualys nie opublikował jeszcze żadnego kodu sprawdzającego koncepcję exploitów (planują to zrobić w późniejszym terminie).
Istnieje wiele powiadomień bezpieczeństwa Ubuntu związanych z CVE-2017-1000364:
Zauważ również, że moduł CVE wyświetla kilka kombinacji wersji / jądra jako oczekujących poprawek.
Zasadniczo najprostszą poprawką jest jak najszybsza aktualizacja systemów do najnowszego pakietu jądra.
Odpowiednie wersje jądra z numerów USN (wycofane za pomocą for i in {24..35}; curl -s https://www.ubuntu.com/usn/usn-33$i-1/ | pup 'dl:nth-last-of-type(1)'
):
-
Ubuntu 17.04:
-
linux-image-4.10.0-24-
lowlatency 4.10.0-24.28
-
linux-image-generic-lpae
4.10.0.24.26
-
linux-image-generic
4.10.0.24.26
-
linux-image-4.10.0-24-generic-lpae
4.10.0-24.28
-
linux-image-4.10.0-24-generic
4.10.0-24.28
-
linux-image-
lowlatency 4.10.0.24.26
-
Ubuntu 17.04:
-
linux-image-4.10.0-1008-raspi2
4.10.0-1008.11
-
linux-image-raspi2
4.10.0.1008.10
-
Ubuntu 16.10:
-
linux-image-
powerpc -smp
4.8.0.56.69
-
linux-image-powerpc-e500mc
4.8.0.56.69
-
linux-image-4.8.0-56-powerpc-smp
4.8.0-56.61
-
linux-image-4.8.0-56-powerpc-e500mc
4.8.0-56.61
-
linux-image-4.8.0-56-
lowlatency 4.8.0-56.61
-
linux-image-generic
4.8.0.56.69
-
linux-image-4.8.0-56-generic
4.8.0-56.61
-
linux-image-powerpc64-emb
4.8.0.56.69
-
linux-image-virtual
4.8.0.56.69
-
linux-image-powerpc64-smp
4.8.0.56.69
-
linux-image-4.8.0-56-generic-lpae
4.8.0-56.61
-
linux-image-generic-lpae
4.8.0.56.69
-
linux-image-
lowlatency 4.8.0.56.69
-
linux-image-4.8.0-56-powerpc64-emb
4.8.0-56.61
-
Ubuntu 16.10:
-
linux-image-4.8.0-1040-raspi2
4.8.0-1040.44
-
linux-image-raspi2
4.8.0.1040.44
-
Ubuntu 16.04 LTS:
-
linux-image-powerpc64-smp-
lts -
utopic 4.4.0.81.87
-
linux-image-generic-
lts -
wily 4.4.0.81.87
-
linux-image-generic-
lts -
utopic 4.4.0.81.87
-
linux-image-4.4.0-81-generic-lpae
4.4.0-81.104
-
linux-image-powerpc64-emb-
lts -vivid
4.4.0.81.87
-
linux-image-powerpc-e500mc
4.4.0.81.87
-
linux-image-generic-lpae-lts-xenial
4.4.0.81.87
-
linux-image-generic-lpae-lts-
utopic 4.4.0.81.87
-
linux-image-powerpc-e500mc-lts-xenial
4.4.0.81.87
-
linux-image-4.4.0-81-powerpc64-emb
4.4.0-81.104
-
Linux-image-powerpc-e500mc-lts-
wily 4.4.0.81.87
-
linux-image-4.4.0-81-powerpc-e500mc
4.4.0-81.104
-
linux-image-generic-lpae-lts-
wily 4.4.0.81.87
-
linux-image-virtual-
lts -vivid
4.4.0.81.87
-
linux-image-virtual-
lts -
utopic 4.4.0.81.87
-
linux-image-virtual
4.4.0.81.87
-
linux-image-powerpc64-emb-
lts -
wily 4.4.0.81.87
-
linux-image-
lowlatency - lts -vivid
4.4.0.81.87
-
Linux-image-powerpc-e500mc-lts-vivid
4.4.0.81.87
-
linux-image-powerpc64-emb
4.4.0.81.87
-
linux-image-powerpc-smp-lts-xenial
4.4.0.81.87
-
linux-image-4.4.0-81-generic
4.4.0-81.104
-
linux-image-powerpc64-smp-
lts -vivid
4.4.0.81.87
-
linux-image-
lowlatency - lts -
wily 4.4.0.81.87
-
linux-image-4.4.0-81-
lowlatency 4.4.0-81.104
-
Linux-image-generic
4.4.0.81.87
-
linux-image-lowlatency-lts-xenial
4.4.0.81.87
-
linux-image-powerpc64-smp-lts-xenial
4.4.0.81.87
-
linux-image-powerpc64-emb-
lts -
utopic 4.4.0.81.87
-
linux-image-generic-lts-xenial
4.4.0.81.87
-
linux-image-generic-
lts -vivid
4.4.0.81.87
-
Linux-image-powerpc-e500mc-lts-
utopic 4.4.0.81.87
-
linux-image-
powerpc -smp
4.4.0.81.87
-
linux-image-4.4.0-81-powerpc-smp
4.4.0-81.104
-
linux-image-generic-lpae-lts-vivid
4.4.0.81.87
-
linux-image-generic-lpae
4.4.0.81.87
-
linux-image-powerpc64-smp-
lts -
wily 4.4.0.81.87
-
linux-image-powerpc64-emb-lts-xenial
4.4.0.81.87
-
linux-image-powerpc-smp-
lts -
wily 4.4.0.81.87
-
linux-image-virtual-
lts -
wily 4.4.0.81.87
-
linux-image-powerpc64-smp
4.4.0.81.87
-
linux-image-4.4.0-81-powerpc64-smp
4.4.0-81.104
-
linux-image-powerpc-smp-
lts -
utopic 4.4.0.81.87
-
linux-image-powerpc-smp-
lts -vivid
4.4.0.81.87
-
linux-image-
lowlatency 4.4.0.81.87
-
linux-image-virtual-lts-xenial
4.4.0.81.87
-
linux-image-
lowlatency - lts -
utopic 4.4.0.81.87
-
Ubuntu 16.04 LTS:
-
linux-image-4.4.0-1016-gke
4.4.0-1016.16
-
Ubuntu 16.04 LTS:
-
linux-image-snapdragon
4.4.0.1061.54
-
linux-image-4.4.0-1061-snapdragon
4.4.0-1061.66
-
Ubuntu 16.04 LTS:
-
linux-image-4.4.0-1020-aws
4.4.0-1020.29
-
Ubuntu 16.04 LTS:
-
linux-image-raspi2
4.4.0.1059.60
-
linux-image-4.4.0-1059-raspi2
4.4.0-1059.67
-
Ubuntu 16.04 LTS:
-
linux-image-4.8.0-56-powerpc-smp
4.8.0-56.61 ~ 16.04.1
-
linux-image-4.8.0-56-powerpc-e500mc
4.8.0-56.61 ~ 16.04.1
-
linux-image-4.8.0-56-
lowlatency 4.8.0-56.61 ~ 16.04.1
-
linux-image-4.8.0-56-generic
4.8.0-56.61 ~ 16.04.1
-
linux-image-generic-hwe-16.04
4.8.0.56.27
-
linux-image-lowlatency-hwe-16.04
4.8.0.56.27
-
linux-image-4.8.0-56-generic-lpae
4.8.0-56.61 ~ 16.04.1
-
linux-image-virtual-hwe-16.04
4.8.0.56.27
-
linux-image-generic-lpae-hwe-16.04
4.8.0.56.27
-
linux-image-4.8.0-56-powerpc64-emb
4.8.0-56.61 ~ 16.04.1
-
Ubuntu 14.04 LTS:
-
linux-image-powerpc-smp-lts-xenial
4.4.0.81.66
-
linux-image-lowlatency-lts-xenial
4.4.0.81.66
-
Linux-image-4.4.0-81-powerpc-smp
4.4.0-81.104 ~ 14.04.1
-
linux-image-4.4.0-81-powerpc-e500mc
4.4.0-81.104 ~ 14.04.1
-
linux-image-4.4.0-81-
lowlatency 4.4.0-81.104 ~ 14.04.1
-
linux-image-4.4.0-81-generic-lpae
4.4.0-81.104 ~ 14.04.1
-
linux-image-generic-lpae-lts-xenial
4.4.0.81.66
-
linux-image-powerpc64-smp-lts-xenial
4.4.0.81.66
-
Linux-image-4.4.0-81-generyczny
4.4.0-81.104 ~ 14.04.1
-
linux-image-4.4.0-81-powerpc64-smp
4.4.0-81.104 ~ 14.04.1
-
linux-image-generic-lts-xenial
4.4.0.81.66
-
linux-image-powerpc64-emb-lts-xenial
4.4.0.81.66
-
linux-image-powerpc-e500mc-lts-xenial
4.4.0.81.66
-
linux-image-virtual-lts-xenial
4.4.0.81.66
-
linux-image-4.4.0-81-powerpc64-emb
4.4.0-81.104 ~ 14.04.1
-
Ubuntu 14.04 LTS:
-
linux-image-powerpc-e500mc
3.13.0.121.131
-
linux-image-lowlatency-pae
3.13.0.121.131
-
linux-image-3.13.0-121-powerpc64-emb
3.13.0-121.170
-
linux-image-generic-pae
3.13.0.121.131
-
linux-image-3.13.0-121-powerpc-smp
3.13.0-121.170
-
linux-image-3.13.0-121-powerpc-e500mc
3.13.0-121.170
-
linux-image-3.13.0-121-powerpc-e500
3.13.0-121.170
-
linux-image-3.13.0-121-generic-lpae
3.13.0-121.170
-
linux-image-generic-lts-quantal
3.13.0.121.131
-
linux-image-virtual
3.13.0.121.131
-
linux-image-powerpc-e500
3.13.0.121.131
-
linux-image-generic-
lts -trusty
3.13.0.121.131
-
linux-image-3.13.0-121-generic
3.13.0-121.170
-
linux-image-omap
3.13.0.121.131
-
linux-image-powerpc64-emb
3.13.0.121.131
-
linux-image-3.13.0-121-powerpc64-smp
3.13.0-121.170
-
linux-image-generic
3.13.0.121.131
-
linux-image-highbank
3.13.0.121.131
-
linux-image-generic-
lts -saucy
3.13.0.121.131
-
linux-image-
powerpc -smp
3.13.0.121.131
-
linux-image-3.13.0-121-
lowlatency 3.13.0-121.170
-
linux-image-generic-lpae-lts-saucy
3.13.0.121.131
-
linux-image-generic-
lts -
raring 3.13.0.121.131
-
linux-image-powerpc64-smp
3.13.0.121.131
-
linux-image-generic-lpae-lts-trusty
3.13.0.121.131
-
linux-image-generic-lpae
3.13.0.121.131
-
linux-image-
lowlatency 3.13.0.121.131
-
Ubuntu 12.04 ESM:
-
linux-image-
powerpc -smp
3.2.0.128.142
-
linux-image-3.2.0-128-virtual
3.2.0-128.173
-
linux-image-3.2.0-128-generic-pae
3.2.0-128.173
-
linux-image-generic
3.2.0.128.142
-
linux-image-generic-pae
3.2.0.128.142
-
linux-image-highbank
3.2.0.128.142
-
linux-image-3.2.0-128-highbank
3.2.0-128.173
-
linux-image-3.2.0-128-powerpc-smp
3.2.0-128.173
-
linux-image-virtual
3.2.0.128.142
-
linux-image-powerpc64-smp
3.2.0.128.142
-
linux-image-3.2.0-128-omap
3.2.0-128.173
-
linux-image-3.2.0-128-powerpc64-smp
3.2.0-128.173
-
linux-image-omap
3.2.0.128.142
-
linux-image-3.2.0-128-generic
3.2.0-128.173
-
Ubuntu 12.04 LTS:
-
Linux-image-3.13.0-121-ogólny
3.13.0-121.170 ~ precyzyjny1
-
linux-image-generic-lpae-lts-trusty
3.13.0.121.112
-
linux-image-generic-
lts -trusty
3.13.0.121.112
-
linux-image-3.13.0-121-generic-lpae
3.13.0-121.170 ~ precyzyjny1
Sudo
Wyżej wymieniony błąd sudo jest objęty USN-3304-1 , od 30 maja 2017 r .:
-
Ubuntu 17.04:
-
sudo-ldap
1.8.19p1-1ubuntu1.1
-
sudo
1.8.19p1-1ubuntu1.1
-
Ubuntu 16.10:
-
sudo-ldap
1.8.16-0ubuntu3.2
-
sudo
1.8.16-0ubuntu3.2
-
Ubuntu 16.04 LTS:
-
sudo-ldap
1.8.16-0ubuntu1.4
-
sudo
1.8.16-0ubuntu1.4
-
Ubuntu 14.04 LTS:
-
sudo-ldap
1.8.9p5-1ubuntu1.4
-
sudo
1.8.9p5-1ubuntu1.4
Aby konkretnie odpowiedzieć na tę część pytania:
Ten problem powstaje z powodu użycia wspólnej przestrzeni adresowej dla sterty (która rośnie w górę) i stosu (która rośnie w dół).
Taka konstrukcja jest powszechna w wielu systemach, dlatego wiele systemów jest podatnych na tę samą klasę podatności.
źródło