Kerentanan dalam OpenBSD membenarkan peningkatan keistimewaan dan pintasan pengesahan dalam smtpd, ldapd dan radiusd

Syarikat Qualys didedahkan empat kelemahan dalam OpenBSD, satu daripadanya membolehkan anda menyambung dari jauh tanpa pengesahan ke beberapa perkhidmatan rangkaian, dan tiga lagi untuk meningkatkan keistimewaan mereka dalam sistem. Laporan Qualys mencatatkan tindak balas pantas pembangun OpenBSD - semua masalah adalah dihapuskan Π² OpenBSD 6.5 ΠΈ OpenBSD 6.6 dalam masa 40 jam selepas notis peribadi.

Kerentanan yang boleh dieksploitasi dari jauh disebabkan oleh ralat dalam mengatur panggilan kepada pengendali pengesahan dalam perpustakaan libc, yang memanggil
/usr/libexec/auth/login_style program menghantar hujah pada baris arahan. Termasuk apabila memanggil login_style menggunakan parameter pilihan "-s service", menghantar nama protokol dibenarkan. Jika aksara "-" digunakan pada permulaan nama pengguna, nama ini akan dianggap sebagai pilihan apabila login_style dijalankan. Oleh itu, jika anda menentukan "-schallenge" atau "-schallenge: passwd" sebagai nama pengguna semasa pengesahan, maka login_style akan menganggap permintaan itu sebagai permintaan untuk menggunakan pengendali S/Kunci.

Masalahnya ialah protokol S/Key dalam login_style hanya disokong secara formal, tetapi sebenarnya diabaikan dengan keluaran tanda pengesahan yang berjaya. Oleh itu, penyerang boleh menyamar sebagai pengguna "-schallenge" dan memintas pengesahan dan mendapatkan akses tanpa menyatakan kata laluan atau kunci. Semua perkhidmatan rangkaian yang menggunakan panggilan libc biasa untuk pengesahan berpotensi terjejas oleh masalah tersebut. Sebagai contoh, keupayaan untuk memintas pengesahan disahkan dalam smtpd (AUTH PLAIN), ldapd dan radiusd.

Kerentanan tidak nyata dalam sshd, kerana ia mempunyai perlindungan tambahan dengan memeriksa kehadiran pengguna dalam sistem. Walau bagaimanapun, sshd boleh digunakan untuk menguji sama ada sistem terdedah kepada kelemahan - apabila mengakses nama pengguna "-sresponse:passwd", sambungan digantung, kerana sshd menunggu login_passwd untuk mengembalikan parameter panggilan (cabaran), dan login_passwd menunggu untuk pemindahan parameter yang hilang (nama "- sresponse" diambil sebagai pilihan). Penyerang tempatan yang berpotensi boleh cuba memintas pengesahan dalam utiliti su, tetapi menghantar nama "-sresponse" menyebabkan proses ranap disebabkan pengembalian penuding nol apabila melaksanakan fungsi getpwnam_r("-schallenge", ...) .

Kelemahan lain:

  • CVE-2019-19520 - Peningkatan keistimewaan tempatan melalui memanipulasi utiliti xlock yang disertakan dengan bendera sgid yang menukar kumpulan kepada "auth". Dalam kod xlock, takrifan semula laluan perpustakaan adalah dilarang hanya apabila ID pengguna (setuid) ditukar, yang membolehkan penyerang menukar pembolehubah persekitaran "LIBGL_DRIVERS_PATH" dan mengatur pemuatan perpustakaan kongsinya, yang kodnya akan dilaksanakan selepas peningkatan keistimewaan kepada kumpulan "auth".
  • CVE-2019-19522 - Membenarkan pengguna tempatan dalam kumpulan "auth" menjalankan kod sebagai akar apabila pengesahan S/Key atau YubiKey didayakan dalam sistem (tidak didayakan secara lalai). Keahlian dalam kumpulan "auth", yang boleh diakses dengan mengeksploitasi kelemahan xlock di atas, membenarkan fail ditulis ke direktori /etc/skey dan /var/db/yubikey. Sebagai contoh, penyerang boleh menambah fail /etc/skey/root baharu untuk menjana kunci sekali untuk pengesahan root melalui S/Key.
  • CVE-2019-19519 - Kemungkinan untuk meningkatkan had sumber melalui manipulasi dengan utiliti su. Apabila menentukan pilihan "-L", yang membayangkan pengulangan kitaran percubaan pengesahan sekiranya berlaku kegagalan, kelas pengguna ditetapkan sekali sahaja dan tidak ditetapkan semula pada percubaan berikutnya. Penyerang boleh melaksanakan "su -l -L" pada percubaan pertama untuk memasukkan log masuk orang lain dengan kelas akaun yang berbeza, tetapi pada percubaan kedua untuk berjaya mengesahkan di bawah dirinya. Dalam keadaan ini, pengguna akan ditetapkan had yang sepadan dengan kelas pengguna yang ditentukan pada percubaan pertama (contohnya, bilangan maksimum proses atau saiz memori untuk proses). Kaedah ini hanya berfungsi untuk had peminjaman daripada pengguna bukan istimewa, kerana pengguna akar perlu berada dalam kumpulan roda).

Di samping itu, ia boleh diperhatikan pelaksanaan dalam OpenBSD kaedah baharu untuk menyemak kesahihan panggilan sistem, merumitkan lagi eksploitasi kelemahan. Kaedah ini membenarkan panggilan sistem dilaksanakan hanya jika ia diakses dari kawasan memori yang didaftarkan sebelum ini. Untuk menandakan kawasan ingatan dicadangkan panggilan sistem baharu msyscall().

Sumber: opennet.ru