Kerentanan yang memungkinkan Anda mengganti urutan pelarian di terminal orang lain

Kerentanan (CVE-2024-28085) telah diidentifikasi di utilitas dinding, disediakan dalam paket util-linux dan dimaksudkan untuk mengirim pesan ke terminal, yang memungkinkan serangan terhadap terminal pengguna lain melalui manipulasi urutan pelarian. Masalah ini disebabkan oleh utilitas dinding yang memblokir rangkaian escape pada aliran input tetapi tidak melakukannya pada argumen baris perintah, sehingga memungkinkan penyerang untuk keluar dari rangkaian escape di terminal pengguna lain.

Misalnya, dengan mengeksekusi 'wall $(printf "\033[33mHI")' Anda dapat mencetak "HI" dengan warna kuning. Dengan menggunakan urutan escape yang memungkinkan Anda memindahkan penunjuk, menghapus, dan mengganti konten di layar, Anda dapat melakukan simulasi menampilkan perintah kata sandi sudo di terminal pengguna lain. Jika pengguna tidak menyadari triknya dan memasukkan kata sandinya, kata sandi akan muncul di riwayat input sebagai perintah yang tidak ada (sebenarnya, pengguna akan memasukkan kata sandinya di baris perintah, bukan perintah). “\033[3A” // gerakkan kursor ke atas 3 baris “\033[K” // hapus output sebelumnya “[sudo] password for a_user:” // tampilkan permintaan sudo tiruan “\033[?25l” / / atur warna latar belakang untuk menyembunyikan masukan "\033[38;2;48;10;36m"

Ketika peringatan dikeluarkan bahwa perintah yang dimasukkan tidak ditemukan, banyak distribusi menjalankan handler /usr/lib/command-not-found, yang mencoba mengidentifikasi paket yang berisi perintah yang hilang dan memberikan petunjuk apakah paket tersebut dapat diinstal. . Masalahnya adalah ketika pengendali perintah-tidak-ditemukan diluncurkan, perintah yang tidak ada diteruskan ke sana sebagai parameter baris perintah, yang terlihat ketika melihat proses pada sistem (misalnya, ketika mencoba menjalankan utilitas yang dihapus instalasinya) “xsnow”, “/usr” akan terlihat di daftar proses /lib/command-not-found - xsnow"). Oleh karena itu, penyerang dapat memantau proses yang berjalan (misalnya, dengan menganalisis kemunculan “/proc/$pid/cmdline” untuk prediksi nomor PID) dan menentukan kata sandi yang dimasukkan oleh korban pada baris perintah.

Agar pengguna dapat memasukkan kata sandi sebagai respons terhadap prompt sudo fiktif, sebuah trik telah diusulkan, yang intinya adalah melacak peluncuran sebenarnya dari utilitas sudo dalam daftar proses, menunggu hingga selesai, dan melakukan serangan melalui “dinding” segera setelah itu. Dengan memanipulasi urutan escape, penyerang dapat mengganti pesan setelah eksekusi sudo yang sebenarnya dengan perintah memasukkan kembali kata sandi palsu. Korban mungkin berpikir bahwa dia melakukan kesalahan saat memasukkan kata sandi dan memasukkan kata sandi untuk kedua kalinya, sehingga mengungkapkan kata sandi dalam argumen pengendali “command-not-found”.

Serangan yang berhasil memerlukan pengaturan mode "mesg" ke "y", yang diatur secara default di Ubuntu, Debian dan CentOS/RHEL. Serangan tersebut telah didemonstrasikan di Ubuntu 22.04 dalam konfigurasi defaultnya menggunakan terminal gnome. Di Debian, serangannya sulit, karena pengendali “command-not-found” tidak diaktifkan secara default di distribusi, dan di CentOS/RHEL, serangan tidak akan berfungsi, karena utilitas dinding diinstal tanpa flag setgid dan tidak memiliki akses ke terminal orang lain. Saat menggunakan terminal windows, serangan dapat dimodifikasi untuk mengubah isi clipboard.

Kerentanan telah ada dalam paket util-linux sejak 2013, setelah rilis 2.24 menambahkan kemampuan untuk menentukan pesan pada baris perintah dinding, tetapi lupa membersihkan urutan escape. Perbaikan untuk kerentanan ini disertakan dalam rilis util-linux 2.40 kemarin. Patut dicatat bahwa ketika mencoba memperbaiki kerentanan pada rilis util-linux 2.39, kerentanan serupa lainnya teridentifikasi, yang memungkinkan penggantian karakter kontrol melalui manipulasi lokal.

Sumber: opennet.ru

Tambah komentar