4月21日,Wordfence的威脅情報小組在Site Kit by Google插件中發(fā)現(xiàn)了一個漏洞,這是一個安裝在300,000多個網(wǎng)站上的WordPress插件。此漏洞使任何經(jīng)過身份驗證的用戶(無論能力如何)都可以成為運行Google站點套件的任何網(wǎng)站的Google Search Console所有者。
Google Search Console 是谷歌官方的站長管理平臺,和百度站長資源平臺類似,都是用來提交網(wǎng)站數(shù)據(jù)以及監(jiān)控收錄信息的。
Site Kit by Google 是一個插件,用于從WordPress信息中心中的Google服務(wù)獲取并顯示有關(guān)網(wǎng)站訪問者和搜索效果的洞察力,以及廣告效果,頁面速度洞察力和其他指標。為此,它首先連接到Google Search Console帳戶,然后提供附加功能以連接到Analytics(分析),AdSense,PageSpeed Insights,Optimize和Tag Manager。
Wordfence于2020年4月21日向Google提交了安全問題報告。幾周后的2020年5月7日,谷歌發(fā)布了補丁。
這被認為是至關(guān)重要的安全問題,可能導(dǎo)致攻擊者在Google Search Console中獲得所有者對您網(wǎng)站的訪問權(quán)限。所有者訪問權(quán)限使攻擊者可以修改站點地圖,從Google搜索引擎結(jié)果頁面(SERP)中刪除頁面,或促進黑帽SEO廣告系列。我們強烈建議立即更新此插件的最新版本。在撰寫本文時,即Google的Site Kit版本1.8.0。
Wordfence Premium客戶在2020年4月21日收到了一條新的防火墻規(guī)則,以防止針對此漏洞的攻擊。免費的Wordfence用戶將在2020年5月21日的30天后收到此規(guī)則。

為了與Site Kit和Google Search Console建立第一個連接,該插件會生成proxySetupURL,該URL用于將網(wǎng)站管理員重定向到Google OAuth,并通過代理運行網(wǎng)站所有者驗證過程。
proxySetupURL披露
由于缺乏對操作的功能檢查admin_enqueue_scripts,proxySetupURL作為管理頁面的HTML源代碼的一部分顯示給訪問/ wp-admin儀表板的任何經(jīng)過身份驗證的用戶。
更具體地說,admin_enqueue_scripts操作觸發(fā)了enqueue_minimal_admin_script使googlesitekit-base腳本入隊的函數(shù),并最終包含返回內(nèi)聯(lián)基本數(shù)據(jù)的’googlesitekit-base-data‘。包括proxySetupURL。
new Script_Data(
'googlesitekit-base-data',
array(
'global' => '_googlesitekitBaseData',
'data_callback' => function () {
return $this->get_inline_base_data();
},
)
),
這是inline_js_base_data函數(shù)的一部分,該函數(shù)檢索數(shù)據(jù)以顯示在WordPress儀表板的源代碼中admin_enqueue_scripts。這包括proxySetupURL。
/**
* Modifies the base data to pass to JS.
*
* @since 1.2.0
*
* @param array $data Inline JS data.
* @return array Filtered $data.
*/
private function inline_js_base_data( $data ) {
$first_admin_id = (int) $this->first_admin->get();
$current_user_id = get_current_user_id();
// If no first admin is stored yet and the current user is one, consider them the first.
if ( ! $first_admin_id && current_user_can( Permissions::MANAGE_OPTIONS ) ) {
$first_admin_id = $current_user_id;
}
$data['isFirstAdmin'] = ( $current_user_id === $first_admin_id );
$data['splashURL'] = esc_url_raw( $this->context->admin_url( 'splash' ) );
$auth_client = $this->get_oauth_client();
if ( $auth_client->using_proxy() ) {
$access_code = (string) $this->user_options->get( Clients\OAuth_Client::OPTION_PROXY_ACCESS_CODE );
$data['proxySetupURL'] = esc_url_raw( $auth_client->get_proxy_setup_url( $access_code ) );
$data['proxyPermissionsURL'] = esc_url_raw( $auth_client->get_proxy_permissions_url() );
}
return $data;
}
仔細查看管理控制臺的源代碼中可發(fā)現(xiàn)的數(shù)據(jù):

通過在操作中添加功能檢查,此問題已在插件的最新版本中修復(fù)admin_enqueue_scripts。inline_js_base_data對于沒有適當特權(quán)的用戶(例如訂戶),這禁止將其包含在管理頁面中。這樣可以防止將proxySetupURL顯示給未經(jīng)授權(quán)的用戶。
無保護的驗證
除了向任何經(jīng)過身份驗證的用戶顯示proxySetupURL之外,我們還發(fā)現(xiàn),用于驗證網(wǎng)站所有權(quán)的驗證請求是注冊的管理員操作,同樣,該操作沒有任何功能檢查。這允許驗證請求來自任何經(jīng)過身份驗證的WordPress用戶,包括那些權(quán)限最小的用戶。
該admin_action_googlesitekit_proxy_setup動作已在此處注冊。
add_action(
'admin_action_' . Google_Proxy::ACTION_SETUP,
function () {
$this->verify_proxy_setup_nonce();
},
-1
);
add_action(
'admin_action_' . Google_Proxy::ACTION_SETUP,
function () {
$code = $this->context->input()->filter( INPUT_GET, 'googlesitekit_code', FILTER_SANITIZE_STRING );
$site_code = $this->context->input()->filter( INPUT_GET, 'googlesitekit_site_code', FILTER_SANITIZE_STRING );
$this->handle_site_code( $code, $site_code );
$this->redirect_to_proxy( $code );
}
);
這是處理驗證請求的函數(shù):
/**
* Handles receiving a verification token for a user by the authentication proxy.
*
* @since 1.1.0
* @since 1.1.2 Runs on `admin_action_googlesitekit_proxy_setup` and no longer redirects directly.
*/
private function handle_verification_token() {
$verification_token = $this->context->input()->filter( INPUT_GET, 'googlesitekit_verification_token', FILTER_SANITIZE_STRING );
$verification_type = $this->context->input()->filter( INPUT_GET, 'googlesitekit_verification_token_type', FILTER_SANITIZE_STRING );
$verification_type = $verification_type ?: self::VERIFICATION_TYPE_META;
if ( empty( $verification_token ) ) {
return;
}
switch ( $verification_type ) {
case self::VERIFICATION_TYPE_FILE:
$this->authentication->verification_file()->set( $verification_token );
break;
case self::VERIFICATION_TYPE_META:
$this->authentication->verification_meta()->set( $verification_token );
}
add_filter(
'googlesitekit_proxy_setup_url_params',
function ( $params ) use ( $verification_type ) {
return array_merge(
$params,
array(
'verify' => 'true',
'verification_method' => $verification_type,
)
);
}
);
}
看一下在此過程中發(fā)送的驗證請求:/wp-admin/index.php?action=googlesitekit_proxy_setup&googlesitekit_code=[SITEKIT-CODE]&googlesitekit_verification_token=[VERIFICATION TOKEN]&googlesitekit_verification_token_type=FILE&nonce=[NONCE]
在最新版本中已修復(fù)此問題,并在功能上添加了handle_verification_token功能檢查,以驗證在與具有通過Google插件設(shè)置Site Kit的管理權(quán)限的用戶進行的合法身份驗證會話期間是否發(fā)生了驗證請求。
if ( ! current_user_can( Permissions::SETUP ) ) {
wp_die( esc_html__( 'Sorry, you are not allowed to do that.', 'google-site-kit' ), 403 );
}
這兩個缺陷使訂閱者用戶有可能成為任何受影響網(wǎng)站上的Google Search Console所有者。
影響
在Google Search Console中為財產(chǎn)設(shè)置新所有者后,會通過電子郵件發(fā)送一條消息,內(nèi)容為:“財產(chǎn)所有者可以更改影響Google搜索與您的網(wǎng)站或應(yīng)用交互方式的關(guān)鍵設(shè)置。”
攻擊者可以通過多種方式利用網(wǎng)站的Google Search Console所有者訪問權(quán)限。對于惡意攻擊者而言,通過Blackhat SEO操縱搜索引擎結(jié)果頁面的功能特別有吸引力。此外,攻擊者可能將Search Console訪問與另一種利用方式結(jié)合使用,后者涉及將惡意內(nèi)容注入網(wǎng)站以獲利。
Google Search Console中的所有者可以執(zhí)行以下操作:請求從Google Search Engine中刪除網(wǎng)址,查看競爭效果數(shù)據(jù),修改站點地圖等。
當攻擊者從搜索結(jié)果中刪除網(wǎng)址時,未經(jīng)授權(quán)的Google Search Console所有者對網(wǎng)站的訪問可能會損害網(wǎng)站在Google搜索結(jié)果中的可見性并影響收入。更具體地說,它可以用于幫助想要損害網(wǎng)站排名和聲譽的競爭對手,從而更好地提高自己的聲譽和排名。
驗證Google Search Console所有權(quán)的完整性
幸運的是,有多種方法可以驗證和監(jiān)視是否添加了任何新的Google Search Console所有者,并且Wordfence防火墻為您的網(wǎng)站提供了保護。
由于我們的網(wǎng)站清理小組經(jīng)常看到Google Search Console中的惡意財產(chǎn)所有者被添加到了被黑客入侵的網(wǎng)站中,因此我們提供了一些指導(dǎo)。
監(jiān)控方式
每當添加新的Search Console所有者時,Google都會通過電子郵件提醒您。如果您收到其中一封電子郵件,并且最近未添加新的Google Search Console所有者,請立即采取行動并刪除未知的所有者。
驗證和刪除不需要的所有者
即使您沒有收到來自Google的任何電子郵件來提醒您有新的Google Search Console所有者,也可以從Google Search Console儀表板驗證所有者。
檢查Google Search Console用戶:
- 登錄您的Google Search Console,然后轉(zhuǎn)到“設(shè)置”。在這里,您可以找到“用戶和權(quán)限”
- 單擊“用戶和權(quán)限”。您會看到所有Google Search Console用戶的列表,包括他們的姓名,電子郵件地址和角色。
- 查看列出的用戶。驗證沒有列出未知的所有者。
如果您確實發(fā)現(xiàn)流氓Google Search Console所有者,請執(zhí)行以下操作:
- 單擊要刪除的網(wǎng)站所有者旁邊的三個點。
- 單擊“管理財產(chǎn)所有者”。在這里,您可以看到驗證請求的日志,可以確定何時添加所有者,以及取消驗證任何站點所有者的能力。
- 對于您要刪除的任何流氓所有者,單擊“取消驗證”。這將取消對該帳戶的驗證,并撤消對Search Console帳戶的訪問權(quán)限。
額外注意事項
Google的Site Kit提供了重置站點與Site Kit的連接的功能。如果您發(fā)現(xiàn)已添加了惡意的Google Search Console所有者,則建議您采取額外的步驟來重置WordPress網(wǎng)站上的Google Site Kit。
由Google重置網(wǎng)站工具包:
- 登錄您的WordPress網(wǎng)站,然后通過Google的“設(shè)置”導(dǎo)航到網(wǎng)站工具包。
- 導(dǎo)航到“管理員設(shè)置”,然后單擊“重置站點工具包”。出現(xiàn)提示時,單擊“重置”以確認重置。這將重置您的站點工具包連接,并要求您重新連接以前連接的所有Google服務(wù)。
Wordfence可以保護您的網(wǎng)站
我們于2020年4月21日向Wordfence Premium用戶發(fā)布了一條防火墻規(guī)則,該規(guī)則將阻止任何非管理員進行的驗證嘗試,從而最終防止創(chuàng)建任何不必要的Google Search Console所有者。
由于某些限制,防火墻無法阻止ProxySetupURL在源代碼中顯示。但是,防火墻規(guī)則阻止驗證請求足以使用Google的網(wǎng)站工具包的漏洞版本在網(wǎng)站上提供最佳保護。
免費的Wordfence用戶將在2020年5月21日收到此規(guī)則。
披露時間表
2020年4月21日?–漏洞的初步發(fā)現(xiàn)和分析。已為Wordfence Premium客戶發(fā)布了防火墻規(guī)則。我們通過Google的漏洞獎勵計劃提交了漏洞披露,因為這似乎是他們的主要漏洞披露渠道。
2020年4月22日?-漏洞報告由Google安全團隊進行分類和分配。
2020年4月30日?– Google安全小組通知我們,該漏洞已經(jīng)過驗證并且已提交錯誤。
2020年5月4日?–?Google Github存儲庫在站點工具包中出現(xiàn)了一次提交,似乎為該漏洞提供了補丁。
2020年5月7日?–?發(fā)布了補丁。
2020年5月21日?–免費的Wordfence用戶將收到防火墻規(guī)則。
小結(jié)
在今天的文章中,我們詳細介紹了一個漏洞,該漏洞使低級別的WordPress用戶可以利用Google的Site Kit插件中的漏洞成為Google Search Console所有者。此漏洞已在1.8.0版中完全修復(fù)。我們建議用戶立即更新到可用的最新版本。
自2020年4月21日以來,運行Wordfence Premium的站點已受到保護,免受此漏洞的攻擊。運行免費版本的Wordfence的站點將于2020年5月21日收到此防火墻規(guī)則更新。如果您認識在其站點上使用此插件的朋友或同事,,我們強烈建議將此建議轉(zhuǎn)發(fā)給他們,以便他們可以更新和保護其Google Search Console帳戶和WordPress網(wǎng)站。
注:文本內(nèi)容出自 Wordfence,由 WordPress大學(xué) 翻譯整理。




