Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
shiro-cve-2022-32532 — Minimale Java-Webanwendung zur Reproduktion von CVE-2022-32532, einer Apache Shiro RegExPatternMatcher-Authentifizierungsumgehung über Zeilenumbruchzeichen in URLs. | Kitploit
Tools/GitHubGitHub/my0113/shiro-cve-2022-32532
Authentifizierung & AutorisierungSchwachstellenanalyseExploitationWebanwendungs-ExploitationPenetrationstestsLernen & Bildung
GitHubmy0113/shiro-cve-2022-32532

shiro-cve-2022-32532

Minimale Java-Webanwendung zur Reproduktion von CVE-2022-32532, einer Apache Shiro RegExPatternMatcher-Authentifizierungsumgehung über Zeilenumbruchzeichen in URLs.

Repository anzeigen
2vor 1 JahrNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Apache Shiro CVE-2022-32532 Reproduktionsumgebung

Dies ist eine minimale Webanwendung zur Reproduktion von CVE-2022-32532 (Apache Shiro RegExPatternMatcher Authentifizierungsumgehung).

Schwachstellenerklärung

  • CVE: CVE-2022-32532
  • Betroffene Versionen: Shiro < 1.9.1
  • Ursache: RegExPatternMatcher verankert reguläre Ausdrücke nicht korrekt, was zu Pfadumgehungen führen kann. Konkret wird die Java-Standard-Logik für reguläre Ausdrücke verwendet. Wenn das .-Symbol als regulärer Ausdruck vorkommt, werden Sonderzeichen wie \r (%0d) und \n (%0a) ignoriert. Es müssen explizit auf PATTERN.DOTALL basierende Regex-Matching-Regeln verwendet werden, um \r- und \n-Zeichen korrekt zu verarbeiten. Versionen unter Shiro-1.9.1 verwenden die Standard-Regex-Logik, sodass \r und \n nicht korrekt verarbeitet werden, was zur Authentifizierungsumgehung führt.

Reproduktion

  1. Anwendung starten

    root@kitploit:~
    Starte ShiroCve202232532Application
    
    
  2. URL, bei der Shiro eine Authentifizierung verlangt und access denied zurückgibt:
    http://localhost:8080/permit/xxx, das letzte xxx kann durch beliebige Zeichen ersetzt werden

  3. URL, bei der die Shiro-Authentifizierung umgangen wird und success zurückgegeben wird:
    http://localhost:8080/permit/xxx, d.h. im letzten xxx werden Zeilenumbruche \n (%0a) und Wagenrückläufe \r (%0d) eingefügt

  4. Lösungsansatz

    1. Kopiere den gesamten Inhalt von RegExPatternMatcher.java und PatternMatcher.java von https://github.com/apache/shiro/blob/shiro-root-1.9.1/core/src/main/java/org/apache/shiro/util/.
    2. Kompiliere diese beiden Java-Dateien mit JDK11 zu RegExPatternMatcher.class und PatternMatcher.class.
    3. Füge diese beiden Class-Dateien mit WinRAR unter org/apache/shiro/util/ in shiro-core-1.6.0.jar ein.
    4. Um die Reparatur zu testen, kopiere den Code von RegExPatternMatcher.java aus shiro-core-1.9.1 in dieses Beispiel und benenne ihn in RegExPatternMatcher191.java um. Ändere dann in MyFilter Zeile 15 und in MyShiroFilterFactoryBean Zeile 29 von new RegExPatternMatcher() in new RegExPatternMatcher191().
    5. Die Implementierungslogik von RegExPatternMatcher in shiro-core-1.9.1 ist wie folgt:
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;
   }
}
Tool herunterladen