
CSRF no Eclipse Che levando a RCE
Esta falha permite que um site remoto crie e inicie um contêiner docker arbitrário em máquinas que executam o Che anterior às versões 7.3.0 e 7.4.1 quando um usuário visita uma página da web.
Esta é uma falha de CSRF que permite que um site remoto crie e inicie um contêiner docker na máquina de qualquer pessoa que esteja executando o Eclipse Che no modo autônomo. Muitos parâmetros sob o controle do atacante permitem um nível preciso de controle. Alguns desenvolvedores usam o Che no modo autônomo como uma maneira conveniente de gerenciar seus contêineres docker locais.
Isso foi possível porque o Che tinha o CORS habilitado por padrão. Os problemas disso são bastante óbvios para quem entende o que isso significa, mas, essencialmente, o Che responderia a solicitações de qualquer origem. Embora os navegadores façam o possível para dificultar ataques de CORS, quando o servidor permite CORS, é possível criar uma solicitação POST bem-sucedida para um serviço Che local a partir de um site remoto.
Essencialmente, isso significa que qualquer método de API não autenticado pode ser chamado quando um computador que executa o Che no modo autônomo visita o site do atacante. Isso inclui criar e executar novos contêineres Docker/OpenShift.
Um POC simples está incluído neste readme, mas uma análise do JSON enviado ao serviço Che local revela uma série de parâmetros bastante interessantes a serem controlados, incluindo qual imagem, quais comandos executar na inicialização, quais servidores iniciar no contêiner e outras características bastante interessantes.
Para explorar esta vulnerabilidade, você deve ter como alvo alguém que esteja executando o Eclipse Che em seu computador. Você deve fazer com que seu alvo visite uma página hospedada em HTTP que você controla. A partir daí, o XMLHttpRequest faz seu trabalho e você pode agir livremente. Para entender completamente como explorar esta vulnerabilidade, você deve dar uma olhada no código-fonte do Che para aprender sobre a API ou simplesmente brincar com o POC que coloquei neste repositório. Essencialmente, você deseja criar um contêiner ou um comando no contêiner recém-iniciado que lhe dê o tipo de ponto de apoio que deseja. Você pode configurar um servidor de sua escolha ou simplesmente fazer o comando ser executado na inicialização, baixar seu payload e começar a operar a partir daí. Este ataque se presta tanto a ataques oportunistas quanto a ataques direcionados.
Para uma discussão mais detalhada, dê uma olhada na falha rastreada aqui. A maior parte dela é apenas uma repetição deste post.
Para executar este ataque com sucesso, a página deve ser servida a partir de um servidor HTTP (não HTTPS). Isso é necessário porque um servidor Che local é executado sobre HTTP e os navegadores populares não gostam de misturar conteúdo HTTP e HTTPS.
Para corrigir este problema, a equipe do Che simplesmente desabilitou o CORS por padrão. Isso deve, no mínimo, tornar esse tipo de ataque significativamente mais difícil no futuro. Se você estiver executando o Che localmente para gerenciar suas imagens docker, considere atualizar.