Kerentanan dalam Python yang memungkinkan pemanggilan perintah sistem dari skrip kotak pasir

Menerbitkan solusi untuk sistem eksekusi kode Python berdasarkan bug yang sudah lama dikenal yang muncul di Python 2.7, diidentifikasi pada tahun 2012 dan belum diperbaiki di Python 3. Bug tersebut memungkinkan penggunaan kode Python yang ditautkan secara khusus untuk memulai panggilan ke sudah dibebaskan memori (Use-After-Free) dengan Python. Awalnya, diasumsikan bahwa kesalahan tidak menimbulkan ancaman keamanan dan hanya dalam kasus yang sangat jarang, biasanya dibuat secara artifisial, dapat menyebabkan penghentian skrip yang tidak normal.

Seorang peneliti keamanan dengan nama samaran kn32 menjadi tertarik dengan masalah tersebut dan berhasil menyiapkan exploit yang berfungsi yang memungkinkan untuk memanggil perintah sistem apa pun tanpa memiliki akses langsung ke metode seperti os.system. Eksploitasi diimplementasikan dalam Python murni dan berfungsi tanpa mengimpor pustaka eksternal dan tanpa menginstal penangan "code.__new__". Dari pengait, hanya "builtin.__id__" yang digunakan, yang biasanya tidak dilarang. Di sisi praktis, kode yang diusulkan dapat digunakan untuk melewati mekanisme isolasi di berbagai layanan dan lingkungan (misalnya, di lingkungan pembelajaran, shell online, penangan bawaan, dll.) yang memungkinkan eksekusi kode Python, tetapi membatasi panggilan yang tersedia dan jangan izinkan metode akses seperti os.system.

Kode yang diusulkan adalah analog dari panggilan os.system, yang bekerja melalui eksploitasi kerentanan di CPython. Eksploitasi bekerja dengan semua versi Python 3 pada sistem x86-64 dan stabil di Ubuntu 22.04 bahkan dengan mode keamanan PIE, RELRO dan CET diaktifkan. Pekerjaan direduksi untuk memperoleh informasi dari kode Python tentang alamat salah satu fungsi dalam kode CPython yang dapat dieksekusi. Berdasarkan alamat ini, alamat dasar CPython dalam memori dan alamat fungsi system() dalam instance libc yang dimuat dihitung. Pada akhirnya, lompatan langsung ke alamat sistem tertentu dimulai dengan substitusi pointer argumen pertama ke string "/bin/sh".

Kerentanan dalam Python yang memungkinkan pemanggilan perintah sistem dari skrip kotak pasir


Sumber: opennet.ru

Tambah komentar