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
regexploit — Finden Sie reguläre Ausdrücke, die anfällig für ReDoS (Regular Expression Denial of Service) sind. | Kitploit
Tools/GitHubGitHub/doyensec/regexploit
Statische Code-Analyse (SAST)SchwachstellenanalyseFuzzing
GitHubdoyensec/regexploit

regexploit

Finden Sie reguläre Ausdrücke, die anfällig für ReDoS (Regular Expression Denial of Service) sind.

Repository anzeigen
84859vor 2 JahrenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Regexploit

regexploit_logo

Finde Regexes, die anfällig für Regular Expression Denial of Service (ReDoS) sind.

Mehr Infos im Doyensec Blog

Viele Standard-Parser für reguläre Ausdrücke haben eine unbegrenzte Worst-Case-Komplexität. Das Matching eines regulären Ausdrucks kann schnell sein, wenn eine passende Eingabezeichenkette vorliegt. Bestimmte nicht passende Eingabezeichenketten können jedoch dazu führen, dass der Regex-Matcher in verrückte Backtracking-Schleifen gerät und ewig braucht, um die Zeichenkette zu verarbeiten. Dies kann einen Denial of Service verursachen, da die CPU damit beschäftigt ist, den Regex zu matchen.

Dieses Tool wurde entwickelt, um:

  • reguläre Ausdrücke zu finden, die anfällig für ReDoS sind
  • eine bösartige Beispielzeichenkette zu liefern, die katastrophales Backtracking auslöst

Worst-Case-Komplexität

Dies spiegelt die Komplexität des Backtracking-Verfahrens des Regex-Matchers in Bezug auf die Länge der eingegebenen Zeichenkette wider.

Kubische Komplexität bedeutet hier, dass wenn der angreifbare Teil der Zeichenkette in der Länge verdoppelt wird, die Ausführungszeit etwa 8-mal länger sein sollte (2^3). Für exponentielle ReDoS mit gestirnten Sternen wie z.B. (a*)*$ wird ein Korrekturfaktor verwendet und die Komplexität ist größer als 10.

Für die Ausnutzbarkeit ist in der Regel kubische oder höhere Komplexität erforderlich, es sei denn, wirklich riesige Zeichenketten sind als Eingabe erlaubt.

Beispiel

Führen Sie regexploit aus und geben Sie den regulären Ausdruck v\w*_\w*_\w*$ in der Kommandozeile ein.

root@kitploit:~
$ regexploit
v\w*_\w*_\w*$
Pattern: v\w*_\w*_\w*$
---
Worst-case complexity: 3 ⭐⭐⭐ (cubic)
Repeated character: [5f:_]
Final character to cause backtracking: [^WORD]
Example: 'v' + '_' * 3456 + '!'

Der Teil \w*_\w*_\w* enthält drei überlappende, sich wiederholende Gruppen (\w matcht Buchstaben, Ziffern und Unterstriche). Wie in der Zeile Repeated character: [5f:_] gezeigt, matcht eine lange Zeichenkette von _ (0x5f) diesen Abschnitt auf viele verschiedene Arten. Die Worst-Case-Komplexität ist 3, da es 3 unendlich wiederholende Gruppen gibt. Ein Beispiel zur Auslösung von ReDoS wird gegeben: Es besteht aus dem erforderlichen Präfix v, einer langen Zeichenkette von _ und dann einem ! (Nicht-Wort-Zeichen), um Backtracking auszulösen. Nicht alle ReDoS benötigen ein bestimmtes Zeichen am Ende, aber in diesem Fall matcht eine lange Zeichenkette von _ den Regex erfolgreich und führt kein Backtracking durch. Die Zeile Final character to cause backtracking: [^WORD] zeigt, dass ein nicht passendes Zeichen (kein Wortzeichen) am Ende erforderlich ist, um ein Matching zu verhindern und ReDoS auszulösen.

Als weiteres Beispiel installieren Sie eine Modulversion, die anfällig für ReDoS ist, wie pip install ua-parser==0.9.0. Um die installierten Python-Module zu scannen, führen Sie regexploit-python-env aus.

root@kitploit:~
Importing ua_parser.user_agent_parser
Vulnerable regex in /somewhere/.env/lib/python3.9/site-packages/ua_parser/user_agent_parser.py #183
Pattern: \bSmartWatch *\( *([^;]+) *; *([^;]+) *;
Context: self.user_agent_re = re.compile(self.pattern)
---
Worst-case complexity: 3 ⭐⭐⭐
Repeated character: [20]
Example: 'SmartWatch(' + ' ' * 3456

Worst-case complexity: 3 ⭐⭐⭐
Repeated character: [20]
Example: 'SmartWatch(0;' + ' ' * 3456

Vulnerable regex in /somewhere/.env/lib/python3.9/site-packages/ua_parser/user_agent_parser.py #183
Pattern: ; *([^;/]+) Build[/ ]Huawei(MT1-U06|[A-Z]+\d+[^\);]+)[^\);]*\)
Context: self.user_agent_re = re.compile(self.pattern)
---
Worst-case complexity: 3 ⭐⭐⭐
Repeated character: [[0-9]]
Example: ';0 Build/HuaweiA' + '0' * 3456
...

Für jeden anfälligen regulären Ausdruck wird ein oder mehrere bösartige Zeichenketten ausgegeben, um ReDoS auszulösen. Wenn Sie Ihren User-Agent auf ;0 Build/HuaweiA000000000000000... setzen und eine Website durchsuchen, die eine alte Version von ua-parser verwendet, kann der Server lange brauchen, um Ihre Anfrage zu verarbeiten, was wahrscheinlich im Status 502 endet.

Installation

Python 3.8+ ist erforderlich. Zum Extrahieren von Regexes aus JavaScript / TypeScript-Code ist auch NodeJS 12+ erforderlich.

Optional eine virtuelle Umgebung erstellen

root@kitploit:~
python3 -m venv .env
source .env/bin/activate

Jetzt mit pip installieren

root@kitploit:~
pip install regexploit

Verwendung

Regexploit mit einer Liste von Regexes

Geben Sie reguläre Ausdrücke über stdin (einen pro Zeile) in regexploit ein.

root@kitploit:~
regexploit

oder über eine Datei

root@kitploit:~
cat myregexes.txt | regexploit

Regexes automatisch extrahieren

Es gibt eine integrierte Unterstützung zum Parsen von Regexes aus Python, JavaScript, TypeScript, C#, YAML und JSON.

Python-Code

Parst Python-Code (ohne ihn auszuführen) über das AST, um Regexes zu finden. Die Regexes werden dann auf ReDoS analysiert.

root@kitploit:~
regexploit-py my-project/
regexploit-py "my-project/**/*.py" --glob

JavaScript / TypeScript

Dies verwendet das gebündelte NodeJS-Paket in regexploit/bin/javascript, das Ihr JavaScript als AST mit eslint parst und alle Regexes ausgibt.

Diese Regexes werden in den Python-ReDoS-Finder eingespeist.

root@kitploit:~
regexploit-js my-module/my-file.js another/file.js some/folder/
regexploit-js "my-project/node_modules/**/*.js" --glob

N.B. es gibt Unterschiede zwischen dem JavaScript- und Python-Regex-Parsing, daher kann es zu Fehlern kommen. Ich bin nicht sicher, ob ich einen JS-Regex-AST schreiben möchte!

Python-Importe

Durchsucht alle derzeit in Ihrem Pfad / Ihrer Umgebung installierten Python-Module nach Regexes. Das bedeutet, Sie können pip install für alle Module ausführen, die Sie interessieren, und sie werden analysiert. CPython-Code ist enthalten.

root@kitploit:~
regexploit-python-env

N.B. dies parst den Python-Code nicht zu einem AST und findet nur Regexes, die beim Modulimport automatisch kompiliert werden. Module werden tatsächlich importiert, also wird der Code in den Modulen ausgeführt. Dies ist hilfreich, um Regexes zu finden, die beim Laden aus kleineren Zeichenketten zusammengesetzt werden, z.B. CVE-2021-25292 in Pillow

JSON / YAML

YAML-Unterstützung erfordert pyyaml, das mit pip install regexploit[yaml] installiert werden kann.

root@kitploit:~
regexploit-json *.json
regexploit-yaml *.yaml

C# (.NET)

root@kitploit:~
regexploit-csharp something.cs

🏆 Gemeldete Fehler 🏆

  • CVE-2020-5243: uap-core betrifft uap-python, uap-ruby, usw. (User-Agent-Header-Parsing)
  • CVE-2020-8492: cpython's urllib.request (WWW-Authenticate-Header-Parsing)
  • CVE-2021-21236: CairoSVG (SVG-Parsing)
  • CVE-2021-21240: httplib2 (WWW-Authenticate-Header-Parsing)
  • CVE-2021-25292: python-pillow (PDF-Parsing)
  • CVE-2021-26813: python-markdown2 (Markdown-Parsing)
  • CVE-2021-27290: npm/ssri (SRI-Parsing)
  • CVE-2021-27291: pygments Lexer für ADL, CADL, Ceylon, Evoque, Factor, Logos, Matlab, Octave, ODIN, Scilab & Varnish VCL (Syntaxhervorhebung)
  • CVE-2021-27292: ua-parser-js (User-Agent-Header-Parsing)
  • CVE-2021-27293: RestSharp (JSON-Deserialisierung in einem .NET C#-Paket)
  • bpo-38804: cpython's http.cookiejar (Set-Cookie-Header-Parsing)
  • SimpleCrawler (archiviert) (HTML-Parsing)
  • CVE-2021-28092: is-svg (SVG-Parsing)
  • nuget.org, NuGetGallery und NuGet.Client (Parsen von NuGet-Paket-IDs)

Credits

Dieses Tool wurde von Ben Caller von Doyensec LLC während der Forschungszeit entwickelt.

alt text

Tool herunterladen
  • markdown (python) (Markdown-Parsing)
  • ansi-html (nodejs) (ANSI-Parsing)
  • Plus unveröffentlichte Fehler in einigen pypi-, npm-, ruby- und nuget-Paketen