python xml vulnerabilities
It’s just XML, what could probably go wrong? - Christian Heimes
And …
XML is crap. Really. There are no excuses. XML is nasty to parse for humans, and it’s a disaster to parse even for computers. There’s just no reason for that horrible crap to exist. - Linus Trovalds
Issue
最近 review 公司的一些外部服務的 callback api 的安全性。
其中一個 api 交換資訊使用 xml 格式傳送,而 parse 時用 Python standard library 的 xml module
用 wiki 的 billion laughs sample code 當 payload 測試果然掛了,
充滿惡意的憤青們可以只用一台電腦癱瘓掉家裡所有 web node,
不過因為有鎖 ip ,所以也不是一個嚴重的安全性問題,廠廠。
Solutions
看到問題後第一想法是不要用 xml module 處理,改用 lxml 之類的 3rd party lib
後來想想這問題應該滿普遍的,應該會有其他解法可以考慮。
期望可以有 Monkey Patch 或是至少提供相同 API 讓 migration 變得容易
問 Google 老師找到 defusedxml 專案看起來有八成七像
提供了相同 API,在 xmlrpc 部分是用 monkey patch,可以無痛轉換。
Case closed
基本上在一個後 json 時代講 xml 實用性實在不高,不過人在江湖走跳,
難免介接利用其他第三方服務,尤其是銀行業仍偏好使用 xml,
在 parse 的時候還是需要注意是否會產生類似安全性問題。
Bomb has benn defused, counter terrorists win!
btw 找不到開頭引言的來源,所以確實 Python developer 曾經講過這句話,然後在 repo 被公開處刑?