Вразливість у Python, що дозволяє викликати системні команди із ізольованих скриптів.

Опубліковано метод обходу систем ізольованого виконання коду мовою Python, заснований на використанні давно відомої помилки, що з'явилася в Python 2.7, виявленої в 2012 році і досі не виправленої в Python 3. Помилка дозволяє за допомогою спеціально скомпонованого коду мовою Python вже звільненої пам'яті (Use-After-Free) у СPython. Спочатку передбачалося, що помилка не становить загрози безпеці і лише в дуже поодиноких випадках, як правило штучно створених, може призвести до аварійного завершення скрипту.

Дослідник безпеки під псевдонімом kn32 зацікавився проблемою і зумів підготувати робочий експлоїт, що дозволяє викликати будь-яку системну команду, не маючи прямого доступу до методів виду os.system. Експлоїт реалізований чистою мовою Python і працює без імпорту зовнішніх бібліотек і без встановлення обробника code.__new__. З hook-ів використовується тільки builtin.__id__, який зазвичай не заборонений. З практичного боку запропонований код може застосовуватися для обходу механізмів ізоляції в різних сервісах та оточеннях (наприклад, у навчальних середовищах, online-оболонках, вбудованих обробниках тощо), що допускають виконання коду мовою Python, але обмежують доступні виклики і не дозволяють звертатись до таких методів, як os.system.

Запропонований код є аналогом виклику os.system, що працює через експлуатацію вразливості в CPython. Експлоїт працює з усіма версіями Python 3 на системах з архітектурою x86-64 та демонструє стабільну роботу в Ubuntu 22.04, навіть при включенні режимів захисту PIE, RELRO та CET. Робота зводиться до отримання з коду мовою Python відомостей про адресу однієї з функцій у коді CPython, що виконується. На підставі цієї адреси обчислюється базова адреса CPython у пам'яті та адреса функції system() у завантаженому в п'ять примірниках libc. На завершення ініціюється прямий перехід за певною адресою system з підстановкою покажчика першого аргументу на рядок "/bin/sh".

Вразливість у Python, що дозволяє викликати системні команди із ізольованих скриптів.


Джерело: opennet.ru

Додати коментар або відгук