導入
2024 年 5 月 7 日、大手セキュリティ諮問組織である WP-Firewall は、Uncode Core プラグインで発見された重大な脆弱性に関する詳細なレポートを公開しました。Uncode ユーザーの場合は、WordPress サイトを潜在的な攻撃から保護するために、コア プラグインを少なくともバージョン 2.8.9 に更新することが重要です。この記事では、これらの脆弱性の詳細、その影響、および脆弱性を軽減するために講じられた手順について詳しく説明します。
Uncode Coreプラグインについて
Undsgn が開発した Uncode Core プラグインは、ThemeForest で 110,000 件以上販売されている、WooCommerce サイト向けの非常に人気の高いプレミアム テーマである Uncode テーマの必須コンポーネントです。Uncode テーマはピクセル パーフェクトなデザインで知られており、ポートフォリオ、代理店、フリーランス、ブログ、オンライン ストアなど、さまざまな Web サイトに最適です。
セキュリティの脆弱性
WP-Firewall のセキュリティ研究者は、Uncode Core プラグインに 2 つの重大な脆弱性があることを特定しました。
1. 認証された任意のファイルとディレクトリの削除
説明: この脆弱性により、少なくとも Subscriber ロールを持つ認証済みユーザーは、サーバー上の任意のディレクトリを削除できます。問題は、適切な権限と nonce チェックが欠如している `delete_download` 関数にあります。この関数は `wp_ajax_uncodefont_delete_download` アクションにアタッチされているため、認証済みユーザーがこれを悪用する可能性があります。
技術的な詳細:
関数delete_download() {
(isset($_REQUEST['font_family']))の場合{
$font_family = $_REQUEST['font_family'];
$font_dir = trailingslashit($this->font_directory).$font_family;
$fontkit_zip = $font_dir.'.zip';
(@file_exists($fontkit_zip)) の場合 {
$fontkit_zip の場合:
エコーjson_encode(配列(
'error' => sprintf( esc_html__( '@fontface キット zip %1$s.'、'uncode-core' の削除に失敗しました)、$fontkit_zip )
));
死ぬ();
}
}
// ディレクトリを作成した unzip_file が WP_Filesystem を使用しているため、ディレクトリを削除できません。そのため、WP_Filesystem を使用して削除します。
$this->setup_wp_filesystem();
グローバル $wp_ファイルシステム;
($wp_filesystemをisset)の場合{
$delete_dir = $wp_filesystem->delete($font_dir, true);
(!$delete_dir)の場合{
json_encode をエコーします(array('error' => $delete_dir['error']));
死ぬ();
}
}
echo json_encode(array('success' => "ダウンロードが削除されました"));
}
死ぬ();
}
include/font-system/font-system.php、関数 delete_download()
この関数は、ユーザー入力 (`$_REQUEST['font_family']`) からサニタイズせずに `$font_dir` 変数を構築するため、ディレクトリ トラバーサルや任意の削除が可能になります。
2. 認証された権限昇格
説明: この脆弱性により、少なくとも Subscriber ロールを持つ認証済みユーザーは、WordPress サイト上の任意のロールに権限を昇格できるようになります。これは、適切な権限チェックが欠如している `save_option` 関数の安全でない WP Option アップデートが原因です。
技術的な詳細:
パブリック関数 save_option() {
if ( isset( $_POST['nonce'] ) && wp_verify_nonce( $_POST['nonce'], 'uncode-core-settings-nonce' ) ) {
if ( isset( $_POST['値'] ) && $_POST['値'] && isset( $_POST['オプションID'] ) && $_POST['オプションID'] ) {
$autoload = isset( $_POST['autoload'] ) && $_POST['autoload'] === 'true' ? true : false;
update_option( $_POST['option_id'], $_POST['value'], $autoload );
---------- ここをカット ----------
include/core-settings/class-core-settings.php、関数 save_option()
この関数で使用される nonce は、wp-admin 領域にアクセスできる認証済みユーザーであれば誰でも取得できるため、オプションの不正な更新や権限の昇格が可能になります。
パッチ
これらの脆弱性を解決するために、Uncode Core プラグイン開発者はバージョン 2.8.9 をリリースしました。これには次の修正が含まれています。
– 認証された任意のファイルとディレクトリの削除: `delete_download` 関数に権限と nonce のチェックを実装しました。
– 認証された権限昇格: `save_option` 関数に権限と nonce チェックを適用し、オプション キーのホワイトリスト チェックを追加しました。
結論
WordPress サイトのセキュリティを確保するには、最新のパッチとセキュリティ アドバイザリを常に適用する必要があります。Uncode Core プラグインの脆弱性は、機密性の高い操作に対して適切な権限と nonce チェックを実装することの重要性を強調しています。ユーザー入力を常にサニタイズし、ユーザー操作によって更新または削除できる範囲を制限してください。
より詳しい情報については、WP-Firewallのウェブサイトでセキュリティ勧告全文をお読みください。 ここ.
安全を保つ
WP-Firewall は、プラグイン監査、脆弱性監視と対応、マネージド WordPress セキュリティ サービスなど、WordPress セキュリティのためのさまざまなソリューションを提供しています。プラグイン開発者またはセキュリティ研究者の場合は、WP-Firewall への参加を検討してください。