觀點 · 資訊分享
PHP 8.2 到 8.5 四個版本同一天發安全更新:修補 openssl_encrypt 的記憶體損壞漏洞
PHP 官方在 7 月 2 日同時釋出 8.5.8、8.4.23、8.3.32、8.2.32 四個安全版本,主要修補 openssl_encrypt 使用特定加密演算法時可能寫壞記憶體的問題(CVE-2026-14355)。
- 發布
- 2026-07-02
- 篇幅
- 約 4 分鐘 · 1,657 字
- 結構
- 7 節 + 3 題常見問題
- 標籤

一句話看懂:PHP 在 7 月 2 日同天釋出 8.5.8、8.4.23、8.3.32、8.2.32 四個安全版本,主要補上 openssl_encrypt 在特定演算法下可能寫壞記憶體的漏洞。

先用白話講:這個漏洞在說什麼?
想像你要寄一件東西,先量好大小訂了一個紙箱。結果寄送前要多包一層保護墊,東西變大了,卻還是塞進原本那個紙箱,邊緣的東西就被擠到箱子外面,把隔壁的貨也壓壞了。
CVE-2026-14355 就是這種「箱子訂小了」的問題。PHP 的 openssl_encrypt() 在使用 AES-WRAP-PAD(一種用來保護金鑰的加密方式)時,輸出緩衝區只按照原始資料的長度配置,沒有把這個演算法依規格會多出來的部分算進去,OpenSSL 就可能寫到配置範圍之外,弄壞記憶體管理用的資料,最後讓程式異常中止。
發生什麼事
PHP 官方網站在 2026 年 7 月 2 日公布四個版本,全部標示為安全版本:
| 系列 | 修正版本 |
|---|---|
| PHP 8.5 | 8.5.8 |
| PHP 8.4 | 8.4.23 |
| PHP 8.3 | 8.3.32 |
| PHP 8.2 | 8.2.32 |
主要修正的 CVE-2026-14355,在 NVD 上由 PHP 官方([email protected])登記,描述指出 8.2、8.3、8.4、8.5 各系列低於上述版本的都受影響,官方給的 CVSS 為 5.6(中等)。CVE 編號在 7 月 3 日才在 NVD 公開。
其他一併修的東西
依官方 ChangeLog:
- 8.5.8 與 8.4.23:修正 Phar 的
addEmptyDir()可以繞過「.phar 目錄保護」的問題;GD 圖片函式庫修了一個重複釋放記憶體(double free)的錯誤 - 8.3.32:另外修了
file_get_contents在設定 Proxy、讀取 https 網址時會當機的問題(CVE-2026-12184) - 同一天,PHP 也公布 8.6.0 Alpha 1,這是測試用的早期版本,官方明講不要上正式環境,Alpha 2 預計 7 月 16 日
給開發者的技術細節
先確認自己現在跑的版本:
php -v
升級時的重點:
- Docker 使用者:把 image 標籤換成對應的新版本(例如 8.4 系列用 8.4.23 之後的映像),重新 build 並部署
- 主機代管:到主機商後台切換 PHP 版本,或請對方升級;小版本更新通常不需要改程式
- 想知道自己有沒有用到這個演算法:搜尋專案裡
openssl_encrypt的呼叫,看演算法名稱是否為 AES key wrap 搭配 padding 那一類(這是我建議的檢查方式,官方沒有提供受影響清單)
我的看法
這次漏洞的觸發條件相當專門,一般的網站程式大多用 AES-256-CBC 或 GCM 加密,不會碰到 AES-WRAP-PAD,所以不必恐慌。但我自己的習慣是:PHP 官方標明「這是安全版本」的小版本,就排進下一次維護時間升級,因為同一批更新常常還夾帶別的修正,像這次的 Phar 與 GD 部分,對上傳功能多的網站就比較有感。
另外幫接案的人提個醒:很多客戶的舊主機還停在好幾個小版本以前,沒有人在更新。與其等漏洞出了才處理,不如在維護合約裡把「每季檢查 PHP 版本」寫進去。
名詞小辭典
- CVE:資安漏洞的公開編號,像漏洞的身分證字號。
- 緩衝區(Buffer):程式暫時放資料的記憶體區塊,大小要事先配置好。
- CVSS:漏洞嚴重程度的評分,滿分 10 分,數字越高越危險。
- Phar:PHP 的打包檔格式,可以把多個檔案包成一個檔案。