圖片來源: 

張啟元部落格

網路玩家張啟元近期在其部落格上貼文指出,統一超商ibon線上售票服務旅遊專區有漏洞,只要修改網頁程式碼數值就可以1元購買多張餐券、遊樂園門票。專家認為這不是什麼重大漏洞,但曝露電子商務網站在設計上不夠周嚴的老問題,呼籲開發者應重視驗證回傳數值,並對網頁程式碼加密保護。

張啟元是利用開發者常用的檢查網頁元素功能(在瀏覽器按下F12)檢視ibon旅遊售票網頁的程式碼,發現竟然可以修改票價金額,再以修改的金額完成線上訂票,最後他成功以1元買到8張票,引起國內媒體關注,紛紛報導。張啟元先前曾因發現到一個可刪除臉書創辦人Mark Zuckerberg文章的漏洞而聲名大噪。

↓ ibon售票的旅遊專區訂票服務在得知情況之後以系統維護的名義暫停服務,至今尚未恢復服務。統一超商表示,事件發生當下內部已偵測到異常發出安全警示,現在已將發生問題的iBon售票系統-旅遊館服務暫時下架,重新檢討設計及流程,目前不論在7-ELEVEN門市或是ibon網站上暫時無法使用旅遊館售票服務。統一超商強調,其他售票服務並沒有受到影響。

張啟元表示,他還測試其他網站,發現也有相似的問題,測試的30個網站有20個存在類似的問題。雖然各業者設計上不相同,但仍可透過修改數值達成目的,例如修改商品數量、運費金額、最後付款金額,或透過修改紅利點數影響金額,甚至修改信用卡付款數值。他已向這些業者回報。

其實像ibon線上售票服務這樣的漏洞,先前就有發生類似的案例。今年4、5月間,一家科技公司老闆利用高鐵售票系統漏洞以超低價格買票搭車,最後遭到警方逮捕。這位科技公司老闆使用外掛程式進入高鐵訂票網頁修改金額,將原本1千多元的票改為100多元,高鐵雖然後來進行修補,但這位科技業老闆仍能修改座位等級從自由座升級為商務車廂。不論ibon或高鐵事件,都曝露網站設計上的瑕疵,使得有心人士可以任意修改資料以低價買到商品,但即使民眾發現有漏洞仍應避免貪小便宜而以身試法。

驗證回傳資料很重要,卻常被忽略

對於ibon設計上存在的漏洞,一位不願具名的資安專家認為,這並非新聞,事實上之前國內也有類似的案例,這次ibon售票系統事件再次曝露了國內開發者在設計上不夠嚴謹的問題,沒有預先設想到有人會刻意修改網頁數值,未對網頁回傳的數值作重覆驗證。

該專家表示,從相關資訊來看,曝露ibon旅遊專區售票系統的邏輯,沒有對用戶回傳數值進行驗證,使用者端可以任意修改數據,系統沒有對回傳數值驗證是否正確合理,這是設計上不夠嚴謹。相較之下,對數字敏感的金融業者則相當重視回傳數值的重覆驗證。

他總結ibon旅遊售票事件是資料正確性的問題。「買了500元的東西,但回傳數值被改為0元,你也接受,當然有問題,這是很多公司都疏忽的問題。」

趨勢資深顧問簡勝財則表示,缺乏相關資料分析ibon售票系統,但從網路上貼出的相關資訊來看,此次漏洞是後台沒有驗證前台送出的訂購資料是否異常,導致消費者可以取巧方式,以相當低價格買到多張優惠票券的不合理情形。建議企業後台一定要建立對前台資訊的驗證機制,而網站的重要程式碼也不能以明碼顯示,需要經過加密予以保護,避免被有心人士修改利用。

程式邏輯與商業邏輯的漏洞

在開發與安全領域將近20年的達友科技技術總監林皇興表示:「這是一個在AP安全上不應該犯的錯誤,而且是一個很容易解決卻很常見的錯誤。」

他認為ibon售票網站的漏洞其實是一個前端數值回傳後端伺服器時,沒有經過數值驗證的錯誤。他表示,這樣的漏洞是軟體開發上應該注意的細節,但是卻可以在一些提供網路銀行服務的業者,或是電子商務網站的購物車下單系統,出現這種常見卻容易忽略的漏洞。

林皇興進一步解釋,為了減少不必要的錯誤,所有系統開發時,都不應該信任所有外部輸入的數值,這也是所有程式開發處理的基本原則和態度,畢竟,外部輸入的數值,在回傳伺服器的過程中,有很多可以被竄改的機會。

具體而言,林皇興指出,ibon售票網站被揭露的漏洞,同時出現程式邏輯漏洞和商業邏輯漏洞兩種疏失。

首先,在程式邏輯漏洞上,前端吐資料給使用者時,開發人員不應該讓使用者可以修改並回傳任何數值的功能,即便是使用瀏覽器的開發者模式,也不應該可以修改數值甚至回傳後端伺服器。

其次是商業邏輯漏洞,購票網站吐表單資料給購票者,表單內有購買的票券項目和價格,使用者雖然可以透過下拉式選單,選擇想要購買的票券和數量,在這個過程中,系統會顯示購票金額供使用者參考,但最後在進行資料回傳時,不應該包含金額回傳,而是直接撈資料庫的資料,計算最後的金額總額,才是比較安全的作法。但ibon網站卻允許使用者可以在前端修改應該預設隱藏的金額資料後,未經任何驗證就回傳後端伺服器,才造成這樣的商業邏輯漏洞。

面對這樣程式邏輯漏洞和商業邏輯漏洞,林皇興表示,這樣的錯誤很難透過源碼檢測(Code Review)發現,連自動化的滲透測試工具,也無法發現這樣的錯誤,只有透過人工的滲透測試(Penetration Testing),才可能發現這樣的邏輯漏洞。採訪報導⊙黃彥棻/蘇文彬

熱門新聞

Advertisement