Media

Evasión de la lista de bloqueo de invocación estricta en OGNL mediante proxies de reflexión java.lang.reflect

  • Publicada: 21.10.2026
  • Actualizado: 21.10.2026 19:26

Resumen

El modo opcional de invocación más estricta (stricter invocation) de OGNL mantiene una lista de bloqueo que impide que las expresiones llamen directamente a métodos en clases peligrosas como Runtime, ProcessBuilder y ClassLoader. La lista de bloqueo filtra según la clase que declara el método que OGNL invoca. Debido a que java.lang.reflect.Method (y Constructor/Field) no estaban en la lista, una expresión puede usar la reflexión como proxy — someMethod.invoke(target, args) — para acceder a un método bloqueado. La llamada real (por ejemplo, ProcessBuilder.start()) se ejecuta en la maquinaria interna de reflexión del JDK y nunca pasa de nuevo por invokeMethod de OGNL, por lo que la lista de bloqueo no la detecta.

Prueba de concepto

Bajo el contexto por defecto de OGNL (acceso solo público, invocación estricta habilitada), la siguiente expresión crea un archivo a pesar de que la llamada directa a new ProcessBuilder(...).start() está bloqueada:

(#pb=new java.lang.ProcessBuilder({"/usr/bin/touch","rce-proof.txt"}),
 #methods=@java.lang.ProcessBuilder@class.getMethods(),
 #names=#methods.{ #this.getName() },
 #startIdx=#names.indexOf("start"),
 #methods[#startIdx].invoke(#pb, null))

Impacto y alcance — lea atentamente

Esto corresponde al refuerzo de una capa secundaria de defensa en profundidad, no a una vulneración del límite de seguridad principal de OGNL.

En OGNL, la lista de bloqueo de invocación estricta es una mitigación secundaria. El control de acceso principal es la implementación de MemberAccess proporcionada por el framework o la aplicación que lo integra, la cual OGNL consulta en cada llamada a constructores y métodos. Se espera que los frameworks que evalúan expresiones no confiables configuren un MemberAccess restrictivo, como por ejemplo SecurityMemberAccess de Apache Struts, que excluye clases peligrosas y el paquete java.lang.reflect. Con un MemberAccess de este tipo, esta prueba de concepto queda bloqueada en el primer paso (el constructor de new ProcessBuilder(...)), antes de que sea posible alcanzar la reflexión.

El contexto por defecto incluido con OGNL permite de forma intencionada todos los miembros públicos y no está diseñado para actuar como sandbox para entradas no confiables. Una aplicación que evalúa expresiones controladas por atacantes con esa configuración permisiva ya cuenta con múltiples vías para ejecutar código, y esta técnica no es indispensable para conseguirlo.

Solo se verá afectado si se cumplen todas las condiciones siguientes:

  1. Su aplicación evalúa expresiones OGNL no confiables o controladas por un atacante (1).
  2. Utiliza la implementación por defecto permisiva de MemberAccess de OGNL (o una equivalentemente permisiva que admita java.lang.reflect) (2).
  3. Confía en la lista de bloqueo de invocación más estricta como su sandbox (3).

Los consumidores configurados correctamente, incluido Apache Struts con su SecurityMemberAccess, no están afectados. La protección real en escenarios con expresiones no confiables sigue siendo un MemberAccess configurado adecuadamente; la lista de bloqueo no debe tratarse como un sandbox.

Corrección

Se han añadido java.lang.reflect.Method, java.lang.reflect.Constructor y java.lang.reflect.Field a la lista de bloqueo de invocación más estricta, impidiendo que los objetos de reflexión se utilicen como proxies de invocación en dicho modo. Se verificó que la vía de java.lang.invoke.MethodHandle no es explotable (sus métodos polimórficos de firma invoke/invokeExact fallan a través de la invocación basada en reflexión de OGNL), por lo que no fue necesario incluir clases adicionales.

Créditos

Reportado de manera responsable a través de Tidelift por 毛锐 (youyi.mr@alibaba-inc.com).

Qué hacer

Actualice OGNL a la versión 3.4.13 o posterior. Asegúrese de que las aplicaciones que procesan expresiones no confiables utilicen una directiva MemberAccess restrictiva en lugar de depender de la lista de bloqueo como sandbox.

Software afectado

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

PlataformaPaqueteVersiones vulnerablesCorregida en
Java / Kotlin (Maven) ognl:ognl < 3.4.13 3.4.13

Referencias

Puntuación CVSS 5.6/10
Vector CVSS
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:L
Debilidad (CWE)
CWE-693
Plataforma
Java / Kotlin (Maven)
Paquete
ognl:ognl
Publicada
21.10.2026
Actualizado
21.10.2026 19:26

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

OSV / GitHub Advisory Database - GHSA-crwc-vw2r-qr6m - CC BY 4.0

Historial de vulnerabilidades: ognl:ognl

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

Entradas en total
2
Primera → última
05.2022 10.2026
Sin corrección
0
Explotada en ataques
0

Distribución por gravedad

  • Media 2

Divulgaciones por año

  1. 2022: 1
  2. 2023: 0
  3. 2024: 0
  4. 2025: 0
  5. 2026: 1
  1. Evasión de la lista de bloqueo de invocación estricta en OGNL mediante proxies de reflexión java.lang.reflect esta entrada
    Media · 5.6 CVE-2026-113730 < 3.4.13 3.4.13
  2. Media · 5.3 CVE-2016-3093 < 3.0.12 3.0.12

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.