Solidity 修正影響 0.8.19–0.8.37 版本的 Yul 最佳化器錯誤
Solidity 已在 0.8.38 版本修復一個嚴重程度較低的 Yul 最佳化器漏洞。此漏洞會影響在 Solidity 0.8.19–0.8.37 中啟用 Yul 最佳化器編譯的合約。在特定情況下,過時的內部記錄可能令 Yul 最佳化器把兩個實際上互相重疊的記憶體或儲存位置當作彼此獨立。這可能令合約回傳過時的數值,或遺漏必要的寫入操作。
問題由 Daniel Boye 報告,其後 Surya Prakash Akula 證明,即使沒有使用 inline assembly,普通 Solidity 程式碼亦可能觸發此問題。使用 `--via-ir` 編譯的合約可能廣泛受影響;使用預設 evm assembly pipeline 時,受影響範圍則較窄。停用 Yul 最佳化器時,此漏洞不會出現。
Solidity 團隊掃描約 283,000 次已驗證的 `via-ir` 編譯及 607,000 次 evm assembly 編譯,比較修復前後的 build,沒有發現 bytecode 差異。團隊表示,這顯示漏洞可能相當罕見,但不能保證沒有已部署合約受影響。開發者應升級至 Solidity 0.8.38 或更新版本,並評估以受影響版本編譯的已部署合約。對交易者而言,這是針對智能合約可靠性的警示,並非 Ethereum 網絡或市場出現大範圍中斷的證據。
Neutral
這項公告是有關安全及開發者升級的通知,並非發生漏洞利用、網絡中斷或資金損失的證據。Solidity 將該錯誤評定為低嚴重程度,並表示掃描近 890,000 次經驗證的編譯後,採用及未採用修補程式的建置版本之間沒有發現位元碼差異。這個問題亦須符合與最佳化器及地址重新分配有關的特定條件,因此可能影響的範圍有限。基於這些細節,消息不太可能即時對 ETH 或整體加密貨幣價格造成廣泛影響。
短期而言,交易者可能會留意採用 Solidity 0.8.19–0.8.37 的項目所作出的披露,尤其是使用 Yul 最佳化器或 `--via-ir` 編譯的項目。如果廣泛使用的協議報告已部署的合約存在漏洞,或出現可被利用的損失,市場信心可能轉弱,並引發相關項目代幣被拋售或波動性暫時上升。本文沒有報告任何此類事件,因此沒有足夠根據作出廣泛看淡的解讀。
長遠而言,Solidity 0.8.38 的修補程式及建議的驗證步驟,應可隨着團隊升級並測試受影響的部署,降低持續暴露於風險的程度。與其他編譯器漏洞披露一樣,市場的重要訊號是已確認的漏洞利用、受影響協議的 TVL、緊急暫停,以及項目的補救措施,而不只是編譯器問題已推出修補程式這件事。整體而言,這則消息對市場走向屬中性,但與智能合約風險監察有關。