Alibaba Cloud baru-baru ini menemukan kerentanan eksekusi kode jarak jauh (RCE) pada komponen Apache Log4j2 dan telah melaporkannya kepada Apache Software Foundation. Topik ini menjelaskan dampak kerentanan tersebut serta rencana pemulihan yang sesuai.
Dampak
Pada E-MapReduce (EMR), komponen yang terdampak mencakup Hive, Presto, Impala, Druid, Flink, Solr, Ranger, Storm, Oozie, Spark, dan Zeppelin. Spark dan Zeppelin terdampak karena bergantung pada komponen Hive.
Rencana pemulihan
Anda harus mengganti file JAR Log4j2 yang rentan di kluster EMR dengan versi 2.17.2 dan memodifikasi konfigurasi Log4j untuk Hive dan Spark guna menonaktifkan fitur JNDI Lookup dengan mengatur log4j2.formatMsgNoLookups=true. Untuk petunjuk lengkap, lihat Prosedur pemulihan.
Rencana pemulihan ini memiliki karakteristik berikut:
-
Berlaku untuk EMR-3.38.2 dan versi sebelumnya, EMR-5.4.2 dan versi sebelumnya, serta semua versi EMR 4.x. Kerentanan ini telah diperbaiki pada EMR-3.38.3 dan versi setelahnya serta EMR-5.4.3 dan versi setelahnya. Tidak diperlukan tindakan apa pun untuk versi-versi tersebut.
-
Anda harus me-restart komponen yang bersangkutan setelah menerapkan rencana ini.
-
Skrip pemulihan tidak berdampak pada layanan online Anda. Namun, karena perbaikan hanya berlaku setelah komponen direstart, kami menyarankan agar Anda melakukan prosedur ini pada jam sepi.
Prosedur pemulihan
Kluster EMR
-
Klik patches-log4j.tar.gz untuk mengunduh paket patch.
-
Login ke node master kluster EMR, lalu letakkan paket patch yang diunduh pada Langkah 1 di direktori HOME pengguna
emr-useratauhadoop. -
Ekstrak paket patch dan jalankan perintah berikut sebagai pengguna
emr-useratauhadoop.-
Untuk kluster skenario DataLake, Dataflow, OLAP, DataServing, dan kustom:
su emr-user tar zxf patches-log4j.tar.gz -
Untuk kluster lainnya:
su hadoop tar zxf patches-log4j.tar.gz
-
-
Edit file hosts dalam paket patch untuk menambahkan hostname semua node dalam kluster, seperti emr-header-1 atau emr-worker-1. Masukkan satu hostname per baris.
cd patches vim hostsBerikut contoh isi file hosts:
emr-header-1 emr-worker-1 emr-worker-2PentingUntuk kluster yang menjalankan EMR 3.41 atau versi setelahnya pada seri EMR 3.x, atau EMR 5.7.0 atau versi setelahnya pada seri EMR 5.x, format hostname telah berubah. Berikut contoh isi file hosts:
core-1-1 core-1-2 task-1-1 task-1-2 -
Jalankan skrip fix.sh untuk menerapkan perbaikan.
./fix.shSetelah skrip dijalankan, pesan berikut akan dikembalikan:
### NOTICE: YOU CAN RESTORE THIS PATCH BY RUN RESTORE SCRIPT ABOVE $> sh ./restore.sh 20211213001755 ### DONEUntuk mengembalikan perbaikan, jalankan perintah berikut:
./restore.sh 20211213001755CatatanUntuk pekerjaan YARN yang sedang berjalan (aplikasi), seperti pekerjaan Spark Streaming atau Flink, Anda harus menghentikan pekerjaan tersebut sebelum melakukan rolling restart NodeManager YARN.
-
Restart layanan.
Untuk sepenuhnya memulihkan kerentanan, Anda harus me-restart komponen yang terdampak, termasuk Hive, HDFS, Presto, Impala, Druid, Flink, Solr, Ranger, Storm, Oozie, Spark, dan Zeppelin.
Untuk me-restart komponen Hive, buka halaman layanan Hive di Konsol EMR dan pilih di pojok kanan atas.
Kluster gateway
Prosedur pemulihan ini mengandalkan akses SSH tanpa kata sandi. Untuk kluster gateway, Anda harus mengunggah secara manual paket patch ke setiap node dalam kluster dan mengikuti prosedur untuk kluster EMR guna menerapkan perbaikan pada setiap node.
-
Dalam file hosts pada paket patch, Anda hanya perlu memasukkan
hostnamedari node saat ini. -
Kluster gateway tidak menjalankan proses komponen apa pun. Oleh karena itu, Anda tidak perlu me-restart layanan apa pun setelah mengunggah paket patch.
Kluster baru dan scale-out
Anda dapat menambahkan tindakan bootstrap di Konsol EMR untuk secara otomatis memperbaiki kerentanan saat membuat kluster EMR atau memperluas kapasitas kluster yang sudah ada. Ikuti langkah-langkah berikut:
-
Klik patches-log4j.tar.gz dan bootstrap_log4j.sh untuk mengunduh paket patch dan skrip bootstrap, lalu unggah ke Object Storage Service (OSS).
Misalnya, path OSS file tersebut adalah oss://<bucket-name>/path/to/patches-log4j.tar.gz dan oss://<bucket-name>/path/to/bootstrap_log4j.sh.
-
Tambahkan tindakan bootstrap di Konsol EMR. Untuk informasi selengkapnya, lihat Mengelola tindakan bootstrap.
Pada kotak dialog Add Bootstrap Action, konfigurasikan parameter berikut.
Parameter
Deskripsi
Name
Nama tindakan bootstrap. Contoh: fix-log4j-vulnerability.
Script Address
Lokasi OSS skrip.
Path skrip harus dalam format oss://**/*.sh. Pada contoh ini, gunakan oss://<bucket-name>/path/to/bootstrap_log4j.sh.
Parameter
Parameter untuk skrip tindakan bootstrap, yang menentukan nilai variabel yang dirujuk dalam skrip.
Pada contoh ini, gunakan oss://<bucket-name>/path/to/patches-log4j.tar.gz .
Execution Scope
Pilih Cluster.
Execution Time
Pilih After Component Startup.
Execution Failure Policy
Pilih Proceed.
-
Saat memperluas kapasitas kluster yang sudah ada, Anda hanya perlu me-restart komponen yang sesuai pada node baru. Jika Anda membuat kluster baru, Anda harus me-restart komponen seperti HDFS, Hive, Presto, Impala, Druid, Flink, Solr, Ranger, Storm, Oozie, Spark, dan Zeppelin.