Stack Clash é um exploit baseado em uma técnica bastante antiga. A memória usada por um processo é dividida em duas regiões - a pilha e o heap . Geralmente, imagina-se a pilha crescendo para baixo e a pilha crescendo para cima. O que acontece quando o quer crescer o suficiente para colidir com o outro? Mais geralmente, o que acontece quando a pilha cresce o suficiente para invadir espaços de memória não relacionados? A vulnerabilidade original é de 12 anos e os desenvolvedores de kernel do Linux a corrigiram temporariamente usando uma página de guarda . No entanto, os pesquisadores da Qualys conseguiram explorar isso, apesar da página de guarda.
As vulnerabilidades do Stack Clash ganharam lentamente reconhecimento generalizado, primeiro em 2005 com as descobertas do pesquisador de segurança Gaël Delalleau e cinco anos depois com o lançamento de um Linux vulnerabilidade pelo pesquisador Rafal Wojtczuk. Desenvolvedores Linux introduziu uma proteção que se destinava a impedir o empilhamento confrontos, mas a pesquisa de hoje demonstra que é relativamente fácil para invasores contornarem essa medida.
O principal ataque de prova de conceito desenvolvido pela Qualys explora uma vulnerabilidade indexada como CVE-2017-1000364. Pesquisadores Qualys também ataques desenvolvidos que usam o Stack Clash para explorar vulnerabilidades, incluindo CVE-2017-1000365 e CVE-2017-1000367. Para exemplo, quando combinado com o CVE-2017-1000367, uma falha recentemente Sudo também descoberto pela Qualys, os usuários locais podem explorar o Sudo para obter privilégios de root completos em uma faixa muito maior de sistemas operacionais. Qualys tem até agora foi incapaz de fazer as explorações executar remotamente o código. O único aplicação remota que eles investigaram foi o servidor de correio Exim, que coincidentemente acabou por ser inexplorável. Qualys disse que não pode excluir a possibilidade de que tais execuções remotas de execução de código existir. A Qualys disse que lançará as explorações de prova de conceito em um data posterior, uma vez que as pessoas tiveram tempo de se proteger vulnerabilidades.
[...] Muito mais informação está disponível em esta detalhada técnica consultivo da Qualys e esta análise técnica de grsecurity .
Citando o artigo do LWN sobre a correção original de 2010:
Como o Linux não separa as páginas de pilhas e pilhas de processos, É possível executar uma página de pilha em uma página de heap adjacente. que significa que uma pilha suficientemente profunda (a partir de uma chamada recursiva para exemplo) pode acabar usando memória no heap. Um programa que pode escrever para essa página de heap (por exemplo, um cliente X) poderia, então, manipular o retornar o endereço de uma das chamadas para pular para um lugar de sua escolha. Isso significa que o cliente pode fazer com que o servidor execute o código de seu escolhendo - execução de código arbitrário - que pode ser aproveitada para ganhar raiz privilégios.
A descrição acima se aplica a vários kernels parecidos com Unix.
Embora o Ars Technica observe uma solução temporária mencionada no relatório do Qualys ("defina o RLIMIT difícil STACK e RLIMIT_AS de usuários locais e rede serviços para um valor baixo "), deve-se notar que isso não necessariamente salvaguardar contra esta exploração . A única saída segura atualmente é atualizar. De acordo com a análise de segurança:
Deve ficar claro que as tentativas apenas do kernel para resolver esse problema sempre será necessariamente incompleta, pois a verdadeira questão está na falta de sondagem de pilha. Como a solução real alternativa depende reconstruindo toda a área de usuários, essa é provavelmente a única solução viável para o futuro previsível.
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 poderia ser qualquer um dos vários programas de usuário 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 (planeja fazê-lo em uma data posterior).