大家好,以下分享的writeup是作者透過在Tumblr用戶註冊過程中,發現Tumblr的「人機身分驗證」機制(reCAPTCHA)有缺陷,可輕鬆繞過。這種繞過形成的安全風險是惡意攻擊者可進行大量虛假社交帳戶創建、進行針對帳戶的使用者名稱和郵箱枚舉,間接導致Tumblr網站應用程式出現流量異常甚至用戶資訊外洩。
去年6月16日,HackerOne在倫敦舉辦的黑客馬拉松大賽中,發現漏洞支付的賞金有超過了8萬多美金。漏洞眾測確實是個未來可期的行業,對眾測平台來說,有組織給賞金的測試活動,即可以激勵安全研究人員發現漏洞,也能提高上報漏洞質量,還能把詳細的漏洞信息轉發給廠商進行及時修復。
安全是門複雜的學問,即使是大公司也難免犯錯。企業在面對的內部資源和外部攻擊者之間,往往存在不定的安全風險,而漏洞眾測恰好可以很好地彌補其中存在的安全空白。如果你的組織機構無法從內部培養或選拔高品質且多樣化的安全測試人員,那麼就可以藉助外部的眾測專案或諮詢服務等方式,來進行安全產品或相關係統的測試和漏洞發現。
就我個人來說,在眾測過程中也遇到一些不好的經驗。我曾給Myspace報過一個訪問任意帳戶的高危險漏洞,但在我與Myspace的冗長協商過程中,他們簡直就是漠不關心的態度,最後我選擇了公開漏洞(點此閱讀)。該漏洞影響將近3.6億多個用戶帳戶,我寄望能透過公眾壓力促使漏洞修復,這種行為也是迫不得已。
而相反的是,我曾發現了Tumblr公司的一個reCaptcha驗證碼繞過漏洞,從Twitter方式上報給他們後,他們就直接私訊我進行交流,只經過了兩天漏洞就得到修復。以下就是我對該漏洞發現過程的分享。
在我造訪www.tumblr.com進行使用者註冊時,發現其中嵌入的GooglereCAPTCHA驗證碼服務存在一個錯誤配置漏洞,那就是在由客戶端和應用程式發送的reCAPTCHA驗證碼請求中,其中名為'g-recaptcha-response' 的參數值可以置空。該漏洞會對所有新註冊用戶產生影響,且不需要什麼特別的工具進行利用,只需手動地點擊網站上出現的按鈕,或透過抓包代理發起修改即可。
通常來說,Captcha機制如果運行部署合理,是具有速率限製作用的(Rate Limiting),可以用其來防止垃圾用戶創建虛假社交帳戶,減少特定應用的請求量。我發現的這個Tumblr頁面reCAPTCHA驗證碼繞過漏洞,可以被攻擊者用來創建虛假帳戶;另外由於Tumblr的用戶註冊機制只允許註冊郵箱綁定一個用戶名,所以,也可以利用該漏洞進行針對用戶郵箱和用戶名的暴力枚舉攻擊,反覆大量的枚舉可以導致Tumblr的用戶註冊資訊外洩。
我們先來看看www.tumblr.com頁面中正常的帳號建立流程,首先來到登入頁面https://www.tumblr.com/login,點選右上角的註冊按鈕「Sign up」:
然後就跳到了帳戶註冊頁面https://www.tumblr.com/register :
接著,點擊開始按鈕'Get Started',之後就會出現一些必填選項,包括使用者名稱、密碼和信箱:
##完成以上必填項之後,還要輸入年齡和勾選服務條款須知: #接下來,就會跳出一個「人機身份驗證」(reCAPTCHA )頁:#
除了這麼一個「人機身份驗證」(reCAPTCHA )選項部署在這裡,其下方還有一個選項「完成了」(Almost Done!)。搞笑的是,雖然通常來說需要完成“人機身份驗證”才能進行下一步,但是,經我測試發現,可以直接不用勾選“人機身份驗證”中的“I'm not a robot”,直接點擊下方的“完成了”(Almost Done!)即可完成這裡所謂的“人機身份驗證”,就直接進入下一步到用戶的Tumblr主頁。這種「人機身份驗證」(reCAPTCHA )部署在這裡是當擺設的嗎?
為了深入分析,我們用Burp來看看用戶在「人機身份驗證」(reCAPTCHA )這一步發起具體的請求和回應。
發起「人機身份驗證」時的POST請求如下:
#仔細查看上述POST請求可以發現,其中的recaptcha質詢是一個名為'g-recaptcha-response'的參數值,也就是上圖的紅字部分。但如果我們把這個參數值置空,也等於就不去勾選它,會發生什麼事?這樣建構的POST請求如下:
後經測試發現,Tumblr伺服器端對上述兩種POST請求都回傳了相同且有效的回應:
當然也就是說,Tumblr伺服器端直接就是忘了檢查'g-recaptcha-response' 參數的值,才導致了上述的「人機驗證」(reCAPTCHA )機制被繞過。
儘管許多網站應用程式都要求用戶群的高度可信,但類似這種驗證繞過漏洞在這些網站中也很常見。這不,Google前不久才剛修復了一個可完全繞過 reCAPTCHA 的漏洞。
以上是如何分析繞過Tumblr用戶註冊過程中的reCAPTCHA驗證的詳細內容。更多資訊請關注PHP中文網其他相關文章!