Before all
其實我本來在我Blog簡單發了篇:「那些年,LaTeX的N種利用方法」,但今天師大面試後想了想…最近整個通報也告一段落了,應該來重新整理完整的發布過程owob
反正絕對不是我今天高鐵坐過頭趕回來,做了一堆事真的累了想耍廢
介紹
這是一份對我AIS3時做的專題進行的整理,包含多個LaTeX相關軟體漏洞/可能的利用點挖掘:
Project | Vuln |
---|---|
NASA-LaTeX-docs | Remote Code Execution |
Gummi | Remote Code Execution |
PythonTex(連帶影響多個LaTeX compiler像MikTex) | Remote Code Execution |
latex2html | LFI |
latex2html | XSS |
我想蠻多人都有用過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 |
不過基本上都會撞到記憶體限制
基於解析函數的注入攻擊
網路上有個奇怪的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軟體(像是MikTeX)又可以自動下載第一次使用的模塊,就開心RCEㄌ