Kerentanan di ld.so OpenBSD

Pemuat dinamis ld.jadi, disertakan dengan OpenBSD, dalam kondisi tertentu, dapat SUID/SGID- aplikasi meninggalkan variabel lingkungan LD_LIBRARY_PATH dan dengan demikian mengizinkan kode pihak ketiga dimuat dalam konteks proses yang berjalan dengan hak istimewa yang lebih tinggi. Patch yang memperbaiki kerentanan tersedia untuk rilis 6.5 ΠΈ 6.6. Patch biner (pengiriman sistem) untuk platform amd64, i386 dan arm64 sudah dalam produksi dan akan tersedia untuk diunduh pada saat berita ini diterbitkan.

Inti masalahnya: selama operasi, ld.so pertama-tama mengekstrak nilai variabel LD_LIBRARY_PATH dari lingkungan dan, menggunakan fungsi _dl_split_path(), mengubahnya menjadi array string - jalur ke direktori. Jika kemudian ternyata proses saat ini dimulai oleh aplikasi SUID/SGID, maka array yang dibuat dan, pada kenyataannya, variabel LD_LIBRARY_PATH akan dihapus. Pada saat yang sama, jika _dl_split_path() kehabisan memori (yang sulit dilakukan karena batasan eksplisit 256 kB pada ukuran variabel lingkungan, tetapi secara teoritis mungkin), maka variabel _dl_libpath akan menerima nilai NULL, dan pemeriksaan selanjutnya terhadap nilai variabel ini akan memaksa panggilan ke _dl_unsetenv("LD_LIBRARY_PATH") dilewati.

Kerentanan ditemukan oleh para ahli kualifikasi, sebaik beberapa sebelumnya terungkap masalah. Peneliti keamanan yang mengidentifikasi kerentanan mencatat seberapa cepat masalah tersebut diselesaikan: patch telah disiapkan dan pembaruan dirilis dalam waktu tiga jam setelah proyek OpenBSD menerima pemberitahuan.

Tambahan: Masalah telah diberi nomor CVE-2019-19726. Dibuat di milis oss-security pengumuman resmi, termasuk prototipe eksploitasi yang berjalan pada arsitektur OpenBSD 6.6, 6.5, 6.2 dan 6.1
amd64 dan i386 (eksploitasi dapat diadaptasi untuk arsitektur lain).
Masalah ini dapat dieksploitasi dalam instalasi default dan memungkinkan pengguna lokal yang tidak memiliki hak istimewa untuk mengeksekusi kode sebagai root melalui substitusi perpustakaan ketika menjalankan utilitas chpass atau passwd suid. Untuk membuat kondisi memori rendah yang diperlukan untuk pengoperasian, tetapkan batas RLIMIT_DATA melalui setrlimit.

Sumber: opennet.ru

Tambah komentar