0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude Codeで人生初のOSSを実質半日でリリースした話 ― (IDOR検出ツール IDOR-otaku)

0
Posted at

こんにちは!
機械工学を学びつつ、事業会社で学生エンジニアをしているRalian.ENGです!
今回は、IDORと呼ばれるアクセス制御不備の発見に焦点を当てたセキュリティOSS-IDOR-otaku(アイドルオタク)を、生成AIを使いながら実質半日でリリースしたエピソードをご紹介します!

1.背景

【結論】バグバウンティをする身として、IDOR脆弱性の追跡が面倒だったからです。以上!!

先日、Anthropic社からClaude Code Securityが発表され、開発者界隈を賑わせました。(参考: Investing.com)
コードの静的解析による脆弱性検知とパッチ提案を実行するツールとのことで、コードのセキュリティ品質向上へ期待が寄せられています。

一方で、Webアプリケーションの重大なセキュリティリスクトップ10をまとめたOWASP TOP10には、コードの静的解析で気づきづらい脆弱性も含まれています。

ID リスク
A01:2025 アクセス制御の不備(Broken Access Control
A02:2025 セキュリティの設定ミス(Security Misconfiguration
A03:2025 ソフトウェアサプライチェーンの不備(Software Supply Chain Failures

OWASPより引用
残り7つについては、OWASP TOP10のプロジェクトページをご覧ください。

特に、「A01:2025 アクセス制御不備」はシステムロジックの問題であり、バグバウンティをする身としては、ここに着目することが多くあります。
その中でも、IDOR脆弱性 (Insecure Direct Object Reference)は、本来アクセス権限のない情報にアクセスできてしまう脆弱性を指し、単純な検証で大きな影響を及ぼします。

例えば、GET /invoice/download?id=5542という請求書の取得処理に対し、

SELECT file_path, amount, customer_name
FROM invoices
WHERE id = 5542;

というSQLを投げてしまうケースです。
GETのクエリパラメータのidが連番であった場合、id=5543を指定すると他ユーザーの情報を正規にリクエストできてしまいます。

本来は、

SELECT file_path, amount, customer_name
FROM invoices 
WHERE 
  id = 5542
  AND user_id = 'sampleuser1';

このように、リクエストユーザーを限定するWHERE句を設定する必要があります。
悲しいかな、我々人間は絶対に必要と認識していても忘れてしまうことがあり、攻撃者はここを狙ってきます。

しかしながら、この脆弱性を見つけるのにも一苦労があり、大量の通信をモニタリングしつつ、疑いのあるパラメータのアテを付けていく必要があります。
そこで、IDORの疑いのある (or IDORができそうな)リクエストを自動抽出し、レポートしてくれるツールを作ることにしました。

2.IDOR検出ツールは意外と少ない

IDORはOWASP TOP10の「A01:2025 アクセス制御の不備」に含まれていますが、検出ツールは多くありません。

メジャーなところでは、次のツールがあります。

ツール 形態 できること
Autorize Burp拡張機能 セッションを低権限に差し替えて全リクエストをリプレイ
AuthMatrix Burp拡張機能 ロール×エンドポイントのマトリクスで権限をテスト
ZAP Access Control 独立ツール ルールベースの認可テスト
Nuclei 独立ツール テンプレートベースのスキャナ

どれもIDORの検出はできますが、「そもそもどのID(パラメータ)を狙うべきなのか」という偵察部分を手作業に頼る必要があります。

3.偵察ツールとしてのIDOR-otaku

IDOR-otaku (idotaku) は、既存ツールの「検証」フェーズに対し、「偵察」機能を提供してIDのライフサイクルの追跡と攻撃面のマッピングを実行します。
つまり、各ID (パラメータ) がどこで生まれ、どこで使われるか、出どころ不明のIDがないかを偵察するツールです。

まさに、アイドルを追いかけるかの如く、IDORを追跡していくコンセプトとなっています。

IDOR-otakuの検出フローは次の通りです。

  1. 通信からID(UUID、連番、トークン等)をパターン検出
  2. IDのライフサイクル (発生と使用)を追跡
  3. チェーン図やシーケンス図で攻撃面を可視化
  4. サーバーから返却されていないIDの検出やスコアリングで候補を絞り込み

つまり、通信に登場する全てのIDを追跡・可視化して攻撃面をマッピングし、怪しいものを絞り込む手段を提供するツールとなります。

ツールの構成もシンプルで、ブラウザを中間プロキシして通信を取得し、そのデータを解析する仕様です。
今回は、mitmproxyのアドオンとして開発しました。

アーキテクチャ図

また、PyPIで公開していますので、

pip install idotaku

で環境内にインストール可能です。

4.機能お品書き

2026.2.23時点のv1.0.0では14コマンドを提供しています。

主要機能として、report (検出レポートサマリ)、score (リスクスコアリング)、chain --html (パラメータチェーンのHTMLレポート)、sequence --html (APIシーケンス図のHTMLレポート) が実装されています。

リスクスコアリング

idotaku score 解析対象のレポートファイル名.json

image.png

パラメータチェーン (HTMLレポート)

idotaku chain 解析対象のレポートファイル名.json --html 出力ファイル名.html

image.png

APIシーケンス図 (HTMLレポート)

idotaku sequence 解析対象のレポートファイル名.json --html 出力ファイル名.html

image.png

また、

  • verifyコマンドで候補からパラメータを差し替え、レスポンスを比較
  • diffコマンドで2つのレポートを比較
  • SARIFを使ったGitHub Code Scanning機能との連携

などの機能も備えています。
詳しくは、QUICKSTART.mdをご覧ください。

5.なぜ「実質半日」でリリースできたか

答えは単純。Claude Code君のおかげです。
2026.2.23の最新リリース(v1.0.0) までのタイムラインを見てみます。

日付 時間帯 commits マイルストーン
1/26 02:27 1 initial commit
2/3 00:50 - 01:59 8 CLI分割, テスト(72%), interactive
2/5 01:47 - 02:28 9 score, HAR, SARIF等 一気追加
2/9 21:39 - 23:51 7 CI, mypy, PyPI → v0.1.0
2/10 00:42 - 02:42 7 config, banner → v0.2.0
2/16 01:03 - 03:06 12 verify, デモ → v0.3.0
2/23 17:21 - 19:22 6 strict mypy, E2E → v1.0.0

はい、深夜の作業が多いみたいです。(笑)
プロジェクトを始めてから主要機能の実装、PyPIでの公開準備までで約9時間でした。(初回コミットの手前は2時間程度です)
v0.1.0では、

  • ソースファイル: 44ファイル
  • テストファイル: 17ファイル
  • テストカバレッジ: 77%

と、なかなかいい具合のリリースとなりました。
現在(2026.2.23)はv1.0.0が公開されており、v0.1.0から約6時間で次の状況となっています。

  • ソースファイル: 52ファイル (+8)
  • テストファイル: 30ファイル (+13)
  • テストカバレッジ: 96% (+19%)

Claude Codeの使いどころですが、コーディングとテストの作成全てを任せました。
一方で、人間が出す指示として、

  1. 何がゴールか (機能として何が達成されるべきか)
  2. 必須条件は何か (検出率、動作速度、出力形式など)
  3. その機能を実装したい理由

これらを必ず記載していました。
やっていること自体は、ほぼプロダクト開発です(笑)
技術が分かるPdMのような立ち回りだったと思います。

生成AIがない時代では考えられないクオリティであり、Claude Code Securityとは違う方向性(静的解析では見つからない脆弱性を半日で検出ツール化できてしまう点)で危機感を感じます。

6.これからも機能拡張を頑張ります

ということで、この記事ではIDOR-otakuの開発背景と概要のご紹介をしてきました。
まだ、認知が拡大していないツールですが、多くの方にご利用頂くことでツールとしての練度を上げていければと考えています。

近いうちのリリースで、GraphQLやWebsocketへの対応を検討しています。
希望の機能があれば、是非、IssuesDiscussionsでご連絡ください!

ぜひ、インストールしてご利用ください!

pip install idotaku

IDOR-otaku リポジトリ
idotaku PyPI

【免責事項】
本ツールは許可されたセキュリティテストおよび教育目的でのみ使用してください。
所有していないシステムをテストする際は、適切な許可を得る必要があります。
本ツールの誤用または損害について、作者は一切の責任を負いません。
すべての適用法令を遵守のうえ、自己責任でご利用ください。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?