WordPress GiveWP の脆弱性 CVE-2024-5932 (CVSS 10.0) が FIX:10万以上のサイトが危険な状態に!

Critical Flaw in Donation Plugin Exposed 100,000 WordPress Sites to Takeover

2024/08/20 SecurityWeek — WordPress の GiveWP plugin に存在する、致命的な脆弱性 CVE-2024-5932 (CVSS:10.0) により、10万以上の Web サイトがリモート・コード実行と任意のファイル削除攻撃にさらされていると、WordPress のセキュリティ会社 Defiant が警告している。この脆弱性は、give_title パラメータからの信頼できない入力のデシリアライズを介した、PHP オブジェクト・インジェクションとして説明されている。


WordPress のセキュリティ強化プラグイン Wordfence の開発元である Defiant は、「脆弱性 CVE-2024-5932 により、認証されていない攻撃者が PHP オブジェクトを注入することが可能となる。さらに POP (Property Oriented Programming) チェーンの存在により、攻撃者対してリモート・コードを実行や、任意のファイル削除などが許されてしまう」と説明している。

PHP は複雑なデータを格納するためにシリアライズを使用するが、シリアライズされたデータは、PHP オブジェクトの格納にも利用できる。一般的なプラグインにおいて、ユーザーから与えられたデータをサニタイズせずにデシリアライズする際に、攻撃者による PHP オブジェクト・ペイロードの注入が可能になるが、マジック・メソッドが使用されない限り、それらは危険ではない。

マジック・メソッドとは、特定のオペレーションにおいて振る舞いを定義する、特別な関数のことである。したがって、細工された PHP オブジェクトにより、これらの関数が悪用され、サイトの乗っ取りにまでつながる可能性が生じる。このようなケースが、10万以上のアクティブなインストールを持つ、きわめて人気の高い GiveWP plugin で発生している。

GiveWP は、寄付や募金の機能を、WordPress サイトに実装するためのプラグインである。GiveWP からユーザーに提供されるのは、カスタマイズ可能な寄付フォームや、寄付者とレポートの管理などの幅広い機能である。

その寄付を処理する関数は、投稿データのバリデーションが行われ、シリアライズされた値の有無もチェックされるが、give_title ポスト・パラメータは含まれていない。

このバリデーション処理が完了すると、提供された情報を保存するために追加の関数が呼び出される。その中には、give_title ポスト・パラメータに基づく、ユーザー・タイトルなどのユーザー情報を収集する関数も含まれる。

その後に、支払いとユーザ情報を処理するための追加の関数が呼び出され、キー値としてデータベースに書き込まれた、ユーザー・タイトルのシリアライズ値がデシリアライズされる。

脆弱性 CVE-2024-5932 の悪用に成功した攻撃者は、デシリアライズされたオブジェクトのプロパティを制御できるため、コードを連鎖させることで、サーバ上で任意のコード実行や、任意のファイル削除を実行できるようになる。

削除されたファイルの種類にもうよるが、攻撃者のコントロール下にあるリモート・データベースへの接続により、サイトのリセットが引き起こされ、乗っ取りにいたる可能性も生じる。

この脆弱性は GiveWP 3.14.1 以下に影響を及ぼすものだが、2週間前にリリースされたバージョン 3.14.2 で対処されている。ユーザーに推奨されるのは、可能な限り早急にアップデートすることである。

WordPress.org の統計によると、このプラグインは、過去1週間で 60,000以上ダウンロードされているとのことだ。したがって、数万もの Web サイトにおいて、この脆弱性に対するパッチが適用されていない可能性があるという。