Ringkasan
- Ditemukan kerentanan keamanan di OpenSSH: Ditemukan kerentanan eksekusi kode jarak jauh (RCE) pada server OpenSSH (
sshd) akibat race condition pada signal handler. Kerentanan ini memengaruhi sshd pada konfigurasi default.
- Asal-usul kerentanan: Kerentanan ini merupakan regresi dari CVE-2006-5051 yang dilaporkan pada 2006, dan terjadi karena perubahan kode yang diperkenalkan di OpenSSH 8.5p1 pada Oktober 2020.
- Dampak kerentanan: Dapat dieksploitasi dari jarak jauh pada sistem Linux berbasis glibc, memengaruhi kode istimewa
sshd, dan memungkinkan eksekusi kode jarak jauh dengan hak akses root.
- Cara eksploitasi kerentanan: Untuk mengeksploitasi kerentanan ini, perlu ditemukan jalur kode tertentu lalu dihentikan pada waktu yang tepat. Untuk itu, eksploit dimulai dari versi OpenSSH lama lalu diperluas ke versi terbaru.
- Patch dan mitigasi: Disediakan patch dan metode mitigasi untuk mengatasi kerentanan.
SSH-2.0-OpenSSH_3.4p1 Debian 1:3.4p1-1.woody.3 (Debian 3.0r6, 2005)
Teori
- Handler SIGALRM: Handler SIGALRM pada versi ini memanggil
packet_close(), yang memanggil buffer_free(), yang kemudian memanggil xfree() dan free(). free() tidak aman terhadap sinyal asinkron.
- Analisis kode malloc: Dari kode malloc, ditemukan jalur untuk mengeksploitasi kerentanan ketika pemanggilan
free() diinterupsi oleh SIGALRM, lalu dipanggil kembali di dalam handler SIGALRM.
Praktik
- Metode serangan: Eksekusi kode jarak jauh dicapai dengan menginterupsi pemanggilan
free() pada kode yang mem-parsing kunci publik DSA, lalu mengeksploitasinya di dalam handler SIGALRM.
- Memenangi race condition: Untuk memenangi race condition ini dibutuhkan sekitar 10.000 percobaan, dan rata-ratanya memakan waktu sekitar satu minggu.
Timing
- Strategi timing: Untuk meminimalkan latensi jaringan, byte terakhir dikirim pada saat paling akhir, lalu round-trip time dilacak untuk menyesuaikan timing. Dengan ini, peluang memenangi race condition meningkat.
SSH-2.0-OpenSSH_4.2p1 Debian-7ubuntu3 (Ubuntu 6.06.1, 2006)
Teori tahap 1
- Handler SIGALRM: Handler SIGALRM pada versi ini tidak memanggil
packet_close(), dan karena fungsi malloc selalu mengunci, diperlukan solusi lain.
- Penggunaan PAM: Ditemukan bahwa
pam_end() milik PAM tidak aman terhadap sinyal asinkron, lalu dicari jalur untuk mengeksploitasinya.
Teori tahap 2
- Analisis
pam_start(): Jika pam_start() diinterupsi, struktur PAM bisa tertinggal dalam keadaan tidak konsisten, dan ini dapat dieksploitasi di dalam handler SIGALRM.
- Teknik House of Mind: Untuk serangan ini digunakan teknik House of Mind guna memanipulasi alokasi memori dan mencapai eksekusi kode jarak jauh dengan hak akses root.
Praktik
- Metode serangan: Alokasi memori dimanipulasi menggunakan nama pengguna yang panjang, dan peluang memenangi race condition ditingkatkan melalui beberapa pemanggilan
pam_start().
Timing
- Strategi timing: Strategi timing yang digunakan pada versi Debian sebelumnya dipakai kembali untuk meningkatkan peluang memenangi race condition. Rata-ratanya memakan waktu 1-2 hari.
SSH-2.0-OpenSSH_9.2p1 Debian-2+deb12u2 (Debian 12.5.0, 2024)
Teori
- Handler SIGALRM: Handler SIGALRM pada versi ini memanggil
syslog(), yang pada gilirannya memanggil fungsi-fungsi yang tidak aman terhadap sinyal asinkron.
- Analisis glibc:
syslog() milik glibc memanggil malloc, yang tidak aman terhadap sinyal asinkron. Selain itu, fungsi malloc di glibc tidak mengunci saat berjalan dalam mode single-thread.
Patch dan mitigasi
- Patch: Kerentanan ini dilaporkan kepada para pengembang OpenSSH, dan disediakan patch untuk memperbaikinya.
Opini GN⁺
- Pentingnya keamanan: OpenSSH adalah perangkat lunak keamanan yang sangat penting, dan kerentanan ini merupakan kasus yang sangat jarang terjadi.
- Tingkat kesulitan eksploitasi: Mengeksploitasi kerentanan ini memerlukan timing yang sangat presisi dan banyak percobaan.
- Solusi alternatif: Selain OpenSSH, ada berbagai solusi keamanan lain, dan sebaiknya digunakan bersama-sama.
- Tantangan teknis: Riset ini menuntut tantangan teknis yang sangat tinggi dan bisa menjadi inspirasi besar bagi para peneliti keamanan.
- Mitigasi kerentanan: Penting untuk menerapkan patch keamanan terbaru dan memperkuat pengaturan keamanan.
1 komentar
Opini Hacker News
Perbaikan RCE ternyata sudah dilakukan secara publik hampir sebulan lalu, tetapi secara "diam-diam"
sshd(8)memantau status keluar proses anak sesi pra-autentikasisshdcrashPada diff yang memperkenalkan bug, fungsi tersebut direfaktor seperti berikut
sigdie(const char *fmt,...)sshsigdie(const char *file, const char *func, int line, const char *fmt, ...)#ifdefterlewatKomentar menarik di catatan rilis OpenSSH
OpenBSD tidak terdampak oleh kerentanan ini karena handler
SIGALRMmemanggilsyslog_r()syslog()yang aman untuk sinyal asinkronHasil penelusuran terhadap
syslog(3)di musl menunjukkan bahwa, tidak seperti glibc, ini tidak mudah dieksploitasiPatch untuk FreeBSD telah dirilis, dan karena tidak menggunakan glibc, kemungkinan besar tidak terdampak
Menyetel
LoginGraceTime 0di filesshd_configdapat memitigasi masalah iniPatch untuk Debian 12 telah dirilis, sedangkan Debian 11 tidak terdampak
Tautan ke catatan rilis OpenSSH dan patch minimal disediakan
Dari sudut pandang independen, seharusnya menemukan satu kerentanan saja sudah cukup