
Profile Builder < 4.0.1 における PHP オブジェクトインジェクション
研究者: Vivien Lebas
影響を受けるプラグイン: Profile Builder (WordPress)
影響を受けるバージョン: < 4.0.1
修正バージョン: 4.0.1
種類: PHP オブジェクトインジェクション (安全でないデシリアライゼーション)
CWE: CWE-502
OWASP: A8 – 安全でないデシリアライゼーション
CVSS 3.1: 6.6 (Medium) — AV:N/AC:H/PR:H/UI:N/S:U/C:H/I:H/A:H
WPScan: 検証済みアドバイザリ
Profile Builder の Import/Export アドオンは、設定ファイルをインポートする際に、 デシリアライズされるデータの型を検証していません。そのため、高い権限を持つ ユーザー (管理者) は、細工された JSON ファイルをインポートすることで PHP オブジェクトインジェクションを引き起こすことができます。
このアドオンは無料の拡張機能であり、デフォルトでは無効になっています。また、 Profile Builder 自体には利用可能な POP (Property-Oriented Programming) チェーンは 同梱されていません。そのため、具体的な影響に到達するには、インストール済みの 別のプラグインやテーマが提供する適切なガジェットが必要です。
脆弱性はインポート機能に存在します:
/wp-admin/admin.php?page=pbie-import-export&tab=import
インポートされたファイル内の値が、型チェックなしで WordPress の
maybe_unserialize() に渡されます。その値がシリアライズされたオブジェクト文字列で
ある場合、PHP は指定されたクラスをインスタンス化し、インポートリクエスト中に
そのマジックメソッド (__wakeup、__destruct) を実行します。
manage_options) であること。マルチサイトでは、インポートは
manage_network を条件とするため、ネットワーク管理者/スーパー管理者が必要です。
サブサイトの管理者は拒否されます。Evil を使用しています。 https://victim.example/wp-admin/admin.php?page=pbie-import-export&tab=import
payload.json として保存します: {
"options": {},
"posts": {
"wppb-rf-cpt": [
{
"post_title": "POC",
"post_name": "poc",
"post_type": "post",
"post_status": "publish",
"postmeta": {
"poc": ["O:4:\"Evil\":0:{}"]
}
}
]
}
}
payload.json を選択し、Import を押します。postmeta の値内の文字列が maybe_unserialize() に渡されるため、指定された
クラスがインスタンス化され、インポートリクエスト中にそのマジックメソッドが
実行されます。
wppb-ul-cpt、wppb-rf-cpt、wppb-epf-cpt のいずれかである
必要がありますが、実際に作成される投稿タイプは各投稿の post_type フィールドから
取得されるため、この経路は Pro ライセンスなしで 到達可能です。PHP オブジェクトインジェクション。インストール済みの別のプラグインやテーマからの 適切なガジェットチェーンと組み合わせることで、ファイル操作などの動作や、利用可能な ガジェットによってはリモートコード実行につながる可能性があります。
Profile Builder を 4.0.1 以降に更新してください。
この脆弱性はベンダーに責任ある形で開示され、修正が利用可能になった後に、 教育および防御目的で公開されています。