Kerentanan di Apache Tomcat yang memungkinkan mengganti kode JSP dan mendapatkan file aplikasi web

Peneliti dari perusahaan China Chaitin Tech telah menemukannya kerentanan (CVE-2020-1938) di Apache Tomcat, implementasi terbuka teknologi Java Servlet, JavaServer Pages, Java Expression Language, dan Java WebSocket. Kerentanan telah diberi nama kode Ghostcat dan tingkat keparahan kritis (9.8 CVSS). Masalahnya memungkinkan, dalam konfigurasi default, dengan mengirimkan permintaan pada port jaringan 8009, untuk membaca konten file apa pun dari direktori aplikasi web, termasuk file dengan pengaturan dan kode sumber aplikasi.

Kerentanan juga memungkinkan untuk mengimpor file lain ke dalam kode aplikasi, yang memungkinkan eksekusi kode di server jika aplikasi mengizinkan file untuk diunggah ke server (misalnya, penyerang dapat mengunggah skrip JSP yang disamarkan sebagai gambar melalui formulir unggah gambar). Serangan dapat dilakukan jika memungkinkan untuk mengirim permintaan ke port jaringan dengan pengendali AJP. Menurut data awal, online ditemukan lebih dari 1.2 juta host menerima permintaan melalui protokol AJP.

Kerentanan ada pada protokol AJP, dan tidak dipanggil kesalahan dalam implementasi. Selain menerima koneksi melalui HTTP (port 8080), Apache Tomcat secara default mengizinkan akses ke aplikasi web melalui protokol AJP (Protokol Apache Jserv, port 8009), yang merupakan analog biner HTTP yang dioptimalkan untuk kinerja lebih tinggi, biasanya digunakan saat membuat cluster server Tomcat atau untuk mempercepat interaksi dengan Tomcat pada proxy terbalik atau penyeimbang beban.

AJP menyediakan fungsi standar untuk mengakses file di server, yang dapat digunakan, termasuk mendapatkan file yang tidak boleh diungkapkan. AJP seharusnya hanya dapat diakses oleh server tepercaya, namun kenyataannya konfigurasi default Tomcat menjalankan pengendali di semua antarmuka jaringan dan menerima permintaan tanpa autentikasi. Akses dimungkinkan ke file aplikasi web apa pun, termasuk konten WEB-INF, META-INF, dan direktori lain yang disediakan melalui panggilan ke ServletContext.getResourceAsStream(). AJP juga memungkinkan Anda menggunakan file apa pun di direktori yang dapat diakses oleh aplikasi web sebagai skrip JSP.

Masalahnya sudah muncul sejak cabang Tomcat 13.x dirilis 6 tahun lalu. Selain masalah Tomcat itu sendiri mempengaruhi dan produk yang menggunakannya, seperti Red Hat JBoss Web Server (JWS), JBoss Enterprise Application Platform (EAP), serta aplikasi web mandiri yang menggunakan Sepatu bot musim semi. Kerentanan serupa (CVE-2020-1745) menyajikan di server web Arus bawah, digunakan di server aplikasi Wildfly. Di JBoss dan Wildfly, AJP diaktifkan secara default hanya di profil standalone-full-ha.xml, standalone-ha.xml, dan ha/full-ha di domain.xml. Di Spring Boot, dukungan AJP dinonaktifkan secara default. Saat ini, berbagai kelompok telah menyiapkan lebih dari selusin contoh eksploitasi (
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11).

Kerentanan diperbaiki dalam rilis Tomcat 9.0.31, 8.5.51 ΠΈ 7.0.100 (pemeliharaan cabang 6.x dihentikan). Anda dapat melacak ketersediaan pembaruan dalam kit distribusi di halaman ini: Debian, Ubuntu, RHEL, Fedora, SUSE, FreeBSD. Sebagai solusinya, Anda dapat menonaktifkan layanan Tomcat AJP Connector (mengikat soket pendengaran ke localhost atau mengomentari baris dengan Connector port = "8009") jika tidak diperlukan, atau mengatur akses diautentikasi menggunakan atribut β€œrahasia” dan β€œalamat”, jika layanan digunakan untuk berinteraksi dengan server dan proxy lain berdasarkan mod_jk dan mod_proxy_ajp (mod_cluster tidak mendukung otentikasi).

Sumber: opennet.ru

Tambah komentar