Stack Clash è un exploit basato su una tecnica abbastanza vecchia. La memoria utilizzata da un processo è divisa in due regioni: lo stack e l'heap . Uno generalmente immagina che la pila cresca verso il basso e che il mucchio cresca verso l'alto. Cosa succede quando l'uno o l'altro cresce abbastanza da scontrarsi con l'altro? Più in generale, cosa succede quando lo stack cresce abbastanza da invadere spazi di memoria non correlati? La vulnerabilità originale ha 12 anni e gli sviluppatori del kernel Linux l'hanno risolta temporaneamente usando una pagina di guardia . Tuttavia, i ricercatori di Qualys sono riusciti a sfruttarlo nonostante la pagina di guardia.
Ars Technica riferisce :
Le vulnerabilità di Stack Clash hanno lentamente guadagnato una consapevolezza diffusa, prima nel 2005 con le scoperte del ricercatore di sicurezza Gaël Delalleau e cinque anni dopo con il rilascio di una vulnerabilità di Linux da parte del ricercatore Rafal Wojtczuk. Gli sviluppatori Linux hanno
introdotto una protezione che aveva lo scopo di prevenire gli scontri con lo stack, ma la ricerca odierna dimostra che è relativamente facile per gli aggressori ignorare quella misura.
L'attacco primario di prova sviluppato da Qualys sfrutta una vulnerabilità indicizzata come CVE-2017-1000364. I ricercatori di Qualys hanno inoltre sviluppato attacchi che utilizzano Stack Clash per sfruttare vulnerabilità separate, tra cui CVE-2017-1000365 e CVE-2017-1000367. Ad esempio, se combinato con CVE-2017-1000367, un difetto recentemente risolto in Sudo scoperto anche da Qualys, gli utenti locali possono sfruttare Sudo per ottenere i privilegi di root completi su una gamma molto più ampia di sistemi operativi. Finora Qualys non è stato in grado di eseguire il codice da remoto. L'unica applicazione remota su cui avevano indagato era il server di posta Exim, che per coincidenza si è rivelato essere inesplicabile. Qualys ha affermato di non poter escludere la possibilità che esistano tali exploit di esecuzione remota di codice. Qualys ha dichiarato che rilascerà gli exploit di proof of concept in un secondo momento,
[...] Molte più informazioni sono disponibili in questa consulenza tecnica dettagliata di Qualys e in questa analisi tecnica di grsecurity .
Citando l'articolo LWN sulla correzione originale del 2010:
Poiché Linux non separa le pagine stack e heap di processo, è possibile eseguire l'overrunning di una pagina stack in una pagina heap adiacente. Ciò significa che uno stack sufficientemente profondo (ad esempio da una chiamata ricorsiva) potrebbe finire per usare la memoria nell'heap. Un programma in grado di scrivere su quella pagina heap (ad esempio un client X) potrebbe quindi manipolare l'indirizzo di ritorno di una delle chiamate per passare a un luogo di sua scelta. Ciò significa che il client può far sì che il server esegua il codice di sua scelta (esecuzione di codice arbitrario) che può essere sfruttato per ottenere i privilegi di root.
La descrizione sopra si applica a vari kernel simili a Unix.
Mentre Ars Technica rileva una soluzione temporanea menzionata nel rapporto Qualys ("imposta il valore RLIMIT STACK e RLIMIT_AS degli utenti locali e dei servizi remoti su un valore basso"), va notato che ciò non protegge necessariamente da questo exploit . Al momento l'unica via di uscita sicura è l'aggiornamento. Secondo l'analisi grsecurity:
Dovrebbe essere chiaro che i tentativi del solo kernel di risolvere questo problema saranno necessariamente sempre incompleti, poiché il vero problema risiede nella mancanza di stack stacking. Poiché la vera soluzione alternativa dipende dalla ricostruzione di tutti gli utenti, questa è probabilmente l'unica soluzione possibile per il prossimo futuro.
Il meglio che possiamo fare ora è aggiornare il kernel a una versione con patch.
L'exploit del 2010 ha utilizzato il server X, questo ha usato sudo, il prossimo potrebbe essere uno qualsiasi di una moltitudine di programmi userland che, a un certo punto, funzionano con privilegi elevati.
Qualys non ha ancora pubblicato alcun codice di prova del concetto di exploit (hanno in programma di farlo in un secondo momento).
Esistono più avvisi di sicurezza di Ubuntu associati a CVE-2017-1000364:
Si noti inoltre che il tracker CVE elenca diverse combinazioni release / kernel come correzioni in sospeso.
Generalmente, la soluzione più semplice è aggiornare i sistemi all'ultimo pacchetto del kernel al più presto.
Le versioni del kernel pertinenti dagli USN (selezionate utilizzando 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-generico
4.8.0.56.69
-
linux-image-4.8.0-56-generico
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-generico
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-generico
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-generico
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-virtuale
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-generico
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-generico
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-generico
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-generico
3.2.0-128.173
-
Ubuntu 12.04 LTS:
-
linux-image-3.13.0-121-generico
3.13.0-121.170 ~ preciso1
-
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 ~ precise1
sudo
Il summenzionato bug sudo è coperto da USN-3304-1 , dal 30 maggio 2017:
-
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