Python-da sistem əmrlərini təcrid olunmuş skriptlərdən çağırmağa imkan verən zəiflik

Python 2.7-də ortaya çıxan, 2012-ci ildə müəyyən edilmiş və hələ də Python 3-də düzəldilməyən çoxdan məlum səhvin istifadəsinə əsaslanan Python-da təcrid olunmuş kod icra sistemlərindən yan keçmək üçün metod nəşr edilmişdir. Python-da artıq boşaldılmış yaddaşa (Use-After-Free) girişi başlamaq üçün Python kodu. Əvvəlcə güman edilirdi ki, xəta təhlükəsizlik təhlükəsi yaratmır və yalnız çox nadir hallarda, adətən süni şəkildə yaradılır, skriptin qeyri-normal dayandırılmasına səbəb ola bilər.

kn32 təxəllüslü təhlükəsizlik tədqiqatçısı problemlə maraqlandı və os.system kimi metodlara birbaşa çıxışı olmadan istənilən sistem əmrini çağırmağa imkan verən işlək eksploit hazırlamağı bacardı. İstismar təmiz Python-da həyata keçirilir və xarici kitabxanaları idxal etmədən və “code.__new__” işləyicisini quraşdırmadan işləyir. Qarmaqlardan yalnız “builtin.__id__” istifadə olunur, bu adətən qadağan edilmir. Təcrübə baxımından təklif olunan kod müxtəlif xidmətlərdə və mühitlərdə (məsələn, öyrənmə mühitlərində, onlayn qabıqlarda, daxili işləyicilərdə və s.) Python kodunun icrasına imkan verən, lakin onu məhdudlaşdıran izolyasiya mexanizmlərindən yan keçmək üçün istifadə edilə bilər. mövcud zənglər və os.system kimi zəng üsullarına icazə verməyin.

Təklif olunan kod CPython-da boşluqdan istifadə etməklə işləyən os.system çağırışının analoqudur. İstismar, x3-86 arxitekturasına malik sistemlərdə Python 64-ün bütün versiyaları ilə işləyir və hətta PIE, RELRO və CET mühafizə rejimləri aktiv olduqda belə Ubuntu 22.04-də stabil işləməyi nümayiş etdirir. İş icra olunan CPython kodundakı funksiyalardan birinin ünvanı haqqında Python kodundan məlumat əldə etməkdən ibarətdir. Bu ünvana əsasən yaddaşda CPython-un əsas ünvanı və yaddaşa yüklənmiş libc instansiyasında system() funksiyasının ünvanı hesablanır. Sonda, birinci arqumentin göstəricisinin “/bin/sh” sətirinə əvəz edilməsi ilə müəyyən sistem ünvanına birbaşa keçid başlanır.

Python-da sistem əmrlərini təcrid olunmuş skriptlərdən çağırmağa imkan verən zəiflik


Mənbə: opennet.ru

Добавить комментарий