Writeup de Fetch the Flag CTF 2022: Containers are ACE
9 de noviembre de 2022
0 minutos de lectura¡Gracias por jugar Fetch con nosotros!Felicitaciones a los miles de jugadores que participaron en Fetch the Flag CTF. ¡Y muchísimas gracias a los Snykers que crearon, probaron y documentaron los desafíos!
El nivel de dificultad del desafío Containers are ACE de Fetch the Flag CTF de este año es bastante bajo. Requiere conocimientos básicos de Burp y de algunos comandos del sistema operativo. También hay que hacer un poco de trabajo de análisis e investigación para identificar el vector de ataque.
Guía paso a paso
Investigación inicial
Antes de comenzar la investigación propiamente dicha, cada detective debe reunir las pistas y conectarlas. Este desafío nos ofrece varias pistas valiosas, como puedes ver a continuación.
Pista #1: Instala Snyk CLI https://docs.snyk.io/snyk-cli/install-the-snyk-cli
No hay nada especial en este paso. Podemos instalar Snyk CLI de varias maneras; sin embargo, instalémoslo con NPM (asegúrate de tener NPM instalado; de lo contrario, puedes instalarlo desde aquí).
Ejecuta sudo npm install snyk -g y tendrás todo listo para el siguiente paso.
Pista #2: Ejecuta este comando: snyk container test pasapples/apjctf-todo-java-app:latest --app-vulns --exclude-base-image-vulns
Aquí es donde Snyk CLI resulta útil, ya que ejecutará una serie de instrucciones al ejecutar el comando anterior (encontrarás más información en la documentación de Snyk CLI):
Descarga la imagen si aún no está disponible localmente en tu daemon de Docker
Determina qué software está instalado en la imagen
Envía esa lista de materiales al servicio de Snyk
Devuelve una lista de las vulnerabilidades de tu imagen
Snyk analizará la imagen en busca de vulnerabilidades y nos mostrará los resultados junto con una solución recomendada.

Pista #3: Más información aquí https://docs.snyk.io/products/snyk-container/getting-around-the-snyk-container-ui/detecting-application-vulnerabilities-in-container-images#ap[…]lag
Esta pista ofrece información útil si queremos profundizar un poco más en el funcionamiento de Snyk Container.
Pista #4: Containers are ACE
El título también contiene una pista que será crucial para resolver este desafío. ACE suele usarse como abreviatura de Arbitrary Code/Command Execution (ejecución arbitraria de código o comandos).
Un paso atrás
Ya completamos la fase de recopilación de información y ahora buscaremos un vector de ataque que nos permita entrar en la aplicación. En el paso anterior, Snyk Container identificó muchas vulnerabilidades. ¡Tenemos que encontrar una manera de filtrarlas!
Intentaremos identificar vulnerabilidades de gravedad elevada, como CriticalY cuyo tipo sea Arbitrary Command/Code Execution. Al aplicar estos criterios, limitamos los resultados a las siguientes 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
Tras analizar brevemente cada una, vemos que CVE-2017-5638 tiene una puntuación CVSS de 10 y varios exploits disponibles públicamente. Con base en esto, podemos suponer que es muy probable que se pueda explotar esta vulnerabilidad. ¡Intentémoslo!
Manos a la obra
Podemos explotar la vulnerabilidad creando un script de exploit basado en las cargas útiles disponibles públicamente, o intentarlo mediante Burp. Seguiremos la segunda opción, ya que no requiere instalar bibliotecas ni crear archivos y, en general, es más ordenada.
Después de iniciar Burp, iremos a la pestaña Proxy, haremos clic en el botón Open Browser y accederemos a la aplicación web vulnerable. A partir de ese momento, todas las solicitudes se enviarán primero a Burp.
Ahora iremos a la sección de inicio de sesión de la aplicación web y empezaremos a interceptar solicitudes. Es obvio que intentar iniciar sesión con un correo electrónico y una contraseña aleatorios no funcionará, pero enviemos esta solicitud al repetidor.


Ahora intentemos modificar la solicitud POST e incluir una carga útil disponible públicamente que puedes encontrar en GitHub.

¡Bingo! Recibimos una respuesta diferente. Al inspeccionarla más de cerca, vemos que el resultado recibido proviene de este comando:

Ahora podemos modificar el comando e intentar buscar en archivos y directorios para ver si encontramos algo; sin embargo, llegamos a un callejón sin salida.

Como sabemos que el formato de la bandera es SNYK{...}, podemos buscar en todos los archivos para ver si encontramos resultados ejecutando #cmd='grep -r -e SNYK'. ¡Encontramos la bandera!

Como alternativa, podemos buscar archivos que contengan la palabra clave flag ejecutando #cmd='find . -name *flag*' y luego leer el archivo con #cmd='cat ./webapps/todolist/flag'

Cómo superamos el desafío ACE
Hicimos un reconocimiento básico del objetivo para preparar los siguientes pasos.
Identificamos el vector de ataque mediante la priorización de vulnerabilidades con
Criticalgravedad.
Interceptamos una solicitud válida y la modificamos al incluir una carga útil maliciosa.
Buscamos la bandera mediante técnicas de enumeración comunes.
¿Quieres saber cómo encontramos las demás banderas? Visita nuestra página de soluciones de Fetch the Flag para descubrir cómo lo hicimos.
Seguridad de contenedores centrada en los desarrolladores
Snyk encuentra y corrige automáticamente vulnerabilidades en imágenes de contenedores y cargas de trabajo de Kubernetes.
