Lewati ke isi

Keamanan/Cyber Security

Dirty Pipe CVE-2022-0847, Celah Root di Kernel Linux

Dirty Pipe membuat pengguna biasa bisa menimpa file read-only dan naik ke root. Cek versi kernel terdampak, versi perbaikan, dan langkah amannya.

Terbit 6 menit baca

Jawaban singkat

Dirty Pipe (CVE-2022-0847) adalah celah kernel Linux sejak versi 5.8 yang memungkinkan pengguna lokal menimpa isi file yang hanya bisa dibaca, termasuk file milik root. Perbaikannya ada di kernel 5.16.11, 5.15.25, dan 5.10.102. Solusinya update kernel lalu reboot.

Daftar isi
  1. Bagaimana celah ini ditemukan?
  2. Apa yang sebenarnya salah di kernel?
  3. Batasan Dirty Pipe yang perlu kamu tahu
  4. Kernel mana yang terdampak?
  5. Langkah praktis untuk server kamu
  6. Mengapa celah lokal tetap harus diprioritaskan?
  7. Pertanyaan yang sering diajukan

Dirty Pipe (CVE-2022-0847) adalah celah di kernel Linux yang membuat pengguna tanpa hak istimewa bisa menimpa isi file yang seharusnya hanya bisa dibaca, lalu memakainya untuk menjadi root. Celah ini ada sejak kernel 5.8 dan diperbaiki di versi 5.16.11, 5.15.25, dan 5.10.102 pada Februari 2022.

Kenapa ini penting untuk pemilik server? Karena celah eskalasi hak akses adalah langkah kedua favorit penyerang. Setelah berhasil masuk lewat plugin website yang bolong atau akun SSH yang lemah, mereka biasanya hanya punya hak pengguna biasa. Dirty Pipe mengubah akses terbatas itu menjadi kendali penuh atas server.

CVE-2022-0847

Tinggi · CVSS 7.8
Produk terdampak
Linux kernel
Versi terdampak
5.8 sampai sebelum 5.16.11, 5.15.25, 5.10.102
Versi aman
5.16.11, 5.15.25, 5.10.102
Status
Patch tersedia
Diumumkan
7 Maret 2022
Detail di NVD

Bagaimana celah ini ditemukan?

Ceritanya cukup unik. Max Kellermann dari CM4all (bagian dari IONOS) menyelidiki keluhan file log akses yang rusak di server mereka. Tiket pertama masuk April 2021, dan butuh waktu berbulan-bulan sampai ia menyadari bahwa kerusakan itu berasal dari bug kernel, bukan aplikasi.

Pada 20 Februari 2022 ia mengirim laporan, contoh eksploit, dan patch ke tim keamanan kernel. Perbaikan masuk ke kernel stabil pada 23 Februari 2022, dan detailnya diumumkan ke publik pada 7 Maret 2022. Ia juga berhasil mereproduksi bug ini di ponsel Android, sehingga tim keamanan Android ikut dikabari.

Apa yang sebenarnya salah di kernel?

Linux memakai "pipe" untuk mengalirkan data antarproses, dan sistem panggilan splice() bisa memasukkan halaman file dari page cache langsung ke pipe tanpa menyalinnya. Setiap buffer di pipe punya kolom flags.

Bug-nya: saat buffer baru dibuat untuk halaman page cache, kolom flags itu tidak dikosongkan. Sejak kernel 5.8, flag PIPE_BUF_FLAG_CAN_MERGE menentukan apakah data yang ditulis berikutnya boleh digabung ke buffer yang sudah ada. Kalau flag sisa itu masih menyala, data tulisan penyerang ikut masuk ke halaman page cache milik file, padahal file itu hanya dibuka untuk dibaca.

Hasilnya, penyerang bisa menimpa isi file yang bisa ia baca, termasuk file yang tidak boleh ia ubah. Contoh yang dipakai peneliti adalah menambahkan kunci SSH ke /root/.ssh/authorized_keys. Cara lain yang banyak beredar adalah menimpa program SUID atau file sistem seperti /etc/passwd di memori.

Batasan Dirty Pipe yang perlu kamu tahu

Celah ini kuat, tapi tidak tanpa syarat. Menurut tulisan penemunya, ada beberapa batasan:

  • Penyerang harus sudah punya akses lokal di server, misalnya akun shell atau kemampuan menjalankan kode lewat aplikasi. Dirty Pipe bukan celah yang bisa dipakai langsung dari internet.
  • File harus bisa dibaca oleh penyerang.
  • Tidak bisa menulis tepat di awal halaman memori (batas page), dan tulisan tidak bisa melewati batas page.
  • Ukuran file tidak bisa diperbesar.
  • Perubahan hanya ada di page cache. Setelah reboot atau saat kernel membuang halaman itu, isi file kembali seperti semula, kecuali halaman itu kemudian ditandai berubah dan ditulis ke disk.

Poin terakhir membuat Dirty Pipe sulit dilacak. Isi file di disk bisa terlihat normal, padahal yang dibaca program selama server menyala sudah diubah.

Kernel mana yang terdampak?

Ringkasan berikut memakai data dari penemunya dan NVD. Cek versi kernel dengan uname -r.

Rentang kernelStatusTindakan
Di bawah 5.8 (misalnya 4.19, 5.4)Tidak terdampak Dirty PipeTetap update untuk celah lain
5.10 sebelum 5.10.102TerdampakUpdate ke 5.10.102 atau lebih baru
5.15 sebelum 5.15.25TerdampakUpdate ke 5.15.25 atau lebih baru
5.16 sebelum 5.16.11TerdampakUpdate ke 5.16.11 atau lebih baru
5.17 ke atasSudah memuat perbaikanTidak perlu tindakan khusus

Satu hal penting: distribusi seperti Ubuntu, Debian, dan RHEL sering memakai nomor kernel sendiri dan memasukkan patch tanpa mengubah angka versi utama. Jadi jangan menilai hanya dari angka uname -r. Cocokkan dengan pengumuman keamanan distribusimu, atau cukup pastikan kernel sudah versi terbaru dari repositori resmi.

Langkah praktis untuk server kamu

Dirty Pipe tercantum di katalog KEV CISA sejak 25 April 2022, artinya sudah terbukti dipakai dalam serangan nyata. Untuk server produksi, urutannya sederhana:

  1. Cek kernel yang sedang berjalan dengan uname -r.
  2. Update paket kernel: sudo apt update && sudo apt full-upgrade di Debian/Ubuntu, atau sudo dnf update kernel di AlmaLinux/Rocky.
  3. Reboot server. Kernel baru tidak aktif sebelum reboot, dan ini langkah yang paling sering terlupa.
  4. Jalankan uname -r lagi untuk memastikan kernel baru sudah dipakai.
  5. Periksa akun lokal dan kunci SSH di /root/.ssh/authorized_keys bila server pernah dipakai bersama atau kamu curiga ada akses tidak sah.

Selain menambal, kurangi peluang penyerang mendapat akses lokal sejak awal. Langkah dasarnya ada di panduan mengamankan VPS Linux baru, dan penjelasan soal skor 7.8 yang "hanya" tinggi (bukan kritis) bisa kamu baca di cara membaca skor CVSS. Skor itu lebih rendah karena butuh akses lokal, tapi dampaknya tetap penuh begitu penyerang sudah di dalam.

Mengapa celah lokal tetap harus diprioritaskan?

Banyak tim menunda patch celah lokal karena merasa servernya tidak punya pengguna lain. Kenyataannya, setiap proses yang berjalan di server adalah "pengguna lokal": web server, PHP, aplikasi Node.js, sampai cron job. Kalau salah satunya berhasil dibobol, Dirty Pipe memberi jalan pintas ke root.

Untuk server hosting bersama, panel dengan banyak akun, atau server CI yang menjalankan kode dari banyak orang, risikonya jauh lebih besar. Di lingkungan seperti itu, celah eskalasi hak akses sebaiknya ditambal secepat celah jarak jauh.

Pertanyaan yang sering diajukan

Apakah Dirty Pipe bisa dipakai menyerang server dari internet?

Tidak secara langsung. Penyerang perlu bisa menjalankan kode di server lebih dulu, misalnya lewat aplikasi web yang bolong. Dirty Pipe dipakai sebagai langkah kedua untuk naik ke root.

Apakah cukup memperbarui paket tanpa reboot?

Tidak. Kernel baru baru dipakai setelah reboot, kecuali kamu memakai layanan live patching dari distribusi yang memang mendukung perbaikan ini.

Apa bedanya dengan Dirty COW?

Dirty COW (CVE-2016-5195) adalah celah lama di mekanisme copy-on-write kernel dengan dampak mirip. Dirty Pipe berasal dari bug yang berbeda di pipe dan lebih mudah dieksploitasi karena tidak bergantung pada race condition.

Sumber & referensi

Baca juga