2021.12.16 文章內容更新:
已發現原修補版 2.15.0 仍存在有漏洞風險,並有第二個 Log4j 漏洞 CVE-2021-45046 被發布,建議使用者盡速更新至 2.16.0 版本。(詳細資訊請見下文)
今年 11 月底阿里雲安全團隊發現,並向 Apache 基金會通報了名為 Log4Shell 的遠端程式碼執行漏洞 (Remote Code Execution, RCE),編號為 CVE-2021-44228 的該漏洞被通用漏洞評分系統 (Common Vulnerability Scoring System, CVSS) 評為滿分 10 分,嚴重度與影響範圍皆十分可觀,包含 Apple iCloud、Microsoft、Steam、Minecraft 等知名廠商都慘遭波及,可說是在 2021 年底的全球資安圈拋下一枚震撼彈。
CVE-2021-44228 漏洞的起因,發生於 Java 開源日誌資料庫 Log4j 的 JNDI Lookups 插件,Log4j 是一套專門提供日誌 (Logging) 紀錄管理的框架 (Framework),在軟體程式的開發中是十分基礎且常見的套件。
而 JNDI(Java Naming and Directory Interface,Java 命名和目錄介面)則提供了開發者們一種方法,使其能夠透過例如輕型目錄存取協定 (Lightweight Directory Access Protocol, LDAP) 等目錄服務,從遠端載入 Java 物件。
由於 JNDI Lookups 插件預設並沒有阻擋對於 RMI/LDAP/CORBA 等服務的支援,因此攻擊者可指定並載入惡意的遠端目錄服務,像 CVE-2021–44228 這樣藉由 JNDI 功能的濫用,從惡意目錄服務中載入含有惡意操作的 Java 物件的攻擊行為,便稱作 JNDI Injection。
Log4Shell 漏洞允許遠端攻擊者發送含有惡意指令的 HTTP 連線,至使用了版本低於 2.15.0 的 Log4j 套件版本之 Apache 伺服器,當伺服器收到該連線後,便會將這筆 WebLog 儲存、並且執行儲存於 Log 中的惡意指令,進而加載惡意的 Java Class 檔案,最終令攻擊者得以直接奪得系統控制權。
過去已有無數個應用程式曾採用 Log4j 框架進行開發,因此,Log4Shell 漏洞的橫空出世帶來了極為廣泛且嚴重的影響,包含 Apple iCloud、Microsoft、Steam、Minecraft、Twitter 等人們耳熟能詳的大型廠商皆深受其害。網絡安全公司 Tenable 的 CEO Amit Yoran 更稱 「Log4Shell 漏洞是過去十年中最大型且最危急的單一漏洞」,甚至表示這很有可能是現代計算機歷史上最大的漏洞。
而服務同樣受到 CVE-2021–44228 漏洞影響的 Cloudflare,則在發布於該公司部落格的相關文章內,指稱 CVE-2021–44228 這項針對 Log4j 的遠端程式碼執行漏洞,幾乎可說是繼 2014 年被發布的 HeartBleed 漏洞 (CVE-2014–0160) 與 ShellShock 漏洞 (CVE-2014–6271) 後,在網際網路上最為嚴重的漏洞之一。
不幸中的大幸是,Log4j 已經發布了因應 CVE-2021–44228 漏洞進行修補的新版本,目前已知遭受此漏洞影響的 Log4j 為 2.0 到 2.14.1 等版本,建議開發者立即升級至 2.15.0 版,以避免這波核彈級的駭侵風險;請特別注意,在阿里雲安全團隊的研究中,亦表明了 2.15.0-rc1 版本可被繞過,而 2.15.0-rc2 與 2.15.0 正式發布版以後的版本則是安全無虞的。但該修補版本在後續研究中被證實仍可能存在存在 DoS 攻擊風險, 建議升級至新發布的 2.16.0 版本已確保安全。(2021.12.16 補充說明)
若是無法立即升級,則建議 Log4j v2.10.0(含)以上版本確保客戶端與伺服器端的 formatMsgNoLookups 參數設定為true。如無特別需要,也可以直接禁止對外連線,以阻斷 JNDI Injection 的攻擊鏈。
奧義智慧系統均已通過檢測,並未受到 CVE-2021–44228 漏洞影響。此外,Xensor MDR 不僅可監控到駭客利用漏洞所產生的內網攻擊活動,也已迅速地於上週末增加了 Log4j Jar 的自動盤點功能,協助客戶找出是否有端點或應用程式使用到具此漏洞的 Log4j 版本,以利進一步評估潛在的風險,並與企業客戶攜手一同協防,度過這場突如其來的資安風暴。
Log4Shell 漏洞全面爆發後,很快地在隔週的 12 月 14 日,衍生的新漏洞 CVE-2021-45046 也跟著被發佈,該項漏洞中顯示,針對有改過預設 configuration 的 Log4j 版本,仍然可能存在有 RCE 問題。
而介於 2.7.0 到 2.14.1 之間版本的 Apache Log4j,如果 custom layout 引入${ctx:...},也就是 ThreadContext 的變數值,便有可能可以繞過針對LOG4J_FORMAT_MSG_NO_LOOKUPS = True的檢查:
# vulnerable in 2.14.1 even with ENV LOG4J_FORMAT_MSG_NO_LOOKUPS
trueappender.console.layout.pattern = ${ctx:apiversion} — %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L — %m%n
然而,實作上這項繞過的利用還是有一定的困難度,況且前提還需要改過預設 Layout,因此可以算是不容易被實現的繞過。除此之外,Log4Shell 漏洞爆發後的修補版本 2.15.0,被發現仍可能被攻擊者利用惡意的查詢輸入引發 DoS 攻擊(Denial-of-Service Attack,阻斷服務攻擊)。
部分研究指出,這項 CVE 漏洞的相關描述,如觸發方式和有何影響的敘述較為模糊,在實測時並未成功重現 CVE-2021-45046 中所提及的情況;在安全廠商 Praetorian 的研究文章中,則提及了另一項繞過的手法,不過尚未公布其細節。總結而論,目前各家針對 2.15.0 版本和 CVE-2021-45046 漏洞的看法和討論仍在陸續變化之中,但可以肯定的是,2.15.0 版本的修補並不完整,建議開發者們還是要盡快更新至最新的 2.16.0 版。
Writer: CyCraft
奧義智慧科技(CyCraft Technology)是一家專注於 AI 自動化技術的資安科技公司,成立於2017年。總部設於台灣,在日本和新加坡均設有子公司。為亞太地區的政府機關、警政國防、銀行和高科技製造產業提供專業資安服務。獲得華威國際集團(The CID Group)和淡馬錫控股旗下蘭亭投資(Pavilion Capital)的強力支持,並獲得國際頂尖研究機構 Gartner、IDC、Frost & Sullivan 的多項認可,以及海內外大獎的多次肯定。同時也是多個跨國資安組織和台灣資安社群的成員和合作夥伴,長年致力於資安產業的發展。