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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
cakephp-trusted-proxies — CakePHP 5.4.2 - 高 - リモート - プロキシ - trustedProxies が任意の REMOTE_ADDR からの X-Forwarded-* を信頼する | Kitploit
ツール/GitHubGitHub/abraxas/cakephp-trusted-proxies
脆弱性分析エクスプロイトウェブアプリケーション悪用セキュリティ仮想化ウェブセキュリティペネトレーションテスト
GitHubabraxas/cakephp-trusted-proxies

cakephp-trusted-proxies

CakePHP 5.4.2 - 高 - リモート - プロキシ - trustedProxies が任意の REMOTE_ADDR からの X-Forwarded-* を信頼する

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

人気

すべて見る →

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

すべてのツールを探索

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

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

Abraxas Labs - cakephp-trusted-proxies

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

解説記事: https://abraxaslabs.tech/research/cakephp-trusted-proxies

cakephp-trusted-proxies

分類: HTTPS リダイレクトバイパス / IP・ホスト偽装 到達範囲: リモート

CakePHP 5.4.2 (887b641) - Cake Software Foundation

trustedProxies => ['10.0.0.1'] を指定した HttpsEnforcerMiddleware は setTrustedProxies を呼び出し、これが trustProxy = true を設定するものの、そのリストを REMOTE_ADDR と比較することは一切ない。その結果、scheme()、host()、clientIp() は攻撃者の X-Forwarded-Proto / X-Forwarded-For / X-Forwarded-Host / X-Real-IP を信用してしまう。

デフォルトのミドルウェアは trustedProxies が null であり、この問題は有効化されない。 ドキュメントに記載されたロードバランサ構成が、この脆弱性に晒されるケースである。リストに記載されたプロキシではない未認証の HTTP クライアントが、HTTPS リダイレクトを回避し、クライアント IP と Host を偽装できる。

IDCVE 未採番
分類HTTPS リダイレクトバイパス / IP・ホスト偽装
到達範囲リモート(未認証の HTTP。アプリが trustedProxies を設定している場合)
CWECWE-441, CWE-346
CVSSHigh: 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:H/A:N
製品CakePHP
影響を受けるバージョン5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63)
認証不要。アプリが HttpsEnforcerMiddleware の trustedProxies を設定している場合
ライセンスGNU Affero GPL v3.0
ラボ127.0.0.1 のみ

攻撃者ができること

trustedProxies を有効化したアプリ(典型的なリバースプロキシでの HTTPS 強制)が必要である。リストに記載されたプロキシ IP から接続する必要はない。

権限メソッド / シンクラボで実証済みか推測か
HTTPS リダイレクト / HSTS パスを回避X-Forwarded-Proto: https を付けた HTTP の GET /ラボで実証済み。200、scheme=https、JSON 内に証跡
clientIp() を偽装X-Forwarded-For: 203.0.113.50ラボで実証済み。client_ip=203.0.113.50
host() を偽装X-Forwarded-Host: spoof.invalidラボで実証済み。host=spoof.invalid
X-Real-IP 経由で偽装X-Real-IP: 198.51.100.9ラボで実証済み。client_ip=198.51.100.9
clientIp() をキーとする IP ACL / レート制限をバイパス同じ偽装推測。RateLimitMiddleware のデフォルト remote_addr はこのバグではない
ネガティブコントロール/control(trustedProxies なし)で同じ転送ヘッダーラボで実証済み。依然として https へ 301

この残存点については結論済み: デフォルトは trustedProxies => null であり、ラボでは REMOTE_ADDR 自体が依然として Docker ブリッジ IP(192.168.208.1 であり、リストに記載された 10.0.0.1 ではない)。RCE ではない。クッキージャーのバグでもない。

発見の経緯

cakephp/cakephp 5.4.2 を固定した。ServerRequest::setTrustedProxies():

public function setTrustedProxies(array $proxies): void
{
    $this->trustedProxies = $proxies;
    $this->trustProxy = true;
    $this->uri = $this->uri->withScheme($this->scheme());
}

HttpsEnforcerMiddleware は trustedProxies が非 null のときは常にこれを呼び出します。リストされた IP は後で XFF チェーンに対する array_diff として使用され、接続元ピアのチェックとしては使われません。

すでに記録されている誤った解釈:デフォルトのミドルウェアをこの残存物とみなすこと(実際はそうではない);RateLimitMiddleware の x-forwarded-for を同じバグと呼ぶこと(5.4.1 の bakery はすでにそのデフォルトを remote_addr に移している);REMOTE_ADDR 自体がスプーフィングされたと主張すること。茶番:リバースシェル。

ラボ

python3 cakephp-trusted-proxies-Abraxas-Labs.py

または

cd lab
./run.sh

Composer cakephp/cakephp 5.4.2 を PHP 8.3 で使用。小さなアプリ: / は trustedProxies => ['10.0.0.1'] を使用し、/control は使用しない。127.0.0.1:19430 でのループバック HTTP。

  1. 転送ヘッダーなしで GET / -> 301 https。
  2. proto/for/host/real-ip 付きで GET /control -> 301 https。
  3. X-Forwarded-Proto: https 付きで GET / -> 200、スキーム https、trust_proxy=true、REMOTE_ADDR は 10.0.0.1 ではない。
  4. XFF + Host 付きで GET / -> client_ip=203.0.113.50、host=spoof.invalid。
  5. X-Real-IP 付きで GET / -> client_ip=198.51.100.9。
SUCCESS cakephp-trusted-proxies pin=5.4.2 how=app remote-addr=192.168.208.1 listed-proxy=10.0.0.1 proto-bypass=200 control-redirect=301 client-ip=203.0.113.50 host=spoof.invalid x-real-ip=198.51.100.9 CAKEPHP-TRUSTED-PROXIES-WITNESS

修正

REMOTE_ADDR が信頼済みプロキシのリストに含まれている場合にのみ、転送ヘッダーを尊重します(Symfony の isFromTrustedProxy())。空のリストでは信頼を有効にしてはなりません。

参考資料

  • github.com/cakephp/cakephp タグ 5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63)
  • src/Http/ServerRequest.php · src/Http/Middleware/HttpsEnforcerMiddleware.php
  • CWE-441 · CWE-346

ライセンス

GNU Affero GPL v3.0。LICENSE を参照してください。ループバックラボ専用です。保証はありません。

ツールをダウンロード