熱門游戲Pokémon GO可通過令牌獲取用戶谷歌賬戶的完整賬戶訪問權(quán)限,而不需要用戶許可。
前不久Pokémon GO移動(dòng)應(yīng)用發(fā)布后,該游戲的開發(fā)商N(yùn)iantic公司被迫修復(fù)該應(yīng)用的iOS版本,因?yàn)榘踩芯咳藛T報(bào)告稱該游戲自身會(huì)安裝令牌,并獲取對(duì)其谷歌賬戶的完全訪問。雖然該App本身不能執(zhí)行這種訪問,但這個(gè)漏洞帶來了令牌交換攻擊的風(fēng)險(xiǎn)。
安全公司RedOwl Analytics首席架構(gòu)師Adam Reeve稱,當(dāng)他使用其谷歌賬戶開始玩Pokémon GO時(shí),他希望看到“該app將訪問哪些數(shù)據(jù)”或者“該app將查看你的電子郵件地址和姓名”的彈出消息,但他沒有看到任何這樣的消息,隨后在他查看該游戲訪問權(quán)限時(shí)感到非常震驚,他看到“Pokémon GO可完全訪問用戶的谷歌賬戶”。
Pokémon GO允許通過Pokémon Trainer Club網(wǎng)站或使用谷歌賬戶登錄;然而,Pokémon Trainer Club因大量新注冊(cè)用戶不堪重負(fù),而暫停注冊(cè),讓用戶只有一個(gè)選擇:使用谷歌賬戶登錄。這種完整權(quán)限訪問僅發(fā)生在iOS版的該應(yīng)用中;Android用戶沒有受到影響。
Niantic承認(rèn)了這個(gè)錯(cuò)誤并解釋稱,盡管Pokémon GO得到了完全訪問令牌權(quán)限,但該應(yīng)用并不能訪問所有谷歌賬戶信息。
“我們最近發(fā)現(xiàn),iOS系統(tǒng)中Pokémon GO賬戶創(chuàng)建過程錯(cuò)誤地要求用戶谷歌賬戶的完全訪問權(quán)限,”Niantic在其網(wǎng)站寫道,“但是,Pokémon GO只會(huì)訪問基本的谷歌賬戶信息(即用戶ID和電子郵件地址),不會(huì)對(duì)其他谷歌賬戶信息進(jìn)行訪問或收集。在我們發(fā)現(xiàn)這個(gè)錯(cuò)誤后,我們開始進(jìn)行客戶端修復(fù),僅請(qǐng)求訪問基本的谷歌賬戶信息,以及我們實(shí)際訪問的數(shù)據(jù)。谷歌已經(jīng)證實(shí),Pokémon GO或Niantic沒有收到或者訪問其他任何信息。谷歌很快會(huì)將Pokémon GO的權(quán)限降低到Pokémon GO需要的基本配置文件數(shù)據(jù),用戶不需要親自采取任何行動(dòng)。”
Reeve最初報(bào)告稱,Pokémon GO被授予的令牌可讓Niantic讀取用戶的Gmail,作為用戶發(fā)送郵件,訪問和刪除Google Drive中的文件。事實(shí)上,谷歌自己表示完全賬戶訪問權(quán)限允許應(yīng)用執(zhí)行很多潛在危險(xiǎn)的行為。
“當(dāng)被授予完全賬戶訪問權(quán)限時(shí),該應(yīng)用可查看和修改谷歌賬戶中幾乎所有的信息(但它不能修改你的密碼、刪除你的賬戶或者以你的名義用谷歌錢包支付),”根據(jù)該公司的支持頁稱,“如果你已對(duì)不信任的或識(shí)別應(yīng)用授予完全賬戶訪問,建議你點(diǎn)擊撤銷按鈕取消這種權(quán)限。”
然而,其他安全專家后來發(fā)現(xiàn),雖然Pokémon GO不能讀取或發(fā)送電子郵件,讓該游戲只能查看基本谷歌用戶信息,但該漏洞可能帶來令牌交換攻擊的風(fēng)險(xiǎn)。
Slack公司產(chǎn)品安全高級(jí)工程師Ari Rubinstein在GibHub談到了這個(gè)漏洞,并指出這個(gè)漏洞可能用于交換令牌攻擊。雖然Pokémon GO不能使用其完整賬戶訪問權(quán)限來訪問用戶的Gmail和日歷,Rubinstein稱OAuth訪問令牌可被惡意交換為另一個(gè)更強(qiáng)大的令牌,被稱為uberauth。這將讓攻擊者能夠打開任何谷歌服務(wù)的網(wǎng)絡(luò)會(huì)話以及獲取真正的完全賬戶訪問權(quán)限,這給谷歌的身份驗(yàn)證系統(tǒng)帶賴了重大的安全漏洞。
Rubinstein指出這種過度權(quán)限授權(quán)是Niantic和谷歌的錯(cuò)誤,不過這個(gè)權(quán)限還沒有被濫用。
“即使只是最初建議,也很難使用這種權(quán)限,因?yàn)檫@種使用類型不是編程的(除非有另一個(gè)隱藏的API來授予API令牌)。省略這個(gè)范圍讓身份驗(yàn)證被視為“基本用戶信息”而不是“完整賬戶權(quán)限”,Niantic可能會(huì)更新客戶端。身份驗(yàn)證流程很混亂,并且,谷歌應(yīng)該了解,使用這個(gè)范圍來登錄可能讓令牌被交換。在我看來,谷歌不應(yīng)該將這種權(quán)限范圍給予非谷歌應(yīng)用。”
Niantic此前屬于谷歌,去年它作為獨(dú)立實(shí)體從谷歌分離出去。目前我們還不清楚Niantic如何獲得這種OAuth范圍以及繞過權(quán)限通知(通常應(yīng)用獲取完整賬戶權(quán)限都會(huì)有這種通知)。網(wǎng)絡(luò)公司Trail of Bits公司首席執(zhí)行官Dan Guido表示,他和安全研究人員Jay Little試圖在谷歌的OAuth Playground開發(fā)者網(wǎng)站復(fù)制OAuth令牌的使用,但沒有成功。
“這意味著OAuth Playground(谷歌用于測試其API訪問的服務(wù))無法準(zhǔn)確復(fù)制Pokémon GO請(qǐng)求的權(quán)限,”Guido寫道,“這可能是OAuth 1.0 API的一部分,谷歌在2012年已經(jīng)將其啟用,并在2015年關(guān)閉。如果是這樣的話,我們無法確認(rèn)為什么Pokémon GO還能夠使用它。我們檢查過,遷移到OAuth 2.0 API的賬戶無法再訪問較舊的1.0 API。”
現(xiàn)在,Pokémon GO權(quán)限問題似乎已經(jīng)得到解決。Rubinstein表示:“谷歌將重新限定令牌范圍來解決令牌交換攻擊的風(fēng)險(xiǎn),Pokémon GO在未來幾天應(yīng)該是安全可用的。”
其他Pokémon GO的安全問題
雖然Niantic和谷歌已經(jīng)修復(fù)iOS版應(yīng)用的權(quán)限問題,但還有其他安全問題。網(wǎng)絡(luò)安全公司Proofpoint發(fā)現(xiàn)該游戲受感染的Android版本,攜帶DroidJack遠(yuǎn)程訪問工具。
“雖然我們還沒有在實(shí)際環(huán)境中發(fā)現(xiàn)這種惡意Android應(yīng)用程序包,但在2016年7月7日09:19:17 UTC被上傳到惡意文件存儲(chǔ)庫服務(wù),而該游戲在新西蘭和澳大利亞正式發(fā)布還不到72小時(shí)。”
Proofpoint指出,由于該游戲還沒有在全球范圍正式推出,很多游戲玩家希望游戲在其地區(qū)發(fā)布前訪問該游戲,這可能導(dǎo)致它們從第三方下載Android應(yīng)用程序包。
與此同時(shí),微軟項(xiàng)目經(jīng)理兼工程師Dennis Delimarsky稱Pokémon GO在連接公共Wi-Fi網(wǎng)絡(luò)時(shí)還可能遭受中間人攻擊。