laravelの脆弱性がAPTで使用されているようであり、ハニーポットでも攻撃を観測しているとのことでした。
どのような脆弱性なのかを検証してみようと思います。
※この記事で知り得たことを悪用することは禁止とします。
Laravelとは?
PHPのフレームワークです。
今回の脆弱性はLaravelで使用されている「ignition」との組み合わせ脆弱性となります。
ignitionとは?
laravelで使用されている、エラーページ用のOSSです。
脆弱なバージョン
laravel8.4.2以下かつignition 2.5.1以下
脆弱性について
laravel8.4.2以下かつignition 2.5.1以下の場合に、リモートから認証なしでOSコマンド実行が可能です。
対策
- laravelのバージョンアップ(8.4.3以上)
- ignitionのバージョンアップ(2.5.2以上)
緩和策
- デバッグモードを無効にする。
- ログファイルを規定の場所に置かない、規定のファイル名から変える。
(ログファイルにコマンド実行するための文字を書き込むため、ファイル名がわからないとどうしようもない)
再現
修正前
1.環境確認
脆弱性があるignition2.5.1を使用します。

2.起動確認
起動はしました。

3.脆弱性使用
詳細は伏せていますが、攻撃コードを使用することでOSコマンドの実行ができています。

修正後(ignition)
1.環境確認
修正されたignition2.5.2を使用します。

2.脆弱性使用
脆弱性を悪用しようとしても、ただ200応答が返るだけでコマンド実行ができませんでした。
ログファイルをどうこうしてコマンド実行するのですが、ログファイルにも書き込みはありませんでした。
修正後(laravel 8.4.3以上)
詳細を伏せざるを得ないので、説明が全くできませんが、成功時は「200」応答だったリクエストが「500」応答になっていました。
デバッグモード無効時
デバッグモードを無効にすると、404となり悪用できなくなります。
この脆弱性から得られること
ignitionの修正点
2.5.1と2.5.2の差異
src/Solutions/MakeViewVariableOptionalSolution.php
本来は「.blade.php」と最後についたファイルを修正するのが正しい目的です。
デバッグモードでのみ有効なため、簡単な修正を自動的に実施してくれるツールです。
そのため、修正する対象は「.blade.php」が最後につくファイルのみです。
また、ファイルが対象となるため、「php://」や「phar://」といったスキーマも受け付けなくなりました。
laravelの修正点
8.4.2と8.4.3の差異
config/broadcasting.php
config/cache.php
全くわかりませんでした。
わかる方いらっしゃったら教えてください。
攻撃側として
- デバッグモードになっている際はその時だけ使える機能を気にする
- OSSの場合はソースコードを確認する
- OSSの場合はローカルで検証する
防御側として
- デバッグモードのまま公開しない
- 取り扱う対象が明確な場合は厳密なチェックを行う
参考
発表記事

おわりに
以下記事を見つけて検証してみようと思いました。

一般ユーザにも悪用事例が出ているので、速攻アップデート・緩和策実施を推奨します。
実際どんなpocを実行して、どんなリクエストが送信されたかなどは把握していますので、興味ありましたら私までご連絡ください。
参加はこちら!
コメント