Apple 軟體漏洞造成 PNG 圖片顯示不一樣

在 2021 年 12 月底在 GitHub 有一則 Issues 特別有趣,他主要是在說明 Apple 在實作自己的 parallel-decodable PNG 有一些疏失,所以會有漏洞發生這位作者就用了這個漏洞做了一個測試網頁。

在下面這張圖可以看到左邊是使用 Safari 而右邊是使用 Chrome 開啟網頁的,而使用 Safari 開網頁的時候它會直接使用 Apple 系統的 parallel-decodable 來處理 PNG 圖片,而 Chrome 會使用自己解碼器來處理 PNG 圖片,所以就可以在網頁上明顯地發現它們會顯示不一樣的結果,有興趣的人可以打開 PNG Parser Differential 網頁看看或是直接開啟 pngdiff 這張圖片 。

其實這個功能原本是要來加速 PNG 圖片開啟速度的,但是它在底層做解壓縮的時候犯了一點錯誤,它的問題在於 decompress(a + b) != decompress(a) + decompress(b) 就是一個數學問題,不知道這個問題在新的系統會不會做修復。

有興趣可以看一下 David Buchanan 的專案 ambiguous-png-packer 理解一下它是怎麼執行的。