O Stack Clash é uma exploração baseada em uma técnica bastante antiga. A memória usada por um processo é dividida em duas regiões - a pilha e a pilha . Geralmente se imagina a pilha crescendo para baixo e a pilha crescendo para cima. O que acontece quando um cresce o suficiente para colidir com o outro? De maneira mais geral, o que acontece quando a pilha cresce o suficiente para invadir espaços de memória não relacionados? A vulnerabilidade original tem 12 anos e os desenvolvedores do kernel Linux a corrigiram temporariamente usando uma página de proteção . No entanto, os pesquisadores da Qualys conseguiram explorar isso, apesar da página de guarda.
A Ars Technica informa :
As vulnerabilidades do Stack Clash lentamente ganharam amplo conhecimento, primeiro em 2005 com as descobertas do pesquisador de segurança Gaël Delalleau e cinco anos depois com o lançamento da vulnerabilidade do Linux pelo pesquisador Rafal Wojtczuk. Os desenvolvedores do Linux
introduziram uma proteção destinada a evitar conflitos de pilha, mas as pesquisas de hoje demonstram que é relativamente fácil para os invasores contornar essa medida.
O principal ataque de prova de conceito desenvolvido pela Qualys explora uma vulnerabilidade indexada como CVE-2017-1000364. Os pesquisadores da Qualys também desenvolveram ataques que usam o Stack Clash para explorar vulnerabilidades separadas, incluindo o CVE-2017-1000365 e o CVE-2017-1000367. Por exemplo, quando combinado com o CVE-2017-1000367, uma falha recentemente corrigida no Sudo também descoberta pela Qualys, os usuários locais podem explorar o Sudo para obter privilégios de root completos em uma variedade muito maior de sistemas operacionais. Até o momento, a Qualys não conseguiu fazer as explorações executar remotamente o código. O único aplicativo remoto que eles investigaram foi o servidor de correio Exim, que por coincidência se mostrou inexplorável. Qualys disse que não pode descartar a possibilidade de tais explorações remotas de execução de código. A Qualys disse que lançará as explorações de prova de conceito em uma data posterior,
[...] Muito mais informações estão disponíveis neste detalhado conselho técnico da Qualys e nesta análise técnica da grsecurity .
Citando o artigo do LWN sobre a correção original de 2010:
Como o Linux não separa a pilha de processos e as páginas de heap, é possível substituir uma página de pilha em uma página de heap adjacente. Isso significa que uma pilha suficientemente profunda (de uma chamada recursiva, por exemplo) pode acabar usando a memória na pilha. Um programa que pode gravar nessa página de pilha (por exemplo, um cliente X) pode manipular o endereço de retorno de uma das chamadas para ir para um local de sua escolha. Isso significa que o cliente pode fazer com que o servidor execute o código de sua escolha - execução arbitrária de código - que pode ser aproveitada para obter privilégios de root.
A descrição acima se aplica a vários kernels do tipo Unix.
Embora a Ars Technica observe uma solução temporária mencionada no relatório Qualys ("defina o RLIMIT STACK rígido e o RLIMIT_AS dos usuários locais e serviços remotos com um valor baixo"), que isso não necessariamente protege contra essa exploração . A única saída segura atualmente é atualizar. De acordo com a análise grsecurity:
Deve ficar claro que as tentativas apenas do kernel para resolver esse problema sempre serão necessariamente incompletas, pois o problema real está na falta de análise de pilha. Como a solução real alternativa depende da reconstrução de todas as áreas de usuários, essa é provavelmente a única solução viável no futuro próximo.
O melhor que podemos fazer agora é atualizar o kernel para uma versão corrigida.
A exploração de 2010 usou o servidor X, este usou o sudo, o próximo pode ser um dos inúmeros programas da área de usuários que, em algum momento, são executados sob privilégios elevados.
A Qualys ainda não publicou nenhum código de prova de conceito para explorações (eles planejam fazer isso posteriormente).
Existem vários Avisos de segurança do Ubuntu associados ao CVE-2017-1000364:
Observe também que o rastreador CVE lista várias combinações de release / kernel como correções pendentes.
Geralmente, a correção mais simples é atualizar seus sistemas para o pacote mais recente do kernel o mais rápido possível.
As versões relevantes do kernel dos USNs (selecionadas usando 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-genérico
4.4.0-81.104
-
linux-image-powerpc64-smp-lts-vívido
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-genérico
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-genérico
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-genérico
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 ~ specific1
Sudo
O bug do sudo mencionado acima é coberto pelo USN-3304-1 , de 30 de maio de 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
Para abordar esta parte da sua pergunta especificamente:
Esse problema ocorre devido ao uso de um espaço de endereço compartilhado para heap (que cresce para cima) e pilha (que aumenta para baixo).
Esse design é comum em muitos sistemas, portanto, por que muitos sistemas são vulneráveis à mesma classe de vulnerabilidade.
fonte