ImageMagick最嚴重的漏洞將允許駭客自遠端執行程式,且已有攻擊程式出爐

ImageMagick內含可遠端執行程式的重大安全漏洞

安全研究人員Ryan Huber本周指出,受到各網站廣泛採用的開放源碼圖像處理軟體套件ImageMagick含有多個安全漏洞,當中最嚴重的漏洞將允許駭客自遠端執行程式,且已有攻擊程式出爐。

以C語言撰寫的ImageMagick軟體套件可用來顯示、轉換及編輯圖像,支援逾200種圖像格式,並可跨平台運作,估計至少有數百萬台的網頁伺服器採用ImageMagick 。

Huber表示,有不少圖像處理外掛程式仰賴ImageMagick函式庫,諸如PHP的imagick、Ruby的rmagick與paperclip,或是nodejs的imagemagick,不論是使用了ImageMagick或受影響的函式庫都會受到波及。

Huber強調,他們相信已經有人得知該漏洞,並將對ImageMagick用戶造成威脅。此一重大漏洞的編號為CVE-2016–3714,只要是允許使用者上傳圖像的網站都會受到影響,駭客可上傳惡意圖像以迫使伺服器執行任意程式。

Huber及ImageMagick專案都發表了暫時補救方案,建議網站新增多個原則網域(policy domain),並驗證所有的圖像檔案。


不用說,insoler當然也有使用ImageMagick!yell有沒有受到影響我就不知道了!這是某老蘇要去處理的事情!tongue-out

我不知道「policy domain」是什麼?從來都沒聽過!yell

🍎たったひとつの真実見抜く、見た目は大人、頭脳は子供、その名は名馬鹿ヒカル!🍏

我上次在這篇文章裡面就有提到避免駭客上傳「造假的RAW檔案」的事情:

解決無法正常上傳RAW照片,getimagesize讀取RAW圖檔大小的問題

為了避免駭客上傳「造假的RAW檔案」所以在上傳檔案之後,還是必須檢查一下上傳的到底是不是RAW檔案?

當然,除了「造假的RAW檔案」也絕對會有「造假的JPEG檔案」!所以駭客想要在相片模組裡面上傳「造假的JPEG檔案」到insoler的相簿裡面,不管ImageMagick有沒有安全性漏洞,都是絕對不可能的任務!

我參考了一下別人提到的檢查ImageMagick弱點的方式,用BBEdit製作了一個文字檔案,內容是:

push graphic-context
viewbox 0 0 640 480
fill 'url(https://example.com/image.jpg"|ls "-la)'
pop graphic-context

 

但是在儲存檔案的時候,故意儲存的檔案名稱是test.jpg!然後把這個測試用的「造假的JPEG檔案」放在insoler的Web Server主機上面。

imagemagick693bug001.jpg

你可以看到假的test.jpg的檔案大小其實只有非常小的111byte而已!

imagemagick693bug002.jpg

我把test.jpg放在下載檔案夾裡面以後,打開「終端機」然後輸入cd downloads,打開下載檔案夾,然後輸入「convert test.jpg test.png」這個轉換圖片格式的指令。你可以看到居然真的執行隱藏在「造假的test.jpg檔案」裡面的UNIX命令列的「ls -la」列出檔案的這個指令!

imagemagick693bug003.jpg

因為我還沒有升級,所以還在使用ImageMagick 7.0.1-1 and 6.9.3-10版本的話,就只能使用暫時的方法修改「policy.xml」,然後再執行一次完全相同的「convert test.jpg test.png」這個轉換檔案格式的指令。

imagemagick693bug004.jpg

那麼,要怎樣修改「policy.xml」檔案呢?當然是要先去Mac OS X系統磁碟機裡面的「/usr」檔案夾裡面找到ImageTragick的「ImageTragick-6」檔案夾,裡面有一些XML檔案,用BBEdit等程式編輯工具程式打開「policy.xml」。

imagemagick693bug005.jpg

原本的「policy.xml」檔案內容就像這樣,寫了一堆註解,實際上執行的只有 <policy domain="cache" name="shared-secret" value="passphrase" /> 這一行指令而已。

imagemagick693bug006.jpg

 我在最後一行的前面追加這一些指令:

imagemagick693bug007.jpg追加的條件內容就像這樣:

  <policy domain="resource" name="temporary-path" value="/tmp"/>
  <policy domain="resource" name="memory" value="256MiB"/>
  <policy domain="resource" name="map" value="512MiB"/>
  <policy domain="resource" name="width" value="8KP"/>
  <policy domain="resource" name="height" value="8KP"/>
  <policy domain="resource" name="area" value="128MB"/>
  <policy domain="resource" name="disk" value="1GiB"/>
  <policy domain="resource" name="file" value="768"/>
  <policy domain="resource" name="thread" value="2"/>
  <policy domain="resource" name="throttle" value="0"/>
  <policy domain="resource" name="time" value="120"/>
  <policy domain="system" name="precision" value="6"/>
  <policy domain="coder" rights="none" pattern="EPHEMERAL" />
  <policy domain="coder" rights="none" pattern="HTTPS" />
  <policy domain="coder" rights="none" pattern="MVG" />
  <policy domain="coder" rights="none" pattern="MSL" />
  <policy domain="path" rights="none" pattern="@*" />

 

不需要重新啟動Mac OS X電腦,也不用登出、重新登入帳號,只要修改好「policy.xml」並儲存,就會立即生效了!這樣雖然可以防止convert去轉換假的JPEG檔案,但我猜想這也只能阻擋一時,不是長久的辦法!

但不管ImageMagick要不要修改這些安全性漏洞,也不管未來ImageMagick還有沒有更多的重大漏洞,insoler絕對會比其他網站更安全許多!特別是我自己修改、編寫的Photos相片模組!因為我從一開始就知道會有駭客偽造假的JPEG檔案,想辦法入侵到某個網站!所以到目前為止也沒有讓駭客成功上傳偽造的JPEG檔案過!

🍎insoler社群網站CEO、兼站長兼顧問兼工程師