Laravel(ignition)の脆弱性「CVE-2021-3129」再現と分析と注意喚起

IT

laravelの脆弱性がAPTで使用されているようであり、ハニーポットでも攻撃を観測しているとのことでした。

どのような脆弱性なのかを検証してみようと思います。

※この記事で知り得たことを悪用することは禁止とします。

Laravelとは?

PHPのフレームワークです。 

Laravel - ウェブ職人のためのPHPフレームワーク
Laravel - ウェブ職人のためのPHPフレームワーク

今回の脆弱性はLaravelで使用されている「ignition」との組み合わせ脆弱性となります。

ignitionとは?

laravelで使用されている、エラーページ用のOSSです。

GitHub - facade/ignition: A beautiful error page for Laravel apps
A beautiful error page for Laravel apps. Contribute to facade/ignition development by creating an account on GitHub.

脆弱なバージョン

laravel8.4.2以下かつignition 2.5.1以下

脆弱性について

laravel8.4.2以下かつignition 2.5.1以下の場合に、リモートから認証なしでOSコマンド実行が可能です。

CVE - CVE-2021-3129
The mission of the CVE® Program is to identify, define, and catalog publicly disclosed cybersecurity vulnerabilities.

対策

  • 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 

Comparing main...2.5.1& · facade/ignition
A beautiful error page for Laravel apps. Contribute to facade/ignition development by creating an account on GitHub.

本来は「.blade.php」と最後についたファイルを修正するのが正しい目的です。

デバッグモードでのみ有効なため、簡単な修正を自動的に実施してくれるツールです。

そのため、修正する対象は「.blade.php」が最後につくファイルのみです。

また、ファイルが対象となるため、「php://」や「phar://」といったスキーマも受け付けなくなりました。

laravelの修正点

8.4.2と8.4.3の差異
config/broadcasting.php
config/cache.php 

Comparing 10.x...v8.4.2& · laravel/laravel
Laravel is a web application framework with expressive, elegant syntax. We’ve already laid the foundation for your next big idea — freeing you to create without...

全くわかりませんでした。
わかる方いらっしゃったら教えてください。

攻撃側として

  • デバッグモードになっている際はその時だけ使える機能を気にする
  • OSSの場合はソースコードを確認する
  • OSSの場合はローカルで検証する

防御側として

  • デバッグモードのまま公開しない
  • 取り扱う対象が明確な場合は厳密なチェックを行う

参考

発表記事 

Laravel
Ambionics Security team discovered an RCE in Laravel, when the framework is in debug mode.

おわりに

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

laravelのヤバい脆弱性をついたkinsing(kdevtmpfsi)というマルウェアに感染した話 CVE-2021-3129 - Qiita
webサーバー上でlaravelを動かしていれば、ちょっとした設定のミスで誰でもマルウェアに感染する可能性がある激ヤバセキュリティホール(CVE-2021-3129)が2021年1月20日に報告されています! composerでイ...

一般ユーザにも悪用事例が出ているので、速攻アップデート・緩和策実施を推奨します。

実際どんなpocを実行して、どんなリクエストが送信されたかなどは把握していますので、興味ありましたら私までご連絡ください。

参加はこちら!

コメント

タイトルとURLをコピーしました