Alerta de seguridad
Nivel de peligrosidad: Crítico
Descripción
La vulnerabilidad, identificada formalmente como CVE-2026-9082, es una falla de inyección SQL, localizada en el motor de abstracción de base de datos de Drupal Core, específicamente dentro del controlador de condiciones de consulta de entidades (EntityQuery) diseñado de forma única para PostgreSQL.
Debido a que PostgreSQL realiza comparaciones de texto sensibles a mayúsculas y minúsculas por defecto, este controlador sobreescribe el flujo de comparación envolviendo de manera sistemática los campos de comparación en la función SQL LOWER() para forzar un comportamiento consistente.
Al procesar listas (como los operadores lógicos IN), el controlador itera y construye marcadores de posición (placeholders) concatenando de manera directa las claves del arreglo de PHP del usuario dentro de la sintaxis SQL final. Dado que el sistema no sanitiza ni valida las llaves asociativas del arreglo, un atacante remoto puede inyectar metacaracteres SQL directamente dentro de las llaves en los parámetros de sus peticiones HTTP dirigidas a endpoints públicos (por ejemplo, a través de la ruta de login JSON o parámetros de filtros de JSON:API). Esto permite romper la estructura léxica del marcador de posición de la base de datos y concatenar instrucciones SQL arbitrarias adicionales para que se ejecuten directamente contra la base de datos PostgreSQL del servidor.
Recursos afectados
- Drupal Core versión 11.3.x anteriores a la versión 11.3.10.
- Drupal Core versión 11.2.x anteriores a la versión 11.2.12.
- Drupal Core versiones 11.1.x y 11.0.x anteriores a la versión 11.1.10.
- Drupal Core versión 10.6.x anteriores a la versión 10.6.9.
- Drupal Core versión 10.5.x anteriores a la versión 10.5.10.
- Drupal Core versión 10.4.x o anteriores inferiores a la versión 10.4.10.
- Versiones obsoletas y en fin de vida (EOL) de las ramas de Drupal 9.x y Drupal 8.9.
Solución
Se recomienda a los administradores de sistemas y desarrolladores actualizar inmediatamente Drupal Core a las versiones oficiales estables: 11.3.10, 11.2.12, 11.1.10, 10.6.9, 10.5.10 o 10.4.10 según corresponda. Para instalaciones en fin de vida (9.x o 8.9), aplicar manualmente los parches de seguridad de mantenimiento proporcionados de forma excepcional por el fabricante.
Mitigación
Si no es posible aplicar la actualización de manera inmediata, implemente los siguientes controles compensatorios para reducir el riesgo:
- Restringir los privilegios del rol de conexión utilizado por Drupal en PostgreSQL, asegurando que no posea permisos de superusuario (SUPERUSER) o capacidades de administración avanzadas para limitar escaladas de privilegios en el host.
- Desplegar o activar firmas basadas en inyección SQL (SQLi) en su Firewall de Aplicaciones Web (WAF) o proxy de desarrollo perimetral para inspeccionar, alertar y bloquear solicitudes HTTP anómalas dirigidas a endpoints públicos del CMS.
- Utilizar servicios de proxy y mitigación activa como Drupal Steward para filtrar de forma automática intentos de abuso en las rutas web afectadas.
Indicadores de compromiso
Al tratarse de una inyección SQL a nivel de API de base de datos, los indicadores de compromiso de carácter técnico y general a auditar son:
- Peticiones web anómalas dirigidas a endpoints públicos de autenticación o de servicios estructurados (como /user/login con parámetros JSON o rutas del módulo /jsonapi/*) que utilicen formatos de arreglos asociativos u objetos anidados inesperados en sus parámetros de consulta o cuerpo HTTP y que resulten en respuestas con código de error HTTP 500 (Internal Server Error) en lugar de respuestas estándar de fallo de cliente.
- Presencia de caracteres especiales de control SQL o metacaracteres de base de datos (como comillas, operadores de concatenación, delimitadores de instrucciones, o comentarios de bloque) codificados o en texto plano dentro de las llaves o corchetes de los parámetros de consulta en las bitácoras de acceso del servidor HTTP.
- Mensajes de error recurrentes en los logs del servicio PostgreSQL que informen de fallas de sintaxis, desajustes en el recuento de parámetros de consulta preparados o anomalías sintácticas (asociados comúnmente a códigos SQLSTATE 22012, HY093 o 42601) que coincidan de forma temporal con solicitudes externas inusuales.
- Modificación, creación o anomalías imprevistas en los registros de las tablas de datos del sistema de Drupal, específicamente en la tabla de usuarios (users_field_data), sesiones (sessions) o tablas de configuración principal (config).
Recomendaciones
- Auditar retrospectivamente los registros de acceso de los servidores web para buscar picos de respuestas HTTP 500 o fallos sintácticos inusuales en rutas expuestas que interactúen con consultas dinámicas.
- Aplicar el principio de menor privilegio en los roles de base de datos, limitando estrictamente el alcance de escritura y lectura del usuario de conexión de la aplicación a lo mínimo indispensable para el funcionamiento básico del CMS.
- Revisar y restringir los permisos de roles de Drupal para garantizar que únicamente cuentas administrativas de absoluta confianza tengan privilegios para actualizar, manipular o estructurar plantillas Twig (por ejemplo, a través de Views u otros componentes complementarios), reduciendo la superficie de exposición ante compromisos de dependencias de terceros.
- En caso de confirmar un intento de explotación exitoso, trate el sistema de forma preventiva como completamente comprometido; inicie de inmediato el aislamiento del servidor, rotación masiva de tokens de acceso, credenciales de la base de datos, secrets de entorno, claves de seguridad integradas en settings.php y proceda a restaurar la infraestructura a un estado limpio desde respaldos validados.