Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Π² 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 c подстановкой указатСля ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Π½Π° строку «/bin/sh».

Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Π² Python, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ систСмныС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈΠ· ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… скриптов


Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru