近期陸續(xù)有幾個客戶反饋收到網(wǎng)安關(guān)于WordPress用戶枚舉漏洞的通報,涉及的地址為:/wp-json/wp/v2/users
,經(jīng)核實這是WordPress內(nèi)置的REST API接口,這個接口默認情況下可以暴露網(wǎng)站上所有用戶的信息,包括用戶名、ID等。如果沒有正確配置或限制訪問,攻擊者可以通過此接口枚舉出所有網(wǎng)站的用戶,從而為進一步的攻擊做準備。
漏洞分析及影響
- 漏洞說明:
- WordPress的REST API允許通過
wp-json/wp/v2/users
接口列出網(wǎng)站的所有用戶(如果沒有權(quán)限限制)。 - 攻擊者只需通過簡單的GET請求就能查看到網(wǎng)站上所有用戶的詳細信息,包括用戶名等敏感數(shù)據(jù)。
- WordPress的REST API允許通過
- 影響:
- 信息泄露:攻擊者能夠枚舉出所有用戶名,暴露網(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
文件或者其他封裝的插件里面。