Before all
這是一份對我AIS3時做的專題進行的整理,但是相關軟體和一些關鍵部分將暫時無法撰寫(0 day仍在通報中)
我想蠻多人都有用過LaTeX這個數學排版語言,但可能大家並不知道LaTeX的編譯其實有很多種kernel,相關的衍伸套件與軟體更是不勝枚舉,從而產生了一些有趣的利用方法
攻擊面大致分兩種:
- 一個網站使用了有問題的LaTeX套件
- 受害者打開了惡意的 .tex 檔案,並用有問題的軟體讀取它
本文對於LaTeX相關套件的漏洞利用方法分三種:
- 既有函數的濫用
- 基於解析函數的注入攻擊
- 有問題的模塊利用
事實上,這些研究的威脅性並沒有那麼大,但簡單易理解的利用方法依然值得玩味,也期待有人玩出更多花招XD (整個ais3我大概只有三天研究,盡力ㄌ)
既有函數的濫用
利用既有函數的功能可以打出 LFI, oob write, Click XSS, RCE和DoS
LFI
因為LaTeX支援引入模板檔案,導致可以進行檔案讀取。
很多編輯器的防治方法是強制加入 .tex 的副檔名,基本上不要是過舊的語言版本就沒方法繞ㄌ
1 | \input{/etc/passwd} |
oob write
道理跟剛剛LFI一樣,問題出在寫檔函數
1 | \newwrite\outfile |
Click XSS
LaTeX支援url,導致可以塞入 javascript:...
這類的協議濫用,受害者點下去後就開心執行javascript…
1 | \url{javascript:alert(1)} |
RCE
在LaTeX中,有些預定函數如 \write18
本來的功能就是執行系統命令,不過這個東西在編譯的時候可以自行加入--no-shell-escape
的flag進行防治。
1 | \immediate\write18{env > output} |
DoS
重複定義,打法跟fork bomb很像
1 | \def\x{\x}\x |
不過基本上都會撞到記憶體限制
基於解析函數的注入攻擊
其實我有在某些解析器打出其他注入法可以玩XSS,不過現在不能公開QwQ
網路上有個奇怪的payload \input{|"whoami"}
,不過好像都沒有發現原因。
打開overleaf試了下,發現居然可以?!
啊哈,原來因為有獨立VM所以變成一個issue
但…為什麼會這樣?
故意製造了一下error追原因
問題好像出在texlive這個解析器身上,code review:
https://github.com/TeX-Live/texlive-source/blob/ab42be5a046c960f3ff4a896b1beda6347cb3799/utils/asymptote/picture.cc#L410
這個函數會把所有參數吞了以後丟到一個vector去執行它,然後沒有過濾?!
試了幾個跟texlive相關的軟體發現果然可以,當中不乏可以達成點開檔案即RCE的弱點…
有問題的模塊利用
pythontex可以執行任意python指令並輸出結果,有些LaTeX軟體又可以自動下載第一次使用的模塊,就開心RCEㄌ
晚安狐狸晚安我的世界
喵喵喵
我是鯨魚