Laravel アプリのリスク:Livewire の REC 脆弱性 CVE-2024-47823 と PoC

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 サーバをコンフィグすることである。