WordPress GamiPress プラグインの脆弱性 CVE-2024-13496 が FIX:SQLi の恐れ

WordPress Plugin Vulnerability Opens Door to SQL Injection Exploits

2025/03/24 gbhackers — 人気の WordPress プラグイン GamiPress に発見された、深刻な脆弱性が悪用されると、未認証の脅威アクターによる SQL インジェクション攻撃にいたる可能性がある。この脆弱性 CVE-2024-13496 (CVSS3.1:7.5) の悪用の可能性が懸念されている。

GamiPress バージョン 7.2.1 のセキュリティ評価中に、この CVE-2024-13496 は発見されたという。この脆弱性が影響を及ぼす範囲は、バージョン 7.3.1 以下となり、すべてのユーザーにとって必要なことは、最新の安全なリリースへの更新となる。

初期分析

Abrahack のレポートによると、この脆弱性が特定された場所は、未認証でのアクセスを許可する wp_ajax_nopriv_{$action} フックである。

具体的に言うと、ユーザー・インタラクションのログを取得し、いくつかのパラメータを受け入れる gamipress_get_logs AJAX エンドポイントに、欠陥が存在することが判明した。つまり、それらのパラメータにより、データベース・クエリに影響が与えられる可能性が生じている。

このコンテキストでは、gamipress_ajax_get_logs 関数が重要となる。この関数は、$_REQUEST 配列を使用し、それが gamipress_logs_shortcode 関数に渡される。続いて、この関数は、gamipress_logs_shortcode_query 関数を使用して、CT_Query クラス経由でデータベースをクエリする。

function gamipress_ajax_get_logs() {
    // Security check
    check_ajax_referer( 'gamipress', 'nonce' );
    // Set current page
    if( isset( $_REQUEST['page'] ) && absint( $_REQUEST['page'] ) > 1 ) {
        set_query_var( 'paged', absint( $_REQUEST['page'] ) );
    }
    $atts = $_REQUEST;
    // Sanitize
    foreach( $atts as $attr => $value ) {
        $atts[$attr] = sanitize_text_field( $value );
    }
    // Send successful response
    wp_send_json_success( gamipress_do_shortcode( 'gamipress_logs', $atts ) );
}

この脆弱性を標的とする攻撃者は、安全が確保されない方法で SQL クエリに渡される、orderby HTTP リクエスト・パラメータの悪用を試行する。

セキュリティ・レイヤーとして、空白の削除や、一重引用符と二重引用符の禁止などの制限があるが、攻撃者はペイロードを慎重に作成することで、この欠陥を悪用できる。

このエクスプロイトのデモンストレーションでは、ブール値の時間ベースの SQLi ペイロードが使用されている。このタイプのペイロードを悪用する攻撃者は、データをダイレクトに抽出せずに、データベースに関する情報を推測できる。

すでにベンダーは、orderby パラメータにホワイトリスト方式を実装するバージョン 7.3.2 のリリースで、この脆弱性に対処している。

この防御策により、gamipress_logs テーブル内で定義されたカラム値のみが使用可能となるため、SQL インジェクション攻撃に効果的に対処できる。

この脆弱性が浮き彫りにするのは、特に WordPress プラグインで、ユーザー入力が安全に処理されることの重要性である。

潜在的な SQL インジェクション攻撃から保護するために、ユーザーに対して強く推奨されるのは、GamiPress のバージョン 7.3.2 以降へと、速やかに更新することだ。