1 poin oleh GN⁺ 2024-07-02 | 1 komentar | Bagikan ke WhatsApp

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

 
GN⁺ 2024-07-02
Opini Hacker News
  • Perbaikan RCE ternyata sudah dilakukan secara publik hampir sebulan lalu, tetapi secara "diam-diam"

    • Saat PerSourcePenalties diaktifkan, sshd(8) memantau status keluar proses anak sesi pra-autentikasi
    • Mencatat penalti ketika klien berulang kali mencoba autentikasi atau saat sshd crash
    • Patch ini mengubah arsitektur biner untuk menghilangkan kerentanan tertentu dan memitigasi seluruh kelas eksploit
  • Pada diff yang memperkenalkan bug, fungsi tersebut direfaktor seperti berikut

    • Fungsi asli: sigdie(const char *fmt,...)
    • Fungsi hasil refaktor: sshsigdie(const char *file, const char *func, int line, const char *fmt, ...)
    • #ifdef terlewat
    • Ini mungkin bisa dicegah jika lebih banyak orang meninjau pull request tersebut
  • Komentar menarik di catatan rilis OpenSSH

    • Eksploit yang berhasil telah didemonstrasikan pada sistem Linux/glibc 32-bit dengan ASLR
    • Tampaknya juga mungkin pada sistem 64-bit
  • OpenBSD tidak terdampak oleh kerentanan ini karena handler SIGALRM memanggil syslog_r()

    • Menggunakan versi syslog() yang aman untuk sinyal asinkron
    • Diperlukan refaktor untuk meminimalkan jumlah kode di dalam handler sinyal
  • Hasil penelusuran terhadap syslog(3) di musl menunjukkan bahwa, tidak seperti glibc, ini tidak mudah dieksploitasi

    • Semuanya berada di stack atau dalam variabel statis yang dilindungi reentransi
  • Patch untuk FreeBSD telah dirilis, dan karena tidak menggunakan glibc, kemungkinan besar tidak terdampak

  • Menyetel LoginGraceTime 0 di file sshd_config dapat memitigasi masalah ini

    • Namun ini membuatnya rentan terhadap serangan denial-of-service, meski mencegah eksekusi kode jarak jauh
  • Patch 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

    • Namun orang cenderung baru menganggapnya serius atau membayar bug bounty jika seluruh rantai serangannya juga ditemukan