Skip to main content

Fetch the Flag CTF 2022: como resolver Containers are ACE

Escrito por
feature ctf containers are ace

9 de novembro de 2022

0 minutos de leitura

Obrigado 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):

  1. Baixa a imagem se ela ainda não estiver disponível localmente no daemon do Docker

  2. Identifica os softwares instalados na imagem

  3. Envia essa lista de materiais para o serviço da Snyk

  4. 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.

A saída do terminal lista vulnerabilidades de segurança do Apache Struts e recomenda atualizar da versão 2.3.20 para a 2.5.30.

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:

Saída do terminal listando vulnerabilidades de segurança de gravidade crítica no Apache Struts 2.3.20, incluindo execução remota e arbitrária de código.

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.

Janela de interceptação do Burp Suite exibindo uma solicitação POST de login capturada e o menu Action com “Send to Repeater” destacado.
Painéis de solicitação e resposta HTTP mostram uma tentativa de login malsucedida, com um erro de e-mail/senha inválidos no HTML retornado

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

Solicitação e resposta HTTP exibidas lado a lado em uma ferramenta de depuração da web, mostrando uma solicitação POST e uma resposta 200 OK.

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

Trecho de código que mostra uma solicitação multipart/form-data com um payload de execução de comandos OGNL e uma string de User-Agent do Chrome

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. 

Solicitação de login HTTP e resposta do servidor Apache Tomcat 8.5 lado a lado, exibidas em uma ferramenta de desenvolvimento

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!

Trecho de código mostrando uma flag de webapps/todolist com uma string de token SNYK.

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'

Interface de testes de segurança web mostrando uma solicitação POST de login com cabeçalhos e dados de formulário, ao lado de uma resposta 200 que redireciona para uma página da lista de tarefas com uma 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

    Critical

    gravidade.

  • 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.

Leia mais

illustration hero ai
Blog

PHP corrige duas vulnerabilidades críticas de RCE sem autenticação (CVE-2026-109618, CVE-2026-109619): atualize agora

Duas falhas críticas no ciclo de requisições do PHP podem permitir execução remota de código sem autenticação. Atualize para uma versão corrigida ou instale um backport do fornecedor para versões mais antigas.

blog feature ai lilac
Blog

Transforme seu backlog de vulnerabilidades em pull requests com remediação agentiva

O Evo Remediation Agent está em Open Preview e traz a resolução automatizada de dependências para o Evo Agentic AppSec. Agora, as equipes de AppSec podem executar campanhas contínuas de remediação

AI Background min crop
Blog

A IA está acionando todos os riscos que você aceitou: sete insights do painel de segurança de IA sem filtros

A IA está tornando os ataques mais baratos e rápidos, expondo riscos que as organizações já carregam. Quatro líderes de segurança explicam por que a defesa na velocidade das máquinas e a correção mais rápida são essenciais.