Media

Contao: Control de acceso incorrecto en el voter de acceso a tablas

  • Publicada: 09.10.2026
  • Actualizado: 11.10.2026 10:33

Debido a un fallo de almacenamiento en caché en el security voter que gestiona el acceso a nivel de tabla en el backend de Data Container (DCA) de Contao, un usuario del backend con pocos privilegios (no administrador) puede obtener acceso no autorizado de lectura, creación, actualización y eliminación a tablas de la base de datos fuera de los permisos de sus módulos asignados. Esto abarca tablas que contienen datos personales confidenciales, como los registros de miembros del frontend y direcciones de correo electrónico de suscriptores al boletín.

Detalles de la vulnerabilidad

El backend de Contao está estructurado en módulos (por ejemplo, «Noticias», «Miembros»). Cada usuario del backend pertenece a un grupo que define con qué módulos, y por ende con qué tablas de base de datos, tiene permitido trabajar. Antes de permitir manipular una tabla, Contao debe comprobar si el grupo del usuario incluye el acceso a dicha tabla.

Para no repetir esta comprobación de forma continua, Contao almacena la respuesta durante el resto de la solicitud HTTP. Sin embargo, guarda este resultado bajo una clave errónea: en lugar de registrar si el usuario tiene permiso para acceder a una tabla concreta, solo almacena que el usuario tiene acceso a un recurso sin asociarlo a la tabla específica correspondiente.

Por tanto, si una solicitud comprueba primero una tabla a la que el usuario SÍ tiene acceso y luego evalúa una segunda tabla diferente para la que NO dispone de permisos, Contao reutiliza la primera respuesta. Como consecuencia, el usuario accede a una tabla para la que su grupo nunca recibió autorización.

Detalles técnicos

El backend de Contao aplica el control de acceso por tabla mediante una cadena de Symfony security voters. El componente implicado es TableAccessVoter::hasAccessToModule(), en core-bundle/src/Security/Voter/DataContainer/TableAccessVoter.php:

php
    private array $canAccessTable = [];
    private array $canReadAccessTable = [];
 
    private function hasAccessToModule(TokenInterface $token, ...): bool
    {
        $tokenHash = hash('xxh128', serialize($token));
 
        if (isset($this->canAccessTable[$tokenHash]) || (...)) {
            return $this->canAccessTable[$tokenHash] ?? $this->canReadAccessTable[$tokenHash];
        }
 
        $table = $subject->getDataSource();
 
        foreach ($GLOBALS['BE_MOD'] as $modules) {
            ...
            return $this->canAccessTable[$tokenHash] = true;  // or false
        }
    }

La clave de caché, $tokenHash, se genera únicamente a partir del token de seguridad del usuario actual y no incluye la tabla que se está evaluando. Como TableAccessVoter es un servicio compartido estándar de Symfony, esta caché se mantiene activa durante toda la solicitud HTTP. De este modo, la primera tabla comprobada para un usuario determina el resultado almacenado para cualquier otra tabla evaluada posteriormente en esa misma solicitud, sea o no correcta dicha respuesta para la segunda tabla.

La situación se agrava por la presencia de DefaultDataContainerVoter, un voter permisivo de respaldo con baja prioridad que concede acceso a cualquier permiso relacionado con tablas a menos que otro voter lo deniegue explícitamente. Cuando TableAccessVoter devuelve una respuesta neutral («sin opinión») debido a la caché obsoleta, este voter de respaldo transforma ese resultado en una concesión total de acceso.

La mayoría de las tablas de bases de datos en Contao no disponen de una segunda comprobación específica. Solo tl_content, tl_favorites, tl_form, tl_form_field, tl_module, tl_image_size(_item), tl_job, tl_layout, tl_page, tl_preview_link, tl_undo y tl_user cuentan con ella. Tablas como tl_member (datos de miembros), tl_newsletter_recipients (correos de suscriptores), tl_news, tl_calendar_events, tl_faq y tl_comments dependen exclusivamente de la comprobación defectuosa descrita.

Créditos

Esta vulnerabilidad de seguridad fue descubierta por Sven Jäger de SySS GmbH.

Qué hacer

Actualice contao/core-bundle a la versión 5.7.12 o posterior.

Software afectado

Haz clic en una tecnología para ver todas sus vulnerabilidades.

PlataformaPaqueteVersiones vulnerablesCorregida en
Paquete de Composer contao/core-bundle >= 5.7.0, < 5.7.12 5.7.12

Referencias

Puntuación CVSS 4.3/10
Vector CVSS
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N
Debilidad (CWE)
CWE-524, CWE-863
Plataforma
Composer
Paquete
contao/core-bundle
Publicada
09.10.2026
Actualizado
11.10.2026 10:33

Fuentes y licencias · Editado o traducido por DockRay; se mantienen los derechos y las licencias de las fuentes.

OSV / GitHub Advisory Database - GHSA-5974-gfqc-wrcm - CC BY 4.0

Historial de vulnerabilidades: contao/core-bundle

Todas las vulnerabilidades publicadas de este paquete (Paquete de Composer), de la más reciente a la más antigua. Muestra si es un fallo aislado o un paquete que hay que vigilar.

Todas (40) en el archivo
Entradas en total
40
Primera → última
12.2019 10.2026
Sin corrección
0
Explotada en ataques
0

Distribución por gravedad

  • Crítica 4
  • Alta 7
  • Media 23
  • Baja 6

Divulgaciones por año

  1. 2019: 3
  2. 2020: 1
  3. 2021: 4
  4. 2022: 8
  5. 2023: 1
  6. 2024: 7
  7. 2025: 7
  8. 2026: 9
Gravedad:
  1. Contao: Control de acceso incorrecto en el voter de acceso a tablas esta entrada
    Media · 4.3 CVE-2026-107851 >= 5.7.0, < 5.7.12 5.7.12
  2. Alta · 8.3 CVE-2024-45398 >= 4.0.0, < 4.13.49, >= 5.0.0, < 5.3.15, >= 5.4.0, < 5.4.3 4.13.49, 5.3.15, 5.4.3
  3. Alta · 8.3 CVE-2024-28235 >= 4.9.0, < 4.13.40, >= 5.0.0-RC1, < 5.3.4 4.13.40, 5.3.4
  4. Crítica · 9.8 CVE-2019-11512 >= 4.1.0, < 4.4.39, >= 4.5.0, < 4.7.5 4.4.39, 4.7.5
  5. Crítica · 9.8 CVE-2017-16558 >= 4.0.0, < 4.4.8, >= 3.0.0, <= 3.5.30 4.4.8
  6. Alta · 7.2 CVE-2022-24899 >= 4.13.0, < 4.13.3 4.13.3
  7. Alta · 8.8 CVE-2019-10642 >= 4.7.0, < 4.7.3 4.7.3
  8. Crítica · 9.8 CVE-2019-10641 >= 4.0.0, < 4.4.37, >= 4.5.0, < 4.7.3 4.4.37, 4.7.3
  9. Alta · 8.8 CVE-2017-10993 >= 4.0.0, < 4.4.1 4.4.1
  10. Crítica · 9.8 CVE-2019-10643 >= 4.7.0, < 4.7.3 4.7.3
  11. Alta · 8.0 CVE-2021-37627 >= 4.0.0, < 4.4.56, >= 4.5.0, < 4.9.18, >= 4.10.0, < 4.11.7 4.4.56, 4.9.18, 4.11.7
  12. Alta · 8.8 CVE-2019-19745 >= 4.0.0, < 4.4.46, >= 4.5.0, < 4.8.6 4.4.46, 4.8.6

Identifica las vulnerabilidades de tu aplicación

Con la integración de DockRay y el inventario de software activado, DockRay compara las versiones notificadas de los componentes con las vulnerabilidades conocidas y avisa de las coincidencias confirmadas. La cobertura depende de la tecnología compatible y de los avisos disponibles.

Conectar tu aplicación
Newsletter DockRay

La seguridad de tus aplicaciones en tu correo

Vulnerabilidades importantes, recomendaciones concretas y consejos prácticos para tus aplicaciones. Elige tus tecnologías y sigue lo que importa para tu proyecto.

  • Un resumen diario de nuevas vulnerabilidades, también las críticas.
  • Avisos sobre actualizaciones importantes.
  • Consejos prácticos sobre seguridad y monitorización de aplicaciones.

Déjalo vacío para recibir avisos de todas las tecnologías.

Suscripción gratuita. Date de baja con un clic en cualquier correo.