Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
regexploit — ReDoS(正規表現サービス拒否攻撃)に対して脆弱な正規表現を見つけます。 | Kitploit
ツール/GitHubGitHub/doyensec/regexploit
静的コード分析 (SAST)脆弱性分析ファジング
GitHubdoyensec/regexploit

regexploit

ReDoS(正規表現サービス拒否攻撃)に対して脆弱な正規表現を見つけます。

リポジトリを見る
848592年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

Regexploit

regexploit_logo

正規表現サービス拒否(ReDoS)に対して脆弱な正規表現を見つけます。

詳細は Doyensec ブログ をご覧ください。

多くのデフォルトの正規表現パーサーは、最悪の場合の複雑さが無制限です。マッチする入力文字列に対しては高速にマッチングを行うかもしれません。しかし、特定のマッチしない入力文字列によって、正規表現マッチャーが異常なバックトラッキングループに陥り、処理に長い時間がかかることがあります。これは、CPU が正規表現のマッチングに固執してしまうため、サービス拒否を引き起こす可能性があります。

このツールは以下のために設計されています:

  • ReDoS に対して脆弱な正規表現を見つける
  • 致命的なバックトラッキングを引き起こす悪意のある文字列の例を提供する

最悪計算量

これは、入力文字列の長さに対する正規表現マッチャーのバックトラッキング手順の複雑さを反映しています。

ここでの3次複雑性とは、文字列の脆弱な部分の長さが2倍になると、実行時間が約8倍(2^3)になることを意味します。 スター付きスター(例:(a*)*$)による指数関数的なReDoSの場合、補正係数が使用され、複雑性は10を超えます。

悪用可能性としては、実際に巨大な文字列が入力として許可されない限り、通常は3次以上の複雑性が必要です。

例

regexploit を実行し、コマンドラインで正規表現 v\w*_\w*_\w*$ を入力します。

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 + '!'

部分 \w*_\w*_\w* には、3つの重複する繰り返しグループが含まれています(\w はアルファベット、数字、およびアンダースコアにマッチします)。Repeated character: [5f:_] という行に示されているように、長い _(0x5f)の文字列は、このセクションにさまざまな方法でマッチします。3つの無限に繰り返すグループがあるため、最悪計算量は3です。ReDoS を引き起こす例は、必要なプレフィックス v、長い _ の文字列、そしてバックトラッキングを引き起こす !(非単語文字)で構成されています。すべての ReDoS が最後に特定の文字を必要とするわけではありませんが、この場合、長い _ の文字列は正規表現に正常にマッチし、バックトラックしません。Final character to cause backtracking: [^WORD] の行は、マッチを防ぎ ReDoS を引き起こすために、最後にマッチしない文字(単語文字以外)が必要であることを示しています。

別の例として、pip install ua-parser==0.9.0 のように ReDoS に対して脆弱なモジュールバージョンをインストールします。 インストールされている Python モジュールをスキャンするには、regexploit-python-env を実行します。

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
...

脆弱な正規表現ごとに、ReDoS をトリガーする1つ以上の悪意のある文字列を出力します。ユーザーエージェントを ;0 Build/HuaweiA000000000000000... に設定し、古いバージョンの ua-parser を使用しているウェブサイトを閲覧すると、サーバーがリクエストの処理に長い時間を要し、おそらくステータス 502 で終了する可能性があります。

インストール

Python 3.8 以上が必要です。JavaScript / TypeScript コードから正規表現を抽出するには、NodeJS 12 以上も必要です。

必要に応じて仮想環境を作成します。

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

次に、pip で実際にインストールします。

root@kitploit:~
pip install regexploit

使い方

正規表現のリストで Regexploit を使用する

stdin から(1行に1つずつ)正規表現を regexploit に入力します。

root@kitploit:~
regexploit

またはファイル経由で

root@kitploit:~
cat myregexes.txt | regexploit

自動的に正規表現を抽出する

Python、JavaScript、TypeScript、C#、YAML、JSON から正規表現を解析するための組み込みサポートがあります。

Python コード

AST を介して Python コードを(実行せずに)解析し、正規表現を見つけます。その後、正規表現は ReDoS について分析されます。

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

Javascript / Typescript

これは、regexploit/bin/javascript にあるバンドルされた NodeJS パッケージを使用し、eslint を使用して JavaScript を AST として解析し、すべての正規表現を出力します。

それらの正規表現は Python の ReDoS 検出ツールに入力されます。

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

注意:JavaScript と Python の正規表現解析には違いがあるため、エラーが発生する可能性があります。JS の正規表現 AST を書くのは あまり気が進みません。

Python インポート

現在のパス/環境にインストールされているすべての Python モジュールから正規表現を検索します。つまり、興味のあるモジュールを pip install すれば、それが分析されます。Cpython コードも含まれます。

root@kitploit:~
regexploit-python-env

注意:これは Python コードを AST に解析せず、モジュールのインポート時に自動的にコンパイルされた正規表現のみを見つけます。モジュールは実際にインポートされるため、モジュール内のコードが実行されます。これは、読み込み時に小さな文字列から構築される正規表現(例:Pillow の CVE-2021-25292)を見つけるのに役立ちます。

JSON / YAML

YAML のサポートには pyyaml が必要で、pip install regexploit[yaml] でインストールできます。

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

C# (.NET)

root@kitploit:~
regexploit-csharp something.cs

🏆 報告されたバグ 🏆

  • CVE-2020-5243: uap-core affecting uap-python, uap-ruby, etc. (User-Agent ヘッダーの解析)
  • CVE-2020-8492: cpython's urllib.request (WWW-Authenticate ヘッダーの解析)
  • CVE-2021-21236: CairoSVG (SVG の解析)
  • CVE-2021-21240: httplib2 (WWW-Authenticate ヘッダーの解析)
  • CVE-2021-25292: python-pillow (PDF の解析)
  • CVE-2021-26813: python-markdown2 (Markdown の解析)
  • CVE-2021-27290: npm/ssri (SRI の解析)
  • CVE-2021-27291: pygments lexers for ADL, CADL, Ceylon, Evoque, Factor, Logos, Matlab, Octave, ODIN, Scilab & Varnish VCL (構文強調表示)
  • CVE-2021-27292: ua-parser-js (User-Agent ヘッダーの解析)
  • CVE-2021-27293: RestSharp (.NET C# パッケージでの JSON デシリアライゼーション)
  • bpo-38804: cpython's http.cookiejar (Set-Cookie ヘッダーの解析)
  • SimpleCrawler (archived) (HTML の解析)
  • CVE-2021-28092: is-svg (SVG の解析)
  • nuget.org, NuGetGallery and NuGet.Client (NuGet パッケージ ID の解析)
  • markdown (python) (Markdown の解析)

クレジット

このツールは、Doyensec LLC の Ben Caller が研究時間中に作成しました。

alt text

ツールをダウンロード
  • ansi-html (nodejs) (ANSI の解析)
  • さらに、いくつかの pypi、npm、ruby、nuget パッケージで未公開のバグ