Vulnerabilitatea în Python care permite apelarea comenzilor de sistem din scripturi izolate

A fost publicată o metodă pentru a ocoli sistemele izolate de execuție a codului în Python, bazată pe utilizarea unui bug cunoscut de mult timp care a apărut în Python 2.7, a fost identificat în 2012 și nu a fost încă corectat în Python 3. Bug-ul permite utilizarea unor conexiuni speciale. cod în Python pentru a iniția un apel către memoria deja eliberată (Use-After-Free) în Python. Inițial, s-a presupus că eroarea nu reprezenta o amenințare la securitate și numai în cazuri foarte rare, de obicei create artificial, ar putea duce la o terminare anormală a scriptului.

Un cercetător de securitate sub pseudonimul kn32 a devenit interesat de problemă și a reușit să pregătească un exploit de lucru care face posibilă apelarea oricărei comenzi de sistem fără a avea acces direct la metode precum os.system. Exploita-ul este implementat în pur Python și funcționează fără a importa biblioteci externe și fără a instala handler-ul „code.__new__”. Dintre cârlige, este folosit doar „builtin.__id__”, ceea ce de obicei nu este interzis. Din punct de vedere practic, codul propus poate fi folosit pentru a ocoli mecanismele de izolare în diverse servicii și medii (de exemplu, în medii de învățare, shell-uri online, handlere încorporate etc.), care permit executarea codului Python, dar limitează apeluri disponibile și nu permit metode de apel precum os.system.

Codul propus este un analog al apelului os.system, care funcționează prin exploatarea unei vulnerabilități în CPython. Exploatarea funcționează cu toate versiunile de Python 3 pe sisteme cu arhitectură x86-64 și demonstrează funcționarea stabilă pe Ubuntu 22.04, chiar și atunci când modurile de protecție PIE, RELRO și CET sunt activate. Munca se reduce la obținerea de informații din codul Python despre adresa uneia dintre funcțiile din codul executabil CPython. Pe baza acestei adrese, se calculează adresa de bază a CPython în memorie și adresa funcției system() din instanța libc încărcată în memorie. La final, o tranziție directă la o anumită adresă de sistem este inițiată prin înlocuirea indicatorului primului argument la linia „/bin/sh”.

Vulnerabilitatea în Python care permite apelarea comenzilor de sistem din scripturi izolate


Sursa: opennet.ru

Adauga un comentariu