近期陸續(xù)有幾個客戶反饋收到網(wǎng)安關(guān)于WordPress用戶枚舉漏洞的通報,涉及的地址為:/wp-json/wp/v2/users,經(jīng)核實這是WordPress內(nèi)置的REST API接口,這個接口默認情況下可以暴露網(wǎng)站上所有用戶的信息,包括用戶名、ID等。如果沒有正確配置或限制訪問,攻擊者可以通過此接口枚舉出所有網(wǎng)站的用戶,從而為進一步的攻擊做準備。 WordPress用戶枚舉漏洞

漏洞分析及影響

  1. 漏洞說明
    • WordPress的REST API允許通過wp-json/wp/v2/users接口列出網(wǎng)站的所有用戶(如果沒有權(quán)限限制)。
    • 攻擊者只需通過簡單的GET請求就能查看到網(wǎng)站上所有用戶的詳細信息,包括用戶名等敏感數(shù)據(jù)。
  2. 影響
    • 信息泄露:攻擊者能夠枚舉出所有用戶名,暴露網(wǎng)站上的用戶列表。
    • 暴力破解攻擊:知道用戶名后,攻擊者可以進一步嘗試使用暴力破解方法猜測密碼,尤其是如果用戶的密碼弱或使用默認密碼的情況下。
    • 社交工程:攻擊者可以利用獲取的用戶信息進行社交工程攻擊,偽裝成某個用戶進行詐騙或釣魚攻擊。

修復(fù)措施

1、服務(wù)器直接禁止對應(yīng)地址的訪問

此方法比較簡單直接,禁止對應(yīng)鏈接地址的訪問以后可以直接解決此問題,不過可能會影響到后臺部分涉及到此接口訪問的功能。

步驟:

  • 找到你網(wǎng)站的 NGINX 配置文件,寶塔面板的話則是后臺網(wǎng)站-設(shè)置-配置文件里面。
  • 在適當?shù)奈恢茫ㄍǔJ窃?server 塊中)添加以下配置代碼:
server {
    # 你的其他配置
    ...

    # 禁止訪問 /wp/v2/users 和 /wp/v2/users/{id}
    location ~ ^/wp-json/wp/v2/users(/.*)?$ {
        deny all;
        return 403;  # 返回 403 Forbidden
    }

    # 你的其他配置
    ...
}
  • 重載 NGINX 配置

2、(推薦)基于WordPress內(nèi)置filter移除接口,同時保留高權(quán)限用戶的接口正常使用

此方式可以自動判斷當前用戶權(quán)限,由于rest api接口可能在后臺發(fā)布文章的時候使用到,所以可以針對編輯權(quán)限開放此接口的訪問,其他訪問默認移除此接口,代碼如下:

/**
 * 禁用 WordPress 用戶枚舉接口,只有具有編輯權(quán)限(editor)及以上權(quán)限的用戶才可訪問。
 * 
 * @author WPCOM
 * @version 1.0.0
 * @since 2024-12-26
 */
add_filter('rest_endpoints', function ($endpoints) {
    global $has_users_endpoint;
    if($has_users_endpoint) return $endpoints;

    if(isset($endpoints['/wp/v2/users'])){
        $users_endpoint = $endpoints['/wp/v2/users'];
        unset($endpoints['/wp/v2/users']);
    }

    // 編輯及以上權(quán)限可展示用戶列表
    if (defined('REST_REQUEST') && REST_REQUEST && current_user_can('editor')) {
        // 恢復(fù) /wp/v2/users 端點
        if(isset($users_endpoint)) $endpoints['/wp/v2/users'] = $users_endpoint;
        $has_users_endpoint = true;
    }

    return $endpoints;
});

以上代碼可以添加到主題的functions.php文件或者其他封裝的插件里面。