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
shiro-cve-2022-32532 — Aplicación web Java mínima para reproducir CVE-2022-32532, una omisión de autenticación de RegExPatternMatcher de Apache Shiro mediante caracteres de nueva línea en las URL. | Kitploit
Herramientas/GitHubGitHub/my0113/shiro-cve-2022-32532
Autenticación y AutorizaciónAnálisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónAprendizaje y Educación
GitHubmy0113/shiro-cve-2022-32532

shiro-cve-2022-32532

Aplicación web Java mínima para reproducir CVE-2022-32532, una omisión de autenticación de RegExPatternMatcher de Apache Shiro mediante caracteres de nueva línea en las URL.

Ver Repositorio
2hace 1 añoAú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

Entorno de reproducción de Apache Shiro CVE-2022-32532

Esta es una aplicación web mínima para reproducir el CVE-2022-32532 (bypass de autenticación de Apache Shiro RegExPatternMatcher).

Descripción de la vulnerabilidad

  • CVE: CVE-2022-32532
  • Versiones afectadas: Shiro < 1.9.1
  • Causa: RegExPatternMatcher no ancla la expresión regular de forma correcta, lo que puede provocar un bypass de rutas. En concreto, usa la lógica de coincidencia de expresiones regulares por defecto de Java; cuando encuentra el símbolo . como expresión regular, ignora caracteres especiales como \r (%0d) y \n (%0a). Es necesario usar explícitamente un patrón de coincidencia basado en el modo PATTERN.DOTALL para procesar correctamente los símbolos \r y \n. Sin embargo, las versiones anteriores a shiro-1.9.1 usan la lógica de coincidencia por defecto, por lo que no pueden procesar correctamente \r y \n, lo que conduce al bypass de autenticación.

Cómo reproducir

  1. Iniciar la aplicación

    root@kitploit:~
    启动ShiroCve202232532Application
    
    
  2. La URL que devuelve access denied con la autenticación normal de Shiro es la siguiente:
    http://localhost:8080/permit/xxx, la xxx final se puede reemplazar por cualquier carácter.

  3. La URL que omite la autenticación de Shiro y devuelve success es la siguiente:
    http://localhost:8080/permit/xxx, es decir, insertar un salto de línea \n (%0a) y un retorno de carro \r (%0d) en la xxx final.

  4. Solución

    1. Copiar todo el contenido de RegExPatternMatcher.java y PatternMatcher.java desde https://github.com/apache/shiro/blob/shiro-root-1.9.1/core/src/main/java/org/apache/shiro/util/.
    2. Compilar estos dos archivos Java con JDK 11 para obtener RegExPatternMatcher.class y .
root@kitploit:~
/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
package org.apache.shiro.util;

import java.util.regex.Pattern;
import java.util.regex.Matcher;

/**
 * {@code PatternMatcher} implementation that uses standard {@link java.util.regex} objects.
 *
 * @see Pattern
 * @since 1.0
 */
public class RegExPatternMatcher implements PatternMatcher {

   private static final int DEFAULT = Pattern.DOTALL;

   private static final int CASE_INSENSITIVE = DEFAULT | Pattern.CASE_INSENSITIVE;

   private boolean caseInsensitive = false;

   /**
    * Simple implementation that merely uses the default pattern comparison logic provided by the
    * JDK.
    * <p/>This implementation essentially executes the following:
    * <pre>
    * Pattern p = Pattern.compile(pattern, Pattern.DOTALL);
    * Matcher m = p.matcher(source);
    * return m.matches();</pre>
    * @param pattern the pattern to match against
    * @param source  the source to match
    * @return {@code true} if the source matches the required pattern, {@code false} otherwise.
    */
   public boolean matches(String pattern, String source) {
      if (pattern == null) {
         throw new IllegalArgumentException("pattern argument cannot be null.");
      }
      Pattern p = Pattern.compile(pattern, caseInsensitive ? CASE_INSENSITIVE : DEFAULT);
      Matcher m = p.matcher(source);
      return m.matches();
   }

   /**
    * Returns true if regex match should be case-insensitive.
    * @return true if regex match should be case-insensitive.
    */
   public boolean isCaseInsensitive() {
      return caseInsensitive;
   }

   /**
    * Adds the Pattern.CASE_INSENSITIVE flag when compiling patterns.
    * @param caseInsensitive true if patterns should match case-insensitive.
    */
   public void setCaseInsensitive(boolean caseInsensitive) {
      this.caseInsensitive = caseInsensitive;
   }
}
Descargar herramienta
PatternMatcher.class
  • Usar WinRAR para colocar estos 2 archivos .class en la ruta org/apache/shiro/util/ dentro de shiro-core-1.6.0.jar.
  • La prueba de la corrección consistió en copiar el código de RegExPatternMatcher.java de shiro-core-1.9.1 a este caso, renombrándolo como RegExPatternMatcher191.java, y luego cambiar new RegExPatternMatcher() en la línea 15 de MyFilter y en la línea 29 de MyShiroFilterFactoryBean por new RegExPatternMatcher191().
  • La lógica de implementación de RegExPatternMatcher en shiro-core-1.9.1 es la siguiente: