Skip to content
KitploitKITPLOIT
HerramientasBlog
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-2022-22978 — Prueba de concepto que demuestra la omisión de autorización en RegexRequestMatcher de Spring Security (CVE-2022-22978) mediante inyección CRLF, con análisis y pasos de mitigación. | Kitploit
Herramientas/GitHubGitHub/raghvendra1207/cve-2022-22978
Autenticación y AutorizaciónAnálisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebAprendizaje y EducaciónLabs y Práctica
GitHubraghvendra1207/cve-2022-22978

CVE-2022-22978

Prueba de concepto que demuestra la omisión de autorización en RegexRequestMatcher de Spring Security (CVE-2022-22978) mediante inyección CRLF, con análisis y pasos de mitigación.

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
Ver Repositorio
5hace 3 añosAún no revisado

CVE 2022-22978: Authorization Bypass in RegexRequestMatcher 🥶

Resumen

Según la información que he investigado, esta es una vulnerabilidad relacionada con la clase RegexRequestMatcher en el framework Spring Security. Específicamente, las aplicaciones que usan RegexRequestMatcher donde la expresión regular contiene un punto (.) pueden ser omitidas mediante los caracteres \r(%0a) , \n(%0d); de esta forma, los atacantes sin autenticación pueden acceder a rutas no permitidas.

Versiones afectadas del framework Spring Security:

  • 5.5.x anteriores a 5.5.7
  • 5.6.x anteriores a 5.6.4
  • Versiones anteriores no soportadas.

Análisis

Necesitamos acceder al código fuente de Spring Security para analizar estáticamente esta vulnerabilidad. Específicamente, utilicé la función de comparación de commits entre las versiones 5.6.3 (versión vulnerable) y 5.6.4 (versión corregida) de Github. Véase en el siguiente enlace: Comparing 5.6.3...5.6.4 · spring-projects/spring-security (github.com)

img1

Revisé los cambios en la clase RegexRequestMatcher. Se puede observar que en la versión 5.6.4, esta clase utiliza Pattern.DOTALL en lugar del . por defecto de la versión 5.6.3. Donde:

  • Pattern : es una de las tres clases del paquete java.util.regex, que se encarga de procesar expresiones regulares.
  • Pattern.DOTALL : Al usar esta bandera, "." en una expresión regular coincidirá con todos los caracteres, incluidos los saltos de línea como \n , \r.
  • Pattern.CASE_INSENSITIVE: no distingue entre mayúsculas y minúsculas.

img2

Por defecto, el punto . en una expresión regular coincide con todos los caracteres excepto los saltos de línea como \n, \r. Si hay una función regex que valida el patrón de una cadena, esa función no coincidirá si la cadena contiene saltos de línea. Para evitar esto, se puede usar la bandera Pattern.DOTALL.

Sin embargo, si alguien utiliza intencionadamente %0d en lugar de \n o %0a en lugar de \r, la regex anterior aún no coincidiría. Por lo tanto, en la versión 5.6.4, se añadió una verificación adicional para este caso en RegexRequestMatcherTests.java. Específicamente, convierte %0d y %0a respectivamente en \n y \r antes de verificar con la regex.

img3

Demostración

Paso 1: Crear una aplicación web Spring Boot usando Spring Initializr con dos dependencias: Spring Security y Spring Web.

img4

Paso 2: Crear un Controller que imprima el texto This is a CVE-2022-22978 demo cuando se reciba una solicitud en la ruta /admin/*

img5

Paso 3: Configurar un mecanismo de autenticación cada vez que un usuario acceda a la ruta /admin/<cualquier> usando regexMatchers("/admin/.*").authenticated(). Esta es la vulnerabilidad que los atacantes aprovechan para ver el contenido de las páginas /admin/<cualquier> sin autenticación.

img6

Paso 4: En el archivo de configuración, declarar la versión de Spring Security que contiene la vulnerabilidad. Aquí elegí la versión 5.6.3.

img7

Paso 5: Ejecutar la aplicación con el comando gradlew bootRun; el programa utiliza por defecto Apache Tomcat escuchando en el puerto 8080. Accedemos a la ruta /admin/xyz (cualquier ruta que comience con /admin/).

img8

El resultado devuelve un código 403 Forbidden, lo que significa que no podemos acceder porque no estamos autenticados.

En este punto, aprovechamos la vulnerabilidad de la función regexMatchers en Spring Security (versión 5.6.3) que no coincide con caracteres de nueva línea como \r(%0d) y \n(%0a) → podemos acceder a la ruta anterior sin autenticación usando el payload /admin/%0dxyz

img9

Similar con el payload /admin/%0axyz

img10

Así, hemos explotado con éxito la vulnerabilidad CVE-2022-22978 con un payload muy simple.

Mitigación

  • Actualizar la versión de Spring Security a:
    • 5.5.7+
    • 5.6.4+
    • 5.7+
  • Demostración: Usar una versión corregida, específicamente 5.7.1

img11

Intentar atacar la web con el payload similar: /admin/%0dxyz

img12

Ahora, la aplicación no devuelve la respuesta que el atacante esperaba.

Uso

root@kitploit:~
git clone https://github.com/ducluongtran9121/CVE-2022-22978-PoC.git
cd CVE-2022-22978-PoC
gradlew bootRun

Requisitos

root@kitploit:~
Java 18
Gradle 7.4.1
Descargar herramienta