教學:修復Apache Log4j2錯誤

出自Minecraft Wiki
跳至導覽 跳至搜尋
該頁面的內容不代表Mojang StudiosMinecraft Wiki的官方意見。
警吿:Apache Log4j2遠程程式碼執行錯誤(CVE-2021-44228)十分嚴重。

此錯誤可能導致電腦資料安全受到嚴重威脅,請務必重視

本教學介紹了修復Apache Log4j2相關錯誤的方法。

修復緣由[編輯 | 編輯原始碼]

開源Java日誌框架Apache Log4j2被曝出存在可被利用於遠程執行程式碼的高危錯誤。由於Java版的大部分版本使用了該日誌框架,絕大多數Minecraft玩家都可能因該錯誤而遭受攻擊。

錯誤危害[編輯 | 編輯原始碼]

攻擊者可利用該錯誤在未經授權的情況下在玩家電腦上執行任意命令,包括但不限於下載病毒、佔用系統資源、竊取私隱等惡意命令。由於該錯誤存在範圍廣、利用門檻極低,會給玩家帶來極高的安全隱患。

影響範圍[編輯 | 編輯原始碼]

註:此處只列舉了被影響的Minecraft遊戲版本。實際上所有使用了此日誌框架的程式都受此錯誤影響。

已知可能被該錯誤影響的Minecraft版本有Java版1.7.213w39a)至Java版1.181.18.1-rc2)的用戶端與伺服器端,包括:

  • 原版用戶端與伺服器端
  • 安裝了模組的用戶端與伺服器端
  • Paper、Spigot等大多數第三方伺服器端
  • 其他符合條件的Java版用戶端與伺服器端

以下Minecraft的版本不受影響:

檢驗方式[編輯 | 編輯原始碼]

  • 如果使用用戶端,你可以在遊戲內聊天欄輸入${jndi:ldap://minecraft.wiki}來測試是否存在log4j錯誤。如果輸入後出現短暫的卡頓,則説明錯誤存在(但要注意的是,某些用戶端輸入其他文字也會卡頓一下,所以應當嘗試先輸入普通聊天文字再嘗試;而離線模式本身就不應存在卡頓現象);如果沒有出現卡頓現象,則説明用戶端是安全的。
  • 可以檢查.minecraft/assets/log_configs下的檔案是否與Mojang提供的最新版本一致。

修複方式[編輯 | 編輯原始碼]

原版用戶端[編輯 | 編輯原始碼]

官方啟動器[1]
  • 關閉所有正執行的遊戲程式並重新啟動啟動器。啟動遊戲時,已修復的版本會自動下載並安裝。
第三方啟動器
  • 關閉遊戲,將啟動器更新到最新版本,並留意更新日誌中是否説明修復了此錯誤。如果沒有,請參照§ 臨時防禦方案修復。
  • PCL、HMCL、BakaXL等常見的第三方啟動器均已針對此錯誤進行了緊急更新。如果你正在使用這些啟動器,請儘快升級到最新版本。

模組載入器[編輯 | 編輯原始碼]

Fabric
  • 將Fabric Loader更新到0.12.9及以上版本。
Forge
  • Forge聲明其多個版本已包含針對此次log4j錯誤的緊急更新,推薦的版本:
    • 1.18-38.0.17
    • 1.17.1-37.1.1
    • 1.16.5-36.2.20
    • 1.15.2-31.2.56
    • 1.14.4-28.2.24
    • 1.13.2-25.0.221
    • 1.12.2-14.23.5.2856
  • 1.12.2與1.16.5版本可嘗試安裝此修復mod來進行修復。
其他模組載入器
  • 由於多數其他模組載入器已停更,它們都已不再安全,請修復啟動器,或參照§ 臨時防禦方案修復。

原版伺服器端[編輯 | 編輯原始碼]

1.18
  • 關閉伺服器端,升級到1.18.1,或者按照1.17的方法修復。
1.17
  • 關閉伺服器端,在啟動腳本中加入JVM參數:-Dlog4j2.formatMsgNoLookups=true
1.12至1.16.5
  • 關閉伺服器端,下載log4j2_112-116.xml到伺服器的工作路徑。然後在啟動腳本中加入JVM參數:-Dlog4j.configurationFile=log4j2_112-116.xml
1.7至1.11.2
  • 關閉伺服器端,下載log4j2_17-111.xml到伺服器的工作路徑。然後在啟動腳本中加入JVM參數:-Dlog4j.configurationFile=log4j2_17-111.xml

第三方伺服器端[編輯 | 編輯原始碼]

Paper、WaterFall、Velocity、Spigot
  • 這些伺服器端均已發佈緊急更新,請關閉伺服器端,更新到最新版本。
BungeeCord
  • 不受影響,無需操作。
其他伺服器端
  • 請先關閉伺服器端,然後參照MCBBS上的帖子修復。如果你使用的伺服器端沒有在帖子中列出,請將伺服器端更新到最新版本,並留意更新日誌中是否説明修復了此錯誤。如果沒有,請參照§ 臨時防禦方案修復。

臨時防禦方案[編輯 | 編輯原始碼]

以下方案僅適用於使用log4j 2.10.0及以上版本的用戶端或伺服器端。Java版1.17-pre1及以上的版本使用log4j 2.14.1,故可以使用以下方法。[2]

  • 加入JVM參數:-Dlog4j2.formatMsgNoLookups=true
  • 將系統環境變量LOG4J_FORMAT_MSG_NO_LOOKUPS設定為true

13w39a17w14a(使用log4j 2.0-beta9)以及17w15a21w20a(使用log4j 2.8.1)不能使用以上方法。

外部連結[編輯 | 編輯原始碼]

參考[編輯 | 編輯原始碼]

導覽[編輯 | 編輯原始碼]