阿碼外傳-阿碼科技非官方中文 Blog: 2008年12月15日

2008年12月15日

開放源碼 World Recipe 2.11 存在多個 XSS 弱點

阿碼科技的資安團隊於本月 12 號發現一套叫作 World Recipe 〈世界食譜〉的開放源碼〈註一〉套件存在有多個跨站腳本攻擊〈Cross-site Scripting, XSS〉問題. 此套件是以 ASP.NET 2.0 C# 所撰寫的, 其具備快速建置, 完整的網站功能頁面與 SQL 資料庫等特色, 獲得不少的口耳相傳與採用.

我們在發現之初即通知原始作者, 並在本月 15 號通知全球弱點公開揭露平台 SecurityFocus, 刊載為 BugTraq 499217: Multiple XSS Vulnerabilities in World Recipe 2.11, 唯目前官方仍沒有針對 2.11 版本的修補程式.

此次揭露的弱點類型都是可利用於跨站腳本攻擊〈XSS〉, 分別是位在建置後網站第一層根目錄

1. emailrecipe.aspx 的參數 n
(譬如http://xxx-website/emailrecipe.aspx?n=XSS)

2. recipedetail.aspx 的參數 id
(譬如http://xxx-website/recipedetail.aspx?id=XSS)

3. validatefieldlength.aspx 的參數 catid
(譬如http://xxx-website/validatefieldlength.aspx?catid=XSS)

等三支的 ASP.NET 網頁. 我們的工具所計算出來的受駭風險指數高達滿分 5 分 (在實務上 3 分以下的攻擊成功機會就非常之低).

validatefieldlength.aspx 這支程式使用到參數 catid, 但沒有正確地驗證與過濾, 因此攻擊方可利用於誤導受駭方執行任意的腳本程式, 請見下圖的概念證明〈Proof of Concept〉:





當然, ASP.NET Framework 不是省油的燈, 在 emailrecipe.aspx 與 recipedetail.aspx 可看到其基本保護, 當嘗試輸入可疑的字串時, 會被 ValidateRequest 攔下. 請見下圖的概念證明:



不過因為 ValidateRequest 是採用黑名單的方式, 多少會有規避的空間. 一旦當攻擊方發現繞過的方式, 剩下的最後一道防線就是瀏覽器本身了. 目前各家的瀏覽器對不同的跨站腳本攻擊〈XSS〉語法有不同的表現, 我們採用了一個對微軟 IE 有效的攻擊語法, 並成功地繞過 ValidateRequest 的攔阻, 目前僅有最新的 IE8 Beta 2 能夠偵測到此跨站腳本攻擊〈XSS〉.
請見下圖的概念證明:



註一: 開放源碼套件以可自由下載, 散佈, 使用, 且多半是免費提供等特色受廣大使用者所喜愛.但開放源碼這種草根性的社群開發模式, 通常沒有強制要求嚴謹的軟體測試或壓力測試, 其軟體品質, 尤其是資安品質, 是否符合使用者的期待, 是有待商榷的. 有一些使用者會認為開放源碼的原始碼是攤在陽光之下, 有比較多的機會被程式高手或資安專家看到錯誤或安全漏洞, 因此其軟體品質或資安風險應該有一定程度的"保證". 很明顯地, 光有這樣的期待是無法有效地量化資安風險, 除非有效地利用源碼檢測等白箱工具來驗證其資安品質, 否則即使諸多使用者或企業樂見開放源碼的多樣化選擇, 也不敢貿然採用.

作者 Dr. Benson Wu 為 阿碼科技 產品經理


繼續閱讀全文...