
StrapiインスタンスがCVE-2026-27886(認証なしのブール型オラクルによる管理者シークレットの不正流出)に対して脆弱かどうかを検出します。
完全なアカウント乗っ取りチェーンを実行することなく、Strapi インスタンスが CVE-2026-27886 に対して脆弱かどうかを安全に検出します。Bishop Fox ブログの完全な記事を参照してください。
CVE-2026-27886 は、Strapi バージョン 4.0.0 から 5.36.1 における、認証されていないパラメータサニタイゼーションのバイパスです。これにより、リモートの未認証攻撃者がパブリック Content API を通じて管理者の秘密情報を漏洩させることができます。フレームワークの @strapi/utils 内のクエリサニタイザは、文書化された filters、sort、fields、populate クエリキーのみを処理し、リクエスト内のその他のトップレベルキーをすべて静かに保持します。未知のキーは transformQueryParams を通じて転送され、SQL の WHERE 句として strapi.db.query(...) に到達します。任意のパブリック Content API コレクションに対して where[updatedBy][resetPasswordToken][$startsWith]=<prefix> をプローブすることで、攻撃者は応答の meta.pagination.total フィールドを通じて管理者の秘密情報を 1 文字ずつ漏洩させることができます。
このツールは、以下の方法で非破壊的な脆弱性テストを実行します。
GET /api/<collection> を送信GET に ?where[id][$lt]=-1 を追加して送信meta.pagination.total 値を比較し、where 句がデータベース層に到達したかどうかを判定where[id][$lt]=-1 の述語は実際の行には一致しないため、データベース層で句が尊重されると、応答はゼロ行に縮小します。パッチが適用されている場合、未知の where キーはクエリが構築される前にサニタイザの許可リストによって削除され、応答はベースラインと同じになります。このプローブはプライベート管理者カラムに触れることはなく、データを変更することもありません。
where 句がデータベース層で尊重されたためです。sanitizeQuery が認識されないトップレベルキーをデータベースに到達する前に削除するためです。INCONCLUSIVE 結果を報告します。脆弱なサーバでは、ツールは where[updatedBy][email][$startsWith]=<prefix> を使用して管理者のメールアドレスを 1 文字ずつ列挙します。管理者アカウントの乗っ取りにはチェーンしません。
git clone https://github.com/BishopFox/CVE-2026-27886-check
cd CVE-2026-27886-check
外部依存関係はありません。スキャナは Python 標準ライブラリモジュールのみを使用します。
Strapi サーバのパブリック Content API コレクションエンドポイントをテストします。Strapi はコンテンツタイプの pluralName を URL パスにマッピングするため、正確な名前はデプロイメントによって異なります。
python3 CVE-2026-27886-check.py <ENDPOINT>
$ python3 CVE-2026-27886-check.py http://target.example.com/api/articles
[+] Target: http://target.example.com/api/articles
[+] Differential confirmed: baseline total=1, where-test total=0 -> VULNERABLE
[+] Enumerating admin email
admin email = [email protected]
[+] Done. To remediate, upgrade to Strapi 5.37.0 or later.
$ python3 CVE-2026-27886-check.py http://target.example.com/api/articles
[+] Target: http://target.example.com/api/articles
[+] Differential check: baseline total=1, where-test total=1 -> NOT VULNERABLE
このツールは、以下の条件が満たされている場合にのみ脆弱性を検出できます。
find を許可されているupdated_by_id があるいずれかの条件が満たされない場合、ツールは INCONCLUSIVE 結果を報告します。
このコードは MIT ライセンス の下で配布されています。
事前の相互同意なしにターゲットを攻撃するためのこのツールの使用は違法です。適用されるすべての地方、州、連邦法に従うことはエンドユーザーの責任です。開発者は一切の責任を負わず、このプログラムによって引き起こされた誤用や損害について責任を負いません。