Fetch the Flag CTF 2022: como resolver Containers are ACE
9 de novembro de 2022
0 minutos de leituraObrigado por participar do Fetch conosco!Parabéns aos milhares de jogadores que participaram do Fetch the Flag CTF. E um agradecimento especial aos Snykers que criaram, testaram e documentaram os desafios!
O nível de dificuldade do desafio Containers are ACE do Fetch the Flag CTF deste ano é relativamente baixo. Ele exige conhecimentos básicos de Burp e de alguns comandos do sistema operacional. Também é preciso fazer um trabalho de análise e investigação para identificar o vetor de ataque.
Passo a passo
Investigação inicial
Antes de começar a investigação propriamente dita, todo detetive precisa reunir as pistas e conectá-las. Este desafio apresenta várias dicas valiosas, como você pode ver abaixo.
Dica nº 1: instale a Snyk CLI https://docs.snyk.io/snyk-cli/install-the-snyk-cli
Nada de especial por aqui. Há várias maneiras de instalar a Snyk CLI, mas vamos instalá-la pelo NPM (verifique se o NPM está instalado; caso contrário, você pode instalá-lo aqui).
Execute sudo npm install snyk -g e você estará pronto para a próxima etapa.
Dica nº 2: execute este comando: snyk container test pasapples/apjctf-todo-java-app:latest --app-vulns --exclude-base-image-vulns
É aqui que a Snyk CLI é útil: ao executar o comando acima, ela realiza uma série de instruções (saiba mais na documentação da Snyk CLI):
Baixa a imagem se ela ainda não estiver disponível localmente no daemon do Docker
Identifica os softwares instalados na imagem
Envia essa lista de materiais para o serviço da Snyk
Retorna uma lista das vulnerabilidades presentes na imagem
A Snyk verifica a imagem em busca de vulnerabilidades e apresenta os resultados, além de uma correção recomendada.

Dica nº 3: saiba mais aqui https://docs.snyk.io/products/snyk-container/getting-around-the-snyk-container-ui/detecting-application-vulnerabilities-in-container-images#ap[…]lag
Esta dica traz informações úteis para quem quiser entender um pouco melhor como o Snyk Container funciona.
Dica nº 4: contêineres são excelentes
O título também traz uma dica que será essencial para resolver o desafio. ACE costuma ser usado como abreviação de Arbitrary Code/Command Execution (execução arbitrária de código/comando).
Voltando um passo
Concluímos a etapa de coleta de informações e agora vamos procurar um vetor de ataque que nos permita invadir a aplicação. Na etapa anterior, o Snyk Container identificou muitas vulnerabilidades. Precisamos encontrar uma maneira de filtrá-las!
Vamos procurar vulnerabilidades de alta gravidade, como CriticalE cujo tipo seja Arbitrary Command/Code Execution. Depois de aplicar esses critérios, chegamos às seguintes vulnerabilidades:

https://security.snyk.io/vuln/SNYK-JAVA-ORGAPACHESTRUTS-31503
https://security.snyk.io/vuln/SNYK-JAVA-ORGAPACHESTRUTS-30207
https://security.snyk.io/vuln/SNYK-JAVA-ORGAPACHESTRUTS-30771
https://security.snyk.io/vuln/SNYK-JAVA-ORGAPACHESTRUTS-30772
Depois de analisar cada uma brevemente, vemos que a CVE-2017-5638 tem pontuação CVSS 10 e também vários exploits disponíveis publicamente. Com base nisso, podemos presumir que a probabilidade de explorar essa vulnerabilidade é bem alta. Então, vamos tentar!
Mãos à obra
Podemos explorar a vulnerabilidade criando um script de exploit com base nos payloads disponíveis publicamente ou tentar explorá-la pelo Burp. Vamos seguir pela segunda opção, já que não é preciso instalar bibliotecas nem criar arquivos, e o processo é mais organizado.
Depois de iniciar o Burp, vamos acessar a aba Proxy, clicar no botão Open Browser e abrir a aplicação web vulnerável. A partir daí, todas as solicitações serão encaminhadas primeiro ao Burp.
Agora vamos acessar a seção de login da aplicação web e começar a interceptar as solicitações. É claro que tentar entrar com um e-mail e uma senha aleatórios não vai funcionar, mas vamos enviar essa solicitação para o Repeater.


Agora vamos modificar a solicitação POST e incluir um payload disponível publicamente no GitHub.

Bingo! Recebemos uma resposta diferente. Ao analisá-la mais de perto, vemos que a saída recebida veio deste comando:

Agora podemos modificar o comando e pesquisar em arquivos e diretórios para ver se encontramos algo, mas acabamos chegando a um beco sem saída.

Como sabemos que o formato da flag é SNYK{...}, podemos pesquisar em todos os arquivos e ver se encontramos algo executando #cmd='grep -r -e SNYK'. Encontramos a flag!

Outra opção é procurar arquivos que contenham a palavra-chave flag, executando #cmd='find . -name *flag*' e, em seguida, ler o arquivo com #cmd='cat ./webapps/todolist/flag'

Como resolvemos o desafio ACE
Fizemos um reconhecimento inicial do alvo para preparar as próximas etapas.
Identificamos o vetor de ataque priorizando as vulnerabilidades por
Criticalgravidade.
Interceptamos uma solicitação válida e a modificamos com um payload malicioso.
Procuramos a flag usando técnicas comuns de enumeração.
Quer saber como encontramos todas as outras flags? Acesse nossa página de soluções do Fetch the Flag e confira como fizemos.
Segurança de contêineres que prioriza os desenvolvedores
O Snyk encontra e corrige automaticamente vulnerabilidades em imagens de contêiner e workloads do Kubernetes.



