Kerentanan dalam networkd-dispatcher yang memungkinkan akses root

Peneliti keamanan dari Microsoft telah mengidentifikasi dua kerentanan (CVE-2022-29799, CVE-2022-29800) di layanan networkd-dispatcher, dengan nama kode Nimbuspwn, yang memungkinkan pengguna yang tidak memiliki hak istimewa untuk menjalankan perintah sewenang-wenang dengan hak akses root. Masalah ini telah diperbaiki pada rilis networkd-dispatcher 2.2. Belum ada informasi tentang publikasi pembaruan berdasarkan distribusi (Debian, RHEL, Fedora, SUSE, Ubuntu, Arch Linux).

Networkd-dispatcher digunakan di banyak distribusi Linux, termasuk Ubuntu, yang menggunakan proses latar belakang systemd-networkd untuk mengonfigurasi parameter jaringan, dan menjalankan fungsi yang mirip dengan NetworkManager-dispatcher, yaitu. terlibat dalam peluncuran skrip ketika status koneksi jaringan berubah, misalnya, digunakan untuk meluncurkan VPN setelah koneksi jaringan utama dibuat.

Proses latar belakang yang terkait dengan networkd-dispatcher berjalan sebagai root dan menerima sinyal peristiwa melalui D-Bus. Informasi tentang peristiwa yang terkait dengan perubahan status koneksi jaringan dikirim oleh layanan systemd-networkd. Masalahnya adalah pengguna yang tidak memiliki hak istimewa dapat menghasilkan peristiwa keadaan yang tidak ada dan memicu skrip mereka untuk dieksekusi sebagai root.

Systemd-networkd dirancang untuk hanya menjalankan skrip pengendali sistem yang terletak di direktori /etc/networkd-dispatcher dan tidak dapat diakses untuk penggantian pengguna, namun karena kerentanan (CVE-2022-29799) pada kode pemrosesan jalur file, terdapat a kemungkinan direktori dasar di luar batas dan meluncurkan skrip arbitrer. Khususnya, saat membentuk jalur file ke skrip, nilai OperationalState dan AdministratifState yang dikirimkan melalui D-Bus digunakan, di mana karakter khusus tidak dihapus. Penyerang dapat membuat statusnya sendiri, yang namanya berisi karakter “../” dan mengarahkan panggilan networkd-dispatcher ke direktori lain.

Kerentanan kedua (CVE-2022-29800) terkait dengan kondisi balapan - antara memeriksa parameter skrip (milik root) dan menjalankannya, ada waktu singkat, cukup untuk mengganti file dan melewati pemeriksaan apakah file skrip milik pengguna root. Selain itu, networkd-dispatcher tidak memeriksa tautan simbolik, termasuk saat menjalankan skrip melalui panggilan subproses.Popen, yang secara signifikan menyederhanakan pengorganisasian serangan.

Teknik pengoperasian:

  • Direktori “/tmp/nimbuspwn” dan tautan simbolik “/tmp/nimbuspwn/poc.d” dibuat menunjuk ke direktori “/sbin”, yang digunakan untuk memeriksa file yang dapat dieksekusi yang dimiliki oleh root.
  • Untuk file yang dapat dieksekusi dari “/sbin”, file dengan nama yang sama dibuat di direktori “/tmp/nimbuspwn”, misalnya, untuk file “/sbin/vgs” file yang dapat dieksekusi “/tmp/nimbuspwn/vgs” adalah dibuat, dimiliki oleh pengguna yang tidak memiliki hak istimewa, di mana kode yang ingin dijalankan penyerang ditempatkan.
  • Sinyal dikirim melalui D-Bus ke proses networkd-dispatcher yang menunjukkan nilai “../../../tmp/nimbuspwn/poc” di OperationalState. Untuk mengirim sinyal di namespace "org.freedesktop.network1", kemampuan untuk menghubungkan penangannya ke systemd-networkd digunakan, misalnya, melalui manipulasi dengan gpgv atau epmd, atau Anda dapat memanfaatkan fakta bahwa systemd-networkd tidak berjalan secara default (misalnya, di Linux Mint).
  • Setelah menerima sinyal, Networkd-dispatcher membuat daftar file yang dapat dieksekusi yang dimiliki oleh pengguna root dan tersedia di direktori “/etc/networkd-dispatcher/../../../tmp/nimbuspwn/poc.d”, yang sebenarnya tertaut ke "/ sbin".
  • Pada saat daftar file diterima, tetapi skrip belum diluncurkan, tautan simbolik dialihkan dari “/tmp/nimbuspwn/poc.d” ke “/tmp/nimbuspwn” dan networkd-dispatcher akan meluncurkan skrip yang dihosting oleh penyerang dengan hak root.

Kerentanan dalam networkd-dispatcher yang memungkinkan akses root


Sumber: opennet.ru

Tambah komentar