Vulnerability Detail Report
Vulnerability Overview
- ZDID: ZD-2019-01117
- Vendor: 台灣電力公司
- Title: [Bounty] 台灣電力公司
- Introduction: ebpps2.taipower.com.tw 可以被 HTTP request smuggling攻擊
處理狀態
目前狀態
-
新提交
-
已審核
-
已通報
-
未回報修補狀況
-
未複測
-
公開
處理歷程
- 2019/09/18 14:53:27 : 新提交 (由 Luke 更新此狀態)
- 2019/09/18 20:52:10 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2019/09/21 10:28:14 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2019/09/21 10:28:14 : 修補中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2019/09/21 10:28:14 : 修補中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2019/11/18 03:00:05 : 公開 (由 HITCON ZeroDay 平台自動更新)
詳細資料
- ZDID:ZD-2019-01117
- 通報者:showuon (Luke)
- 風險:低
- 類型:其他 (Other)
參考資料
相關網址
https://ebpps2.taipower.com.tw/simplebill/post-simple-query-bill
敘述
我在9/10時有email給貴公司的漏洞懸賞計劃委員 [email protected],但過了一週後沒有收到回覆,所以在這裡再通報一次,謝謝。
hello 台電你好
我發現 ebpps2.taipower.com.tw 的domain可以被 HTTP request smuggling攻擊!
HTTP request smuggling的概念就是攻擊者可以在一個封包裡,夾帶一些訊息包含在下一個request裡,以下面的例子來說明,當上面的攻擊者傳送的資訊,只被server處理了上半部,那下半部的部份,就會被接在下一個正常的使用者的封包之上,以此來攻擊合法使用者
關於更多HTTP Request smuggling的概念和攻擊,可以參考這兩個連結
https://cwe.mitre.org/data/definitions/444.html
https://portswigger.net/blog/http-desync-attacks-request-smuggling-reborn
那至於台電的網站是如何能被HTTP request smuggling呢?我發現台電的前端server和後端server對於request裡同時出現兩個Transfer-Encoding的header處理方式不同,所以導致這樣的漏洞
ex:
當request是這樣子時
POST / HTTP/1.1
Host: ebpps2.taipower.com.tw
Content-Length: 3
Transfer-Encoding: chunked
Transfer-Encoding: xxx
那台電的前端server會找到 Transfer-Encoding: xxx,不認得此encoding,所以fallback回Content-Length,但是後端server會認得Transfer-Encoding: chunked,然後使用chunked encoding的方式處理request body,所以可以被HTTP request smuggling。
可以參考我的demo影片:
https://www.dropbox.com/s/yy0slrk85ynwhwl/ebpps_vul.mov?dl=0
所以說,當攻擊者傳送content-length是100時,前端server會傳送所有的內容到後端server,但是後端server處理的內容,只有0(在Transfer-Encoding: chunked時,會先給傳送大小size,再帶上內容,最後一段以0 size結尾,可參考https://zh.wikipedia.org/wiki/%E5%88%86%E5%9D%97%E4%BC%A0%E8%BE%93%E7%BC%96%E7%A0%81),剩下的部份,就會讓緊接著的使用者受害。
POST / HTTP/1.1
Host: ebpps2.taipower.com.tw
Content-Length: 100
Transfer-Encoding: chunked
Transfer-Encoding: xxx
0
GET / HTTP/1.1
Host: evil.com
...修補建議
要讓前端server與後端server的configuration同步,也就是說,前端server認第二個Transfer-Encoding header,後端就要認第二個,其它的header處理方式也應該一樣