Exploiting Livewire: CVE-2024-47823 Puts Laravel Apps at Risk
2024/10/09 SecurityOnline — Laravel のフルスタック・フレームワークである Livewire は、動的な UI コンポーネントを PHP を離れることなく構築することで人気を博しているが、新たに脆弱性 CVE-2024-47823 (CVSS:7.7) の存在が判明している。この脆弱性の悪用に成功した攻撃者は、ファイルのアップロードを介することで、影響を受けるシステム上でリモート・コード実行 (RCE) を達成できる。Laravel とシームレスに統合される Livewire は、動的なユーザー・インターフェイスの開発を簡素化するものだ。ただし、この利便性と引き換えに、Livewire のバージョイン v3.5.2 未満では、ファイルのアップロード処理に起因する問題により、深刻な懸念が引き起こされている。

これらの脆弱なバージョンにおいては、アップロードされたファイルのファイル拡張子は、実際のファイル拡張子を検証するのではなく、MIME タイプに基づいて推測されている。つまり、攻撃者は、image/png などの有効な MIME タイプのファイルをアップロードできるが、その際に “.php” などの危険なファイル拡張子も使用できてしまう。システムの Web サーバが、PHP ファイルを実行するようにコンフィグされている場合には、この抜け穴を突くことでリモート・コード実行が可能になってしまう。
この欠陥を報告した、セキュリティ研究者である Jeremy Angele は、攻撃者が特定の条件下において、Livewire の脆弱性を悪用する PoC について、以下のように説明している。
- $file->getClientOriginalName() を使用して、元のファイル名を推測して、悪意を取り込んだファイルが構築される。
- このファイルはサーバのパブリック・ストレージ・ディスクに直接に保存される。
https://static.btloader.com/safeFrame.html?upapi=trueAD - Web サーバは「.php」ファイルを実行するように構成されている。
Angele の PoC シナリオでは、MIME タイプが image/png である shell.php という名前のファイルを、攻撃者がアップロードする方法が実証されている。この悪意のファイルのアップロードに成功した攻撃者は、そのファイルに Web ブラウザー経由でアクセスし、実行をトリガーすることで、サーバへのリモートアクセスを取得できる。
class SomeComponent extends Component
{
use WithFileUploads;
#[Validate('image|extensions:png')]
public $file;
public function save()
{
$this->validate();
$this->file->storeAs(
path: 'images',
name: $this->file->getClientOriginalName(),
options: ['disk' => 'public'],
);
}
}
すでに、この脆弱性 CVE-2024-47823 は、Livewire バージョン 3.5.2 で修正されている。この修正には、アップロード時のファイル拡張子の厳格な検証が含まれており、MIME タイプと拡張子が一致しないファイルはブロックされる。
Livewire の最新バージョンへと、ただちにアップデートし、システムを保護することが重要である。開発者に対して推奨されるのは、パブリック・ディレクトリでの PHP 実行を阻止すると同時に、ファイルのアップロード時に MIME タイプとファイル拡張子を徹底的に検証するよう、Web サーバをコンフィグすることである。
このところ、Laravel 関連の脆弱性に関する記事が目につきます。あらゆる局面で利用される PHP に、大きな影響を及ぼすものであり、注意が必要です。関連情報として、CVE-2024-47186 の「Filament の XSS 脆弱性 CVE-2024-47186 が FIX:直ちにアップデートを!」もありますので、Laravel で検索と併せて、ご参照ください。
You must be logged in to post a comment.