Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
shiro-check — 実際にインストールされている Apache Shiro のモジュールとバージョンを洗い出し、公式の 26 件の CVE のうち、実際に自分に該当するものを一つずつ判定します。「CVE × モジュール」単位で判定し、依存ゼロの単一 JAR です。CVE-2026-49268 | Kitploit
ツール/GitHubGitHub/xiaoqimikko/shiro-check
静的分析脆弱性スキャナー脆弱性分析DevSecOpsサプライチェーンセキュリティ
GitHubxiaoqimikko/shiro-check

shiro-check

実際にインストールされている Apache Shiro のモジュールとバージョンを洗い出し、公式の 26 件の CVE のうち、実際に自分に該当するものを一つずつ判定します。「CVE × モジュール」単位で判定し、依存ゼロの単一 JAR です。CVE-2026-49268

リポジトリを見る
1ヶ月前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

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

shiro-check

実際にインストールされている Apache Shiro モジュールとバージョンをスキャンし、公式の26件の CVE のうち、どれが実際にあなたに該当するかを1件ずつ判定します。

依存関係ゼロの単一 jar、ネットワーク接続なし、あなたの pom を読まない —— ビルド成果物(jar / war / fat jar / ディレクトリ)を直接スキャンします。

java -jar shiro-check.jar --utf8 your-app.jar

なぜ「バージョン番号を一目見ただけで済ませる」わけにはいかないのか

Shiro の CVE は**「Shiro」に紐づいているのではなく、具体的なモジュールに紐づいている**。同じ番号でもモジュールが異なればルールも異なる:

CVE影響を受けるモジュールshiro-core のみを使う人
CVE-2020-17510shiro-spring該当しない
CVE-2020-17523shiro-web / shiro-spring / shiro-spring-boot-starter該当しない
CVE-2023-34478shiro-web該当しない
CVE-2026-56091shiro-guice該当しない

公式の26件のうち、13件は shiro-core にまったく触れていない。それらを「Shiro < 1.7.1 には脆弱性がある」の一言に押し込めてしまうのは、 ユーザー自身が下すべき判断を代わりに下すこと —— しかも間違って下すことになる。

本ツールの判定粒度は CVE × モジュール:26件の CVE を 37件のルールに展開し、7つのモジュールをカバーする。

座標マッチングでは見えない3つの事実

1. 5件は Dependabot のアラートに上がらない

Dependabot は依存関係の座標に基づいて GitHub advisory を照合します。26 件のうち 5 件が一致しません:

項目一致しない理由
CVE-2026-56091(shiro-guice 認証バイパス、high)advisory が依然として unreviewed で、影響を受けるパッケージが空
CVE-2026-56130(RememberMe cookie が期限切れにならない)同上
CVE-2014-0074(LDAP 空パスワードによるバイパス)同上
CVE-2023-22602(Spring Boot 2.6+ 認証バイパス、high)advisory が**org.apache.shiro:shiro-root にのみ紐付けられている**
CVE-2010-3863同上

そして shiro-root は packaging=pom の親 POM である —— Maven Central 上に 対応する jar は存在せず(HTTP 404)、 どのプロジェクトもこれに依存することはないため、座標マッチングでは永遠に一致しない。

ℹ️ unreviewed は GitHub の正常なフロー状態である(NVD の自動インポートで、影響パッケージがまだ人手で注釈されていない)。 座標マッチングも合理的な設計である。ここでは「アラートに上がらない」という事実を述べているだけで、誰かが誤った報告をしたと言っているわけではない。

2. uber jar の中には別のモジュールが隠れている

shiro-all は複数のモジュールをまとめてパッケージした uber jar である。実測では shiro-all-1.3.2.jar の内部に 6つの META-INF/maven/org.apache.shiro/<モジュール>/pom.properties が存在する:

shiro-all  shiro-core  shiro-web  shiro-spring  shiro-ehcache  shiro-quartz

つまり、pom に shiro-all しか書かれていないプロジェクトは、座標レベルでは名前が1つしかない (26 件のうち CVE-2016-6802 だけがこの座標に紐づく)が、jar の中には実際に core / web / spring の3モジュールのコードが存在している。

実物をスキャンすればこの層を見抜ける。実際に shiro-all-1.3.2.jar を試したところ、本ツールは 3モジュールにまたがる20件 を報告した。

3. 3件の公式修正バージョンが Maven Central から取得できない

3件の advisory の first_patched_version は 3.0.0-alpha-2 だが、このバージョンはMaven Central に一度も公開されていない (公式は直接 3.0.0 正式版をリリースした)。これに従ってアップグレードしても進めない —— 本ツールはそれを明示し、アップグレード提案を 実際に取得可能なバージョンに置き換える。

判定は「あなたがやられた」ことと同義ではない

「ヒット」= このモジュールが存在し、かつバージョンが公式の影響範囲内にある。これは「すでに悪用された」や「必ず悪用可能」と同義ではない。

26件のうち大多数は特定の設定があって初めて成立するため、ツールはそれらを分けて列挙する:

  • 🔴 デフォルト設定で影響を受ける —— 優先的に処理(例: CVE-2026-43827 session fixation)
  • ⚠️ 特定の条件を満たす必要がある —— 条件を1件ずつ提示し、満たさなければ該当しない

条件の例(公式説明の原文に逐語で照合し、外挿は行っていない):

CVE-2026-49268  仅当使用 DefaultLdapRealm(用户名未转义即拼进 LDAP DN)
CVE-2023-22602  仅当与 Spring Boot 2.6+ 一起使用,且未把
                spring.mvc.pathmatch.matching-strategy 设回 ant_path_matcher
CVE-2026-23903  仅当静态文件放在大小写不敏感的文件系统上(如 macOS 默认设置),
                且 Shiro 里只配了小写的 filter 路径;只影响静态文件

🔴 ツールはあなたの設定を解析しません。 shiro.ini / application.yml / Java コードのいずれでも Shiro を設定できますが、 解析して得られる結論は解析しないよりも危険です。条件は明示的に列挙されているので、判断はあなた自身が行います —— これは意図的な設計であり、手抜きではありません。

使い方

# 扫一个 jar / war
java -jar shiro-check.jar your-app.jar

# 扫整个目录(递归)
java -jar shiro-check.jar /path/to/libs

# 连「不适用」的条目也列出来
java -jar shiro-check.jar --all your-app.jar

# Windows 控制台中文乱码时
java -jar shiro-check.jar --utf8 your-app.jar

識別能力:通常の jar · Spring Boot fat jar(BOOT-INF/lib/)· 従来の WAR(WEB-INF/lib/)· uber jar(shiro-all、内含モジュールを展開)· 名前を変更された jar(pom.properties を基準とする)· バックスラッシュでパスを書いた畸形アーカイブ。

JDK 17+ が必要。実行時依存ゼロ。

判定表はどうやって作られたか

一行も手書きしない。 tools/gen_rules.py が二つの一次ソースから生成する:

ソース提供内容
shiro.apache.org/security-reports.htmlエントリの全集、説明原文、トリガー条件原文
GitHub Advisory API影響を受けるモジュール座標、構造化されたバージョン範囲、評価

生成プロセスには 12 個のアサーションがあり、いずれかが満たされなければ中止してファイルを書き出さない(「解析失敗で空の殻の表を生成してもテストは全部グリーンのまま」を防ぐ):

  • 完全性:本文 h3 の口径と目次アンカーの口径が同じ CVE 群を数え上げなければならない
  • 溯源:手で記入したバージョン区間は、そのバージョン文字列が公式原文に逐語的に出現しなければならない
  • 実測:モジュール帰属は実際の jar 内のクラス位置によって裏付けられなければならない(「この項目は web のだと覚えている」は受け付けない)
  • 実行可能:各修正バージョンについて Maven Central を一度探し、取得できないものは注記する
  • 主張:Dependabot の盲点の件数、モジュール間の差異、uber jar に内含されるモジュール —— いずれも依然として成立していなければならない

公開前に別途 tools/recheck_before_publish.py があり、第二の独立した口径で根幹となる論拠を再検証する (生成スクリプトを import せず、その出力も読まない —— 同じ解析ロジックを再利用すればバグごと再現してしまうからだ)。

限界

  • 公式 security-reports ページ上の 26 件のみを対象とし、未公開またはサードパーティ統合の問題は含まない
  • バージョン区間は公式と GitHub から取得し、両者の口径に時に差異がある場合はモジュール座標上の構造化区間を優先する
  • 設定を解析しないため、条件付きの項目は自分で該当するか判断する必要がある
  • 判定表は生成時点のスナップショットであり、GitHub はいつでも unreviewed を reviewed に変えうる

English

shiro-check はビルド成果物(jar / war / fat jar / ディレクトリ)をスキャンして、実際に出荷している Apache Shiro のモジュールを特定し、正確なモジュール + バージョンの組み合わせに対して26 件の公式 CVE をすべて評価します。

存在理由:Shiro の CVE は「Shiro」ではなくモジュールに紐づきます。26 件のうち 13 件は shiro-core にまったく触れていません。このツールは CVE × モジュールの粒度(37 ルール、7 モジュール)で動作します。

座標ベースのマッチングでは見えない 3 つのこと:

  1. 5 件のエントリは Dependabot アラートに到達しない — 3 件のアドバイザリは依然として unreviewed で影響パッケージリストが空です。2 件は org.apache.shiro:shiro-root にのみ紐づいており、これは packaging=pom の親 POM で Maven Central に jar が存在しない(HTTP 404)ため、どのプロジェクトもこれに依存することはありません。
  2. shiro-all は uber jar — shiro-all-1.3.2.jar には 6 つの pom.properties エントリ(core、web、spring、ehcache、quartz + 自身)が含まれています。あなたの pom には 1 つの座標しか表示されませんが、jar には 3 モジュール分のコードが入っています。
  3. 3 件のアドバイザリは修正版として 3.0.0-alpha-2 を指す — これは Maven Central に公開されたことのないバージョンです。このツールはこれらをフラグし、実際にアップグレード可能なバージョンを提案します。

「ヒット」とはモジュールが存在し、かつバージョンが公式の影響範囲内にあることを意味します。悪用可能であることを意味するものではありません — ほとんどのエントリは特定の設定を必要とし、ツールはそれを公式アドバイザリから逐語的に列挙します。意図的にあなたの設定を解析することはありません。

java -jar shiro-check.jar [--all] [--utf8] <jar | war | directory> ...

JDK 17+ が必要です。実行時の依存関係はありません。ルールテーブルは2つの主要なソースから生成され、失敗時に中止する12個のアサーションがあります。tools/gen_rules.py を参照してください。

ライセンス

Apache License 2.0


さらに詳しい調査が必要ですか?

このツールが答えるのは「自分は該当したかどうか」です。以下はこのツールでは答えられないため、私にご依頼いただけます:

  • 依存関係が shade / relocate されている、またはビルド成果物がそもそも入手できない
  • 判定すべきなのは「この CVE が我々の呼び出しチェーン上で実際に発火するかどうか」であり、単なるバージョン一致ではない
  • 御社独自のビルドフローや社内環境に合わせたカスタマイズ、既存パイプラインへの組み込みが必要
  • 手元にあるのが別のコンポーネントの同種の問題で、既成のツールがない

📮 [email protected] —— 状況をお知らせください。24 時間以内に 1 ページの書面回答をお返しします: できるかどうか、どこが難しいか、おおよその所要時間。この段階は無料で、事前のコミットも不要です。

終了コード

コード意味
0スキャン完了、かつすべてのファイルを実際に読み込めた、対応が必要な検出結果なし
4読み込めないファイルがある —— zip でない、内容が切り詰められている、または読み取り失敗

🔴 4 は 2026-09-09 に追加されました。追加した理由は明確にしておく価値があります。 それ以前は、読み込めないファイルは出力に 1 行のヒントを残すだけで、終了コードは従来どおり 0 でした —— 記録は人間が見るものですが、CI やスクリプトが見るのは終了コードであり、 「私はそれを読めなかった」が自動化の中では「合格」と等しくなっていました。 破損した、暗号化された、またはダウンロードが不完全な jar は、静かに「問題は見つかりませんでした」に変わってしまいます。

「私はそれを読めない」と「あなたは安全だ」は別の文でなければなりません。

⚠️ 正当な空の jar は読み込めない扱いになりません(22 バイトの EOCD レコードは本物の空 zip です)、4 は発生しません —— 誤警告が増えると、本当の警告を誰も見なくなります。

その他の終了コードの意味は、上記の各判定段階と使い方の説明を参照してください。

ツールをダウンロード