Lectura en https://www.drupal.org/node/2357241 y los detalles técnicos en https://www.drupal.org/SA-CORE-2014-005 , así como el parche real que es simplemente:
diff --git a/includes/database/database.inc b/includes/database/database.inc
index f78098b..01b6385 100644
--- a/includes/database/database.inc
+++ b/includes/database/database.inc
@@ -736,7 +736,7 @@ abstract class DatabaseConnection extends PDO {
// to expand it out into a comma-delimited set of placeholders.
foreach (array_filter($args, 'is_array') as $key => $data) {
$new_keys = array();
- foreach ($data as $i => $value) {
+ foreach (array_values($data) as $i => $value) {
// This assumes that there are no other placeholders that use the same
// name. For example, if the array placeholder is defined as :example
// and there is already an :example_2 placeholder, this will generate
Me pregunto qué tipo de solicitud podría hacerse que utiliza este exploit.
database.inc
archivo ?database.inc
desde el parche anterior (o a mano, obviamente, este es un pequeño cambio) pero también recomendaría parchear tu Drupal central por completo.Respuestas:
La compañía que encontró el error tiene algunos ejemplos en el Aviso 01/2014: Drupal - Vulnerabilidad de inyección SQL previa a la autenticación :
Extraer:
fuente
The Problem occurs, if the array has keys, which are no integers
- esta y la consulta de ejemplo son bastante útiles para comprender esto.¿Qué pasa con 7.32? Verificando el módulo de prueba. Puede ver que la siguiente prueba se agregó a 7.32;
Esto debería dar una idea más sobre cómo diseñar un ataque.
Prueba de concepto Ya que ha pasado más que suficiente tiempo y hay muchos PoC en la naturaleza.
Poc # 1 - PHP
Poc # 2 Python - http://pastebin.com/nDwLFV3v
Aquí hay un blog que hace un buen desglose: http://www.volexity.com/blog/?p=83
fuente
Los investigadores que encontraron el error tienen una prueba de concepto. Otros también han desarrollado pruebas de concepto. Sin embargo, a propósito no los publican para tratar de reducir la probabilidad de que sea ampliamente explotado. Debemos respetar esa investigación y moderación y no publicar ejemplos aquí.
Después de que haya pasado un tiempo y los sitios se actualicen, será muy interesante, desde una perspectiva académica, revisar el código de ataque de prueba de concepto. Hasta entonces, es un riesgo innecesario y llamar la atención.
El código en el aviso de SektioinEins no son ejemplos completamente desarrollados de cómo explotarlo. Detallan la debilidad, pero no identifican con precisión cómo explotar realmente el problema.
Han pasado algunas semanas desde que se lanzó el problema y SektionEins ha publicado varias pruebas de conceptos en su blog . Estos son bastante interesantes en comparación con muchas de las otras pruebas de concepto que se han desarrollado ya que dejan muy pocos rastros de su actividad (por ejemplo, nada en la tabla menu_router).
fuente
Puedo confirmar que esta vulnerabilidad funcionará con cada Drupal 7.31 y sitios inferiores, sin importar qué módulos estén activos. Cada forma de drupal podría usarse para explotar esta vulnerabilidad.
La explotación es bastante simple, por lo que PoC ya está en libertad. Pude atacar a mi propio servidor y cambiar las contraseñas de usuario como usuario anónimo en una instalación limpia de Drupal, pero las posibilidades son infinitas.
Este error se conoció hace casi 1 año a través de https://www.drupal.org/node/2146839 pero nadie del equipo de seguridad de Drupal Core respondió.
fuente
#
frente a la "seguridad" limitó a alguien a verlo de otra manera, o tal vez hay demasiados problemas en la cola. Todavía sorprende que nadie haya respondido.Me preguntaba cómo podría explotarse esto y cuánto tiempo y esfuerzo tomaría. Por lo tanto, decidí instalar una versión anterior de Drupal 7 en mi servidor local y aplicar ingeniería inversa a este error. Lo que descubrí fue un error impactante que brinda a cualquier persona con conocimientos básicos sobre HTML / SQL un acceso completo a su sitio Drupal.
¡Logré ejecutar la inyección SQL en Drupal 7 usando un usuario anónimo en menos de 30 minutos de intentarlo!
http://www.zoubi.me/blog/drupageddon-sa-core-2014-005-drupal-7-sql-injection-exploit-demo
NOTA: Esto aún no le permitirá iniciar sesión, ya que Drupal usa SHA512 con salt, por lo que no es posible iniciar sesión realmente. Intencionalmente no puse el código aquí, ¡pero obviamente cualquier persona con un poco de conocimiento de Drupal sabrá cómo superar esto y construir la consulta que le dará acceso completo!
Esto abre una pregunta sobre qué tan seguro es Drupal y quién es responsable de algo como esto. Aparentemente, este error se conoció por más de un año ( https://www.drupal.org/node/2146839 ), pero nadie reaccionó en Drupal.org. ¿Accidental o intencionalmente? :)
fuente
Es una solución a una vulnerabilidad de inyección SQL en la que se insertan sentencias SQL maliciosas en un campo de entrada para su ejecución y eso podría conducir, por ejemplo, a liberar el contenido de la base de datos. Es importante aplicar esta solución lo antes posible, especialmente porque los usuarios anónimos pueden explotar esta vulnerabilidad.
Si no puede actualizar inmediatamente el equipo de seguridad que tiene, puede aplicar este parche que proporcionará la misma protección hasta que pueda realizar la actualización completa 1 . Además, el equipo de seguridad ha preparado algunas preguntas frecuentes relacionadas con este problema. Poner su sitio en modo de mantenimiento no ayudará y borre la memoria caché después de aplicar la actualización o asegúrese de estar usando 7.32.
Además, debe verificar si su sitio no se ha visto comprometido. Hay algunos sitios que ya informan problemas. Aquí hay una publicación de blog que sugiere cómo puedes comprobar que Actualizar a Drupal 7.32 no es suficiente, es posible que tu sitio ya esté pirateado
Aplico la corrección el 15 de octubre y mis sitios ya informaron que alguien intentó explotar la vulnerabilidad
fuente