【りもーとふぁいるいんくるーじょん】
リモートファイルインクルージョン とは?
最終更新:
💡 取り込み口の不備から、外部のファイルが紛れ込む
ファイル取り込み処理の入力検証の不備を突き、攻撃者が外部のファイルをアプリに取り込ませる脆弱性。コード実行につながるかは、取り込んだ内容や実行環境によって変わります。
📌 このページのポイント
リモートファイルインクルージョンって何なの?
URLを入力する欄があったら危ないの?
欄があるだけでは決まらないよ。その入力が不適切に取り込み先へ使われ、実行環境も外部ファイルの取り込みを許していることが前提なんだ。
外部のファイルを取り込むと、必ずプログラムが動くの?
RCEやディレクトリトラバーサルと同じなの?
RCEは遠隔からコードを実行できるという結果だよ。この取り込みの不備が原因になる場合もあるんだ。ディレクトリトラバーサルはパス操作で意図した範囲の外へアクセスすることで、外部ファイルの取り込みとは別の着眼点だね。
取り込むファイルを選ぶ機能はどう作ればいいの?
利用者の入力をそのままパスへ渡さない設計にしよう。たとえば許可済みの2種類を番号1・2に対応づけ、一覧にない番号は拒否するんだ。番号からファイルへの対応はアプリ側で管理するよ。
もっと詳しく知りたい人へ
外部サーバーがPHPを実行した結果でも、取り込み側で再び実行されるの?
取り込み側が受け取るのは外部サーバーの応答です。PHPのincludeではその応答が取り込み側でも処理されるため、応答中に有効なPHPコードがあれば評価され得ます。外部サーバーのソースコードを必ずそのまま受け取るわけではありません。URL経由の取り込みには、対応するURLラッパーが有効という前提もあります。
PHPではURLを読み込める設定ならincludeにも使える?
allow_url_fopenとallow_url_includeは別の設定です。URL経由でincludeやrequireを行う設定には、allow_url_fopenも必要になります。allow_url_includeの既定値は無効で、PHP 7.4以降は非推奨です。設定を無効にすることに加え、入力を直接ファイルパスへ渡さない設計も必要です。
まとめ:ざっくりこれだけ覚えればOK!
「リモートファイルインクルージョン」って出てきたら「取り込み処理の不備で、外部のファイルを紛れ込ませる脆弱性」と思えばだいたいOK!
📖 おまけ:英語の意味
「Remote File Inclusion」 = 遠隔にあるファイルの取り込み
💬 Remoteは遠隔、Inclusionは取り込むことだよ。セキュリティでは、外部ファイルを取り込ませる脆弱性を指すんだよ。