一個gif遠程crash你的微信!
測試了一下iPhone6,iPhone7不同版本的 iOS上,收到某個天線寶寶的gif,最新版本的微信都會掛。
demo視頻:演示視頻
通過 crash log可以看到微信最新的6.5.8版本在打開 gif 圖片的時候 crash 了。但奇怪的是,每次 crash 的線程都不一樣。
既然靜態的不行,那就上動態調試,利用越獄機器對 wechat 進行動態調試後,發現 crash 會穩定出現在 memset 這個地方:
通過 bt 看調用棧,果然是處理 gif 圖片的時候出了問題,出問題的函數在 updateAllGifItem 這個方法裏:
updateAllGifItem函數裏的某個子函數,在獲取到圖片的某兩屬性的時候,進行了減法,但不幸的是第一個屬性要比第二個屬性小,從而變成了負數。又因為這個值會轉換為unsigned int。所以就會變成一個特別大的數:
接下來程序用這個特別大的數作為了長度來進行 memset導致程序在處理的過程中,讀到了沒有被map的內存從而 造成crash:
memset(x0,x1,x2) =
BTW,試了一下其他的 app 都沒有 crash,猜測這個gif顯示庫應該是微信自己開發的,但處理gif圖片的時候沒有對某些邊界屬性做好足夠的檢查,導致了crash。聽說這個漏洞已經出來2周了,微信到目前為止,依然沒有修複。
樣本圖片:點這裏
作者:蒸米@阿裏聚安全
更多安全類知識分享,請持續關注阿裏聚安全的安全博客
最後更新:2017-05-26 16:31:12