Pemuat dinamis
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
Tambahan: Masalah telah diberi nomor
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