這段時間jsonp漏洞再一次證明了一個微小的漏洞,經過攻擊者的巧妙而持久的利用,也會對企業和用戶造成巨大的危害。而本文將要介紹的JS泄露敏感信息問題也是如此,攻擊者不僅可以輕松收集用戶手機號,姓名等隱私信息,更可以借此攻入企業后臺甚至是getshell。本文將通過一些公開和未公開的漏洞詳細闡述此類漏洞。
JavaScript作為一種相當簡單但功能強大的客戶端腳本語言,本質是一種解釋型語言。所以,其執行原理是邊解釋邊運行。上述特性就決定了JavaScript與一些服務器腳本語言(如ASP、PHP)以及編譯型語言(如C、C++)不同,其源代碼可以輕松被任何人獲取到。一些粗心的開發者將各式敏感信息存儲在JavaScript腳本中,由于JS的特性,攻擊者可以對這些信息一覽無余,從而導致對WEB服務和用戶隱私造成不同程度的威脅。
根據泄露的內容、利用方式以及帶來的危害不同,大致可以將JS敏感信息泄露分為以下三類:
1. JS文件泄露后臺管理敏感路徑及API
此類問題主要存在于后臺登陸頁面以及類似網頁內引入的JS文件中。在企業滲透測試時如果遇到后臺,在SQL注入或者是路徑爆破都試過,但是仍然無法進入后臺時。根據此類漏洞,說不定登陸頁面下引入的js文件暴露的后臺路徑會成為突破口。如果某臺的某一個頁面沒有對是否登陸狀態做驗證,攻擊者就可以一次未授權訪問這些暴露的API,實現篡改前臺內容甚至是getshell。 下面這個某大型互聯網服務提供商的房產后臺頁面引入的js文件泄露后臺接口信息,就是非常典型的例子:
(信息泄露源是房產管理登陸后臺頁面下的common.js)
(js文件中的urlMap對象內容完整的泄露了后臺所有功能實現的API,因此攻擊者無需登陸就可以進行未授權操作)
早在12年gainover便在烏云漏洞報告平臺上給出了很好的實例: WooYun: PKAV騰訊專場 - 2. 騰訊產品交流平臺的一個js文件泄漏了一個url之后
2. 頁面內JS泄露http-only保護的cookie
因為此類問題利用方式和造成的危害與即將談論到的第三類問題不同,所以把這類問題單獨拿出來講一講。XSS常見利用手段是劫持用戶cookie并登陸其賬戶,但添加了http-only標記的cookie客戶端腳本無法讀取,該項技術已經成為減小XSS帶來的危害的重要手段。部分廠商更是因此降低了對XSS的評級。不過千里之堤潰于蟻穴,可愛的程序員直接將受http-only保護的cookie寫入頁面,導致通過利用crossdoamin.xml配置不當等漏洞,攻擊者可以輕松跨域讀取到受保護的cookie,攻擊者登陸用戶賬戶登錄的夢想得以延續。其實在烏云Zone中WEB前端安全大牛EtherDream早已從漏洞成因檢測等方面撰文進行了闡述。
(知道首頁js內直接輸出受保護的BDUSS)
烏云上也不乏良好的實例,比如下面這個由于百度知道crossdomain配置不當,再結合知道頁面內的js直接輸出用戶的BDUSS,成功繞過了http-only的保護: WooYun: 我是如何竊取到百度受http-only保護的cookie的(3)(附簡單POC)
3. 頁面內JS以及AJAX請求泄露用戶敏感信息
經過以往測試經驗的歸納,此類漏洞常見該類型的泄露常見于網站評論功能實現處。其實該類型的漏洞比通過jsonp漏洞收集用戶敏感信息來的更加快捷容易。由于程序員疏忽直接在頁面的js以及AJAX請求返回的內容中輸出參與評論用戶的敏感信息,導致攻擊者可以輕松獲取用戶的手機號,真實姓名,注冊郵箱,住址甚至有可能獲取用戶手機的IMEI,和抽獎和抽中的游戲禮包號。泄露內容千奇百怪,遇到此類問題時,看著泄露的內容時常會被雷到。從個人的測試經驗來看,涉及的廠商范圍廣泛,從某搜索服務提供商下的訂票網站、在線掛號網站到某公司旗下的大型游戲網站都發現過此類漏洞,其他廠商肯定也存在該類問題。不需要SQL注射脫庫,黑產哥通過編寫爬蟲就能大批量的獲取用戶的敏感信息,利用難度小,危害卻很大。
(某FM類應用評論處泄露匿名評論用戶郵箱,手機號)
(某大型游戲網站抽獎頁面下泄露獲獎用戶禮包兌換號碼)
(某應用商店獲取評論內容ajax請求中泄露用戶imei和真實ip)
烏云上也有相關的例子(第一個告訴我們獲取音樂人明星的手機號和QQ號不是夢,第二個告訴我們網上看病,隱私會被人看光光):
WooYun: 百度某站一處設計缺陷導致部分用戶手機號與郵箱等信息泄漏
不管是第一、二還是第三種漏洞,他們都有一個共同的檢測方式,那就是查看源代碼然后在源代碼中搜索 (Ctrl+F) 常見的泄露點關鍵詞”phone”,”email”,”ip”等等。當然不同情況還是需要不同對待的:
對于第一種泄露形式的檢測相對容易但是可能利用可能相對吃力,在碰到企業后臺或者是類似服務時,查看頁面也引入的js文件,在文件中查找”.html”,”.do”,”.action”等關鍵詞會幫助快速發覺此類問題,不過對于相對復雜的情況還是需要沉下心將每一個js耐心的看過去。認真,你就贏了。
對于第二、三種泄露,在查看源代碼時搜索頁面內腳本是否存在泄露得同時,可能還需要檢測ajax響應的內容,所以通過Fiddler這類抓包軟件查看服務器響應的內容來查找,也絕對是手動查找該類型漏洞的最好方式。
漏洞檢測自動化絕對是我們的終極目標,對于該類問題的自動化檢測,白帽子EtherDream的文章(http://drops.wooyun.org/tips/2834)給了我們不錯的啟發,通過編寫Chrome插件我們可以添加檢測規則,即上文提到的常見關鍵詞,在正常瀏覽頁面的同時挖掘漏洞,一舉兩得。
此類漏洞修復相對容易,在明白了JavaScript的特性以后,不把此類敏感信息直接存儲進頁面內的js和ajax請求響應內容中就可以解決這類問題。不過根除此類問題之道還是需要程序員提高安全意識,從泄露用戶隱私信息到威脅企業安全,再小的問題也會帶來蝴蝶效應,畢竟安全無小事。
(1] 《WEB之困》,Zalewski,機械工業出版社 (2] 《HttpOnly 隱私嗅探器》,EtherDream,烏云知識庫