Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

DrupalCamp Spain 2018: CSI, autopsia de vulnerabilidades

146 views

Published on

Slides de la sesión impartida en DrupalCamp Spain 2018 por Zequi Vázquez, en la que se describe cómo funcionan tres de las vulnerabilidades más relevantes del core de Drupal en los últimos años.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

DrupalCamp Spain 2018: CSI, autopsia de vulnerabilidades

  1. 1. Sobre mi ¿Qui´en soy? Ezequiel ”Zequi”V´azquez Desarrollo backend Sysadmin & DevOps Hacking & Seguridad Ponente en CONs desde 2013 Zequi V´azquez @RabbitLair CSI: Autopsia de Vulnerabilidades
  2. 2. Sobre mi Zequi V´azquez @RabbitLair CSI: Autopsia de Vulnerabilidades
  3. 3. ´Indice 1 Introducci´on 2 An´alisis de Vulnerabilidades 3 ¿Y si no parcheo? Zequi V´azquez @RabbitLair CSI: Autopsia de Vulnerabilidades
  4. 4. ´Indice 1 Introducci´on 2 An´alisis de Vulnerabilidades 3 ¿Y si no parcheo? Zequi V´azquez @RabbitLair CSI: Autopsia de Vulnerabilidades
  5. 5. La vida de un parche Etapas 1 Descubrimiento de vulnerabilidad → equipo seguridad 2 Implementaci´on de parche, publicaci´on de nueva versi´on 3 Hackers estudian parche con ingenier´ıa inversa → POC 4 Confirmaci´on POC → ataques masivos Zequi V´azquez @RabbitLair CSI: Autopsia de Vulnerabilidades
  6. 6. Vale, yo parcheo, pero . . . Zequi V´azquez @RabbitLair CSI: Autopsia de Vulnerabilidades
  7. 7. Vale, yo parcheo, pero . . . Zequi V´azquez @RabbitLair CSI: Autopsia de Vulnerabilidades
  8. 8. ´Indice 1 Introducci´on 2 An´alisis de Vulnerabilidades 3 ¿Y si no parcheo? Zequi V´azquez @RabbitLair CSI: Autopsia de Vulnerabilidades
  9. 9. Drupalgeddon 1 SA-CORE-2014-005 CVE-2014-3704 Parche publicado el 15 de Octubre de 2014 Inyecci´on SQL como an´onimo Afecta a Drupal 7.x anteriores a 7.32 25/25 en el ´ındice NIST Zequi V´azquez @RabbitLair CSI: Autopsia de Vulnerabilidades
  10. 10. Drupalgeddon 1 Arrays en m´etodo HTTP POST El m´etodo POST env´ıa valores al servidor Generalmente, enteros o strings, pero tambi´en arrays Zequi V´azquez @RabbitLair CSI: Autopsia de Vulnerabilidades
  11. 11. Drupalgeddon 1 Sanitizaci´on de consultas a BD Fichero includes/database/database.inc M´etodo expandArguments Consultas con condici´on “column IN (a, b, c, . . . )” Zequi V´azquez @RabbitLair CSI: Autopsia de Vulnerabilidades
  12. 12. Drupalgeddon 1 Sanitizaci´on de consultas a BD Fichero includes/database/database.inc M´etodo expandArguments Consultas con condici´on “column IN (a, b, c, . . . )” Zequi V´azquez @RabbitLair CSI: Autopsia de Vulnerabilidades
  13. 13. Drupalgeddon 1 Sanitizaci´on de consultas a BD Fichero includes/database/database.inc M´etodo expandArguments Consultas con condici´on “column IN (a, b, c, . . . )” Zequi V´azquez @RabbitLair CSI: Autopsia de Vulnerabilidades
  14. 14. Drupalgeddon 1 La vulnerabilidad No se sanitiza correctamente el ´ındice del array La variable envenenada se pasa a la base de datos Resultado: Se puede inyectar SQL a discrecci´on Zequi V´azquez @RabbitLair CSI: Autopsia de Vulnerabilidades
  15. 15. Drupalgeddon 1 La vulnerabilidad No se sanitiza correctamente el ´ındice del array La variable envenenada se pasa a la base de datos Resultado: Se puede inyectar SQL a discrecci´on Zequi V´azquez @RabbitLair CSI: Autopsia de Vulnerabilidades
  16. 16. Drupalgeddon 1 Vamos a verlo Zequi V´azquez @RabbitLair CSI: Autopsia de Vulnerabilidades
  17. 17. Drupalgeddon 2 SA-CORE-2018-002 CVE-2018-7600 Parche publicado el 28 de Marzo de 2018 Ejecuci´on remota de c´odigo como an´onimo Afecta a todas las versiones 24/25 en el ´ındice NIST Zequi V´azquez @RabbitLair CSI: Autopsia de Vulnerabilidades
  18. 18. Drupalgeddon 2 Los render arrays En Drupal 4.7 se introdujo la Forms API Array cuyas claves comienzan por “#” En Drupal 7 se generaliz´o para renderizarlo todo Comportamiento recursivo Callbacks: post render, pre render, value callback, . . . Zequi V´azquez @RabbitLair CSI: Autopsia de Vulnerabilidades
  19. 19. Drupalgeddon 2 Enviando formularios El valor enviado se almacena en #value M´etodo POST de HTTP permite valores de tipo array Zequi V´azquez @RabbitLair CSI: Autopsia de Vulnerabilidades
  20. 20. Drupalgeddon 2 La vulnerabilidad Usamos POSTMAN o similar para saltarnos el formulario En un campo en el que se asume un string, se env´ıa un array El array enviado tiene ´ındices comenzando por “#” Zequi V´azquez @RabbitLair CSI: Autopsia de Vulnerabilidades
  21. 21. Drupalgeddon 2 La vulnerabilidad Enga˜namos a Drupal para que re-renderice el campo mail Usamos la Ajax API para ello El campo se renderiza, y el post render se ejecuta Zequi V´azquez @RabbitLair CSI: Autopsia de Vulnerabilidades
  22. 22. Drupalgeddon 2 Vamos a verlo Zequi V´azquez @RabbitLair CSI: Autopsia de Vulnerabilidades
  23. 23. Drupalgeddon 3 SA-CORE-2018-004 CVE-2018-7602 Parche publicado el 25 de Abril de 2018 Ejecuci´on remota de c´odigo como autenticado Afecta a todas las versiones 20/25 en el ´ındice NIST Zequi V´azquez @RabbitLair CSI: Autopsia de Vulnerabilidades
  24. 24. Drupalgeddon 3 El par´ametro destination Par´ametro GET que redirige a una URL tras finalizar ejecuci´on Se pasa por stripDangerousValues para sanitizarlo No detecta doble codificaci´on: “#” → “ %23” → “ %2523” Zequi V´azquez @RabbitLair CSI: Autopsia de Vulnerabilidades
  25. 25. Drupalgeddon 3 El par´ametro destination Par´ametro GET que redirige a una URL tras finalizar ejecuci´on Se pasa por stripDangerousValues para sanitizarlo No detecta doble codificaci´on: “#” → “ %23” → “ %2523” La opci´on trigering element name Fichero includes/ajax.inc Identifica qu´e elemento se us´o para el env´ıo Marca un elemento de formulario para re-renderizar Zequi V´azquez @RabbitLair CSI: Autopsia de Vulnerabilidades
  26. 26. Drupalgeddon 3 La vulnerabilidad: primer paso POST a la URL de un formulario de confirmaci´on trigering element name con valor form id en POST data Destination contiene un campo con post render envenenado La llamada POST redirige al formulario de confirmaci´on El payload debe ir codificado para URL Zequi V´azquez @RabbitLair CSI: Autopsia de Vulnerabilidades
  27. 27. Drupalgeddon 3 La vulnerabilidad: primer paso POST a la URL de un formulario de confirmaci´on trigering element name con valor form id en POST data Destination contiene un campo con post render envenenado La llamada POST redirige al formulario de confirmaci´on El payload debe ir codificado para URL Zequi V´azquez @RabbitLair CSI: Autopsia de Vulnerabilidades
  28. 28. Drupalgeddon 3 La vulnerabilidad: segundo paso Ejecutar como AJAX llamada POST a la acci´on de cancelar /file/ajax/actions/cancel/ %23options/path/[form build id] Ajax API procesa el formulario, y ejecuta el post render Zequi V´azquez @RabbitLair CSI: Autopsia de Vulnerabilidades
  29. 29. Drupalgeddon 3 Vamos a verlo Zequi V´azquez @RabbitLair CSI: Autopsia de Vulnerabilidades
  30. 30. ´Indice 1 Introducci´on 2 An´alisis de Vulnerabilidades 3 ¿Y si no parcheo? Zequi V´azquez @RabbitLair CSI: Autopsia de Vulnerabilidades
  31. 31. Ataques “in the wild” No hag´ais esto en casa Extracci´on completa de base de datos Malware de minado de criptomonedas Servidor como proxy malicioso Infecci´on de usuarios Defacement / Black SEO ??? Zequi V´azquez @RabbitLair CSI: Autopsia de Vulnerabilidades
  32. 32. En conclusi´on Zequi V´azquez @RabbitLair CSI: Autopsia de Vulnerabilidades
  33. 33. Esto es todo, amigos... ¡Gracias! @RabbitLair ezequielvazq[at]gmail[dot]com Zequi V´azquez @RabbitLair CSI: Autopsia de Vulnerabilidades

×