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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
cakephp-cookie-suffix — CakePHP 5.4.2 - 高 - リモート - Cookie - Http Client の cookie jar がドメインを正規表現のサフィックスとしてマッチングする | Kitploit
ツール/GitHubGitHub/abraxas/cakephp-cookie-suffix
脆弱性分析エクスプロイトウェブアプリケーション悪用情報収集ウェブセキュリティ論文と研究
GitHubabraxas/cakephp-cookie-suffix

cakephp-cookie-suffix

CakePHP 5.4.2 - 高 - リモート - Cookie - Http Client の cookie jar がドメインを正規表現のサフィックスとしてマッチングする

リポジトリを見る
209日前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

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

Abraxas Labs - cakephp-cookie-suffix

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  cakephp-cookie-suffix

解説記事: https://abraxaslabs.tech/research/cakephp-cookie-suffix

cakephp-cookie-suffix

分類: Cookie リーク / 植え付け 到達範囲: リモート

CakePHP 5.4.2 (887b641) - Cake Software Foundation

CookieCollection::findMatchingCookies は preg_match('/' . preg_quote($domain) . '$/', $host) を使用しています。これは文字列のサフィックス一致であり、RFC 6265 のドメインマッチではありません。api.partner.com 用の Cookie が evilapi.partner.com に送信されます。bank.com 用の Cookie が notbank.com に送信されます。

Cookie::createFromHeaderString() もまた、レスポンスのホストに対するチェックなしで Set-Cookie の Domain= をコピーします。attacker.test からの addFromResponse で Domain=victim.internal を指定すると、その Cookie が保存され、後に victim.internal に付与されます。

複数のホストにまたがってデフォルトの jar と共に Cake\Http\Client を使用するアプリは、パートナーのセッション Cookie をサフィックス混同した兄弟ホストにリークしたり、攻撃者の URL を取得した後に内部ホストへ Cookie を植え付けたりする可能性があります。 other.com はマッチしません。これはブラウザの Cookie のバグではありません。素の cakephp/app はそれ自体で別のホストを呼び出すことはありません。

IDCVE 未割当
分類Cookie リーク / 植え付け (正規表現サフィックスによるドメインマッチ)
到達範囲リモート (アプリがホストをまたいで Http Client の jar を使用)
CWECWE-565, CWE-201
CVSSHigh: 8.2 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:L/A:N
製品CakePHP
影響を受けるバージョン5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63)
認証アプリがホストをまたいでデフォルトの Cookie jar と共に Cake\Http\Client を使用
ライセンスGNU Affero GPL v3.0
ラボ127.0.0.1 のみ

攻撃者ができること

複数のホストにまたがって Cake\Http\Client の Cookie を保持するアプリケーションが必要です (OAuth、Webhook、ユーザー指定の URL、2 つ目の API など)。

権限メソッド / シンクラボで実証済みか推測か
保存された Cookie をサフィックス混同した兄弟ホストへリークするドメイン api.partner.com の Cookie の後、https://evilapi.partner.com/ に対して CookieCollection::addToRequestラボで実証済み。リクエストの Cookie は sid=SECRET。RFC 6265 ではマッチしない
登録可能なサフィックスに対する同様のリークCookie ドメイン bank.com、リクエストホスト notbank.comラボで実証済み。リクエストの Cookie は sid=SECRET
ネガティブコントロールリクエストホスト other.comラボで実証済み。Cookie ヘッダーなし
内部ホスト用の Cookie を植え付けるhttps://attacker.test/ からの Set-Cookie: sid=x; Domain=victim.internal に対する addFromResponseラボで実証済み。保存されるドメインは victim.internal。そのホストへの次のリクエストで sid=x が送信される
次回の Client 呼び出しでのセッション固定 / 盗まれたパートナーセッション植え付けられた、またはリークされた sid を API セッションとして使用推測。ラボは Cookie ヘッダーのオラクルまでで停止
同一ホストへの送信は引き続き機能するCookie ドメイン api.partner.com からホスト api.partner.com へラボで実証済み。想定どおりであり、バグではない

この残存項目についてはクローズ済み: other.com はマッチしません。ブラウザの Cookie jar はこのバグではありません。シェルはありません。スケルトンアプリに対する未認証 RCE ではありません。

発見の経緯

GHSA-2qh5、GHSA-fxf7、GHSA-vjqc、および 5.4.2 の filename= に関する注記の後、cakephp/cakephp 5.4.2 を固定しました。Http Client の Cookie マッチングは正規表現サフィックスです:

$pattern = '/' . preg_quote($domain, '/') . '$/';
if (!preg_match($pattern, $host)) {
    continue;
}

addFromResponse はリクエストのホストをデフォルトとしてのみ渡します。Set-Cookie の Domain= 属性はそれを上書きして保存されます。

すでに記録済みの誤った方向性: これをブラウザの Cookie バグとして扱うこと; other.com も一致すると主張すること; ホストをまたいで jar を使用するアプリがないのに Cookie ヘッダーオラクルを ATO に誇張すること。見せかけ: リバースシェル。

ラボ

python3 cakephp-cookie-suffix-Abraxas-Labs.py

または

cd lab
./run.sh

Git clone タグ 5.4.2(887b641de9f7aba06071f98f17edcbc573cbcf63)を PHP 8.3 で実行。ループバック oracle HTTP は 127.0.0.1:19420。追加の HTTP オリジンは不要。oracle はピンから CookieCollection を実行する。

  1. sid=SECRET ドメイン api.partner.com を追加。addToRequest https://evilapi.partner.com/ -> Cookie: sid=SECRET。
  2. 制御 https://other.com/ -> Cookie ヘッダーなし。
  3. 同一ホスト https://api.partner.com/ は依然として sid=SECRET を送信。
  4. 追加サフィックス bank.com -> https://notbank.com/ は sid=SECRET を送信。
  5. https://attacker.test/ からの addFromResponse で Set-Cookie: sid=x; Domain=victim.internal; Path=/。次の https://victim.internal/ は sid=x を送信。
SUCCESS cakephp-cookie-suffix suffix-leak=yes control-other=yes plant-domain=yes how=cakephp-5.4.2 CAKEPHP-COOKIE-SUFFIX-WITNESS

修正

RFC 6265 のドメインマッチ(host === domain || str_ends_with($host, '.' . $domain))。Domain が省略された場合はホストオンリー Cookie とする。リクエストホストにドメインマッチしない Domain は拒否する。パブリックサフィックスは拒否する。

参考資料

  • github.com/cakephp/cakephp タグ 5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63)
  • src/Http/Cookie/CookieCollection.php · src/Http/Cookie/Cookie.php
  • RFC 6265 domain-match
  • CWE-565 · CWE-201

ライセンス

GNU Affero GPL v3.0。LICENSE を参照。ループバックラボ専用。保証なし。

ツールをダウンロード