如何確認Google用戶的具體電子郵件地址(已提交Google漏洞獎勵計劃)
近期我向Google報告了一個安全問題,這個漏洞將允許攻擊者確認某Web頁面的訪問者是否登錄了任意一個Google服務的賬號(包括GSuite賬號在內)。
根據(jù)我的測試結果,攻擊者可以在每25秒鐘的時間里確認大約1000個電子郵箱賬號。但是Google方面給出的回復是:這是一個專門設計的功能,它并非是一個安全漏洞。
你可以在這個【演示頁面】自行測試該功(lou)能(dong)。
首先給大家先上一個PoC演示動圖(測試賬號是我自己的郵箱):
方法論
我之前曾經(jīng)寫過一篇關于“識別用戶是否登錄了某個社交網(wǎng)絡”的文章,而本文所描述的攻擊方式正是之前技術的變種版本。不過恕我直言,本文將要介紹的攻擊方法影響會更加的嚴重。
Google的登錄頁面通常會在URL鏈接中傳遞一個continue參數(shù),這個參數(shù)將負責把用戶重定向到他們完成登錄后原本需要訪問的目的地址。但是如果你已經(jīng)完成的登錄的話,你將會立刻被重定向到continue參數(shù)所定義的URL地址。
這樣一來,攻擊者就可以利用這種運行機制并通過一個專門制作的URL地址來將已登錄的用戶重定向到一個圖片文件,并呈現(xiàn)一個偽造的登錄頁面來嘗試欺騙用戶完成登錄操作。如果你現(xiàn)在在img標簽的src屬性中使用這種URl地址的話,你就可以使用JavaScript的onload和onerror函數(shù)來確定圖片是否已經(jīng)正確加載了。
如果圖片成功加載,說明用戶完成了登錄操作;如果圖片加載出現(xiàn)錯誤,則說明用戶沒有登錄。這個問題其實Google早就已經(jīng)知道了,不過這種功能也有一定的局限性,并且無法造成嚴重的影響,所以Google并沒有理會。
但是這個問題并不是Google想象的那么簡單,因為攻擊者現(xiàn)在還可以提供一個額外的參數(shù)來指定一個電子郵件地址。這也就意味著,如果攻擊者提供的電子郵件地址能夠與目標用戶的郵件地址相匹配,則會觸發(fā)一次重定向。
這樣一來,攻擊者就可以通過JavaScript的onload屬性來動態(tài)創(chuàng)建并加載一個圖片標簽(這個過程不需要將圖片對象添加到Web頁面,而且你甚至都不需要將其附加到頁面的DOM樹中),然后等待匹配完成即可。在我的測試過程中,我可以每23-24秒的時間里檢測大約1000個電子郵箱地址。如果目標用戶登錄了你的網(wǎng)站并停留了幾分鐘的話,你就可以檢測好幾千個郵箱地址了。
但是現(xiàn)在我們需要配合一些其他的方法來收集目標用戶的部分基本信息,例如通過IP地址來了解到他們的地理位置,使用有針對性的社交廣告來收集關于他們企業(yè)網(wǎng)絡或其他的一些基本信息等等。如果順利的話,你現(xiàn)在應該已經(jīng)能夠動態(tài)加載一份目標地址列表了。接下來,你就可以通過本文所介紹的技術來匹配并記錄下目標用戶的郵箱地址、IP地址、地理位置、設備信息以及其他各種各樣的信息了。
現(xiàn)在,你就可以利用剛才所收集到的信息來發(fā)動動態(tài)網(wǎng)絡釣魚攻擊了。
漏洞披露時間軸
- 2017年7月14日:我將這個問題報告給了Google的安全團隊;
- 2017年7月17日:該問題已被分類,并等待處理結果;
- 2017年7月18日:Google安全團隊與我聯(lián)系,并詢問我關于處理該漏洞的建議;
- 2017年7月18日:我給他們的建議是,在電子郵件中采用某種隨機數(shù)或加鹽哈希,并且只有在哈希和郵件相匹配的情況下才允許進行重定向;
- 2017年7月19日:Google確認將該問題歸類為安全漏洞;
- 2017年7月21日:我發(fā)布了一篇文章對該漏洞進行了詳細描述;
- 2017年8月9日:Google團隊在經(jīng)過討論之后,告訴我這是一個專門設計的功能,并表示不會將其視為一個安全問題,因此他們不會采取任何下一步操作;
總結
這種攻擊技術的確有一定的局限性,因為你必須事先獲得一份目標用戶列表。雖然Google安全團隊并不認為這是一個安全漏洞,但是我仍然非常感謝他們,感謝他們能夠對我提交的信息及時回復,他們非常的友好。