前幾天,PHP出現一個代號為PHP CVE-2018-5711的漏洞,只要是使用GD庫處理圖像的站點基本上會中招。想到公司內部有部分業務正是使用PHP開發的,故而對這個漏洞稍微研究了一下。
漏洞執行過程
也就是說,使用imagecreatefromgif函數時可能觸發該漏洞,導致CPU使用率飆升至100%。目前,該漏洞影響了幾乎所有的PHP版本:
PHP 5 < 5.6.33
PHP 7.0 < 7.0.27
PHP 7.1 < 7.1.13
PHP 7.2 < 7.2.1
當然,大家不要輕易去嘗試,畢竟亂搞是違法的行為,研究時記得在自己虛擬機中還原這一過程就可以了。
漏洞出現原因
出現漏洞的文件為ext/gd/libgd/gd_gif_in.c中代碼:
GetCode會調用GetDataBlock函數讀取GIF圖中的數據。
細心的人也許已經發現端倪了,其實是變量類型轉換引起的。
當GetDataBlock返回值為-1時,第二段代碼中的count值無法賦上該值,所有bug就出現了。
最後,提醒一下廣大開發者和運維兄弟,及時更新擴展,防止出現服務器掛掉的情況!
閱讀更多 架構之美 的文章