Уязвимост Π² Python, която позволява систСмни ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½ΠΈ ΠΎΡ‚ ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Π½ΠΈ скриптовС

ΠŸΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½ Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π° заобикалянС Π½Π° ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Π½ΠΈ систСми Π·Π° изпълнСниС Π½Π° ΠΊΠΎΠ΄ Π² Python, Π±Π°Π·ΠΈΡ€Π°Π½ Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΎΡ‚Π΄Π°Π²Π½Π° извСстСн бъг, появил сС Π² Python 2.7, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π½ ΠΏΡ€Π΅Π· 2012 Π³. ΠΈ всС ΠΎΡ‰Π΅ Π½Π΅ Π΅ ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°Π½ Π² Python 3. Π“Ρ€Π΅ΡˆΠΊΠ°Ρ‚Π° позволява ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° спСциално ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ Python ΠΊΠΎΠ΄ Π·Π° ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€Π°Π½Π΅ Π½Π° Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ Π²Π΅Ρ‡Π΅ освободСна ΠΏΠ°ΠΌΠ΅Ρ‚ (Use-After-Free) Π² Python. ΠŸΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΎ сС ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡˆΠ΅, Ρ‡Π΅ Π³Ρ€Π΅ΡˆΠΊΠ°Ρ‚Π° Π½Π΅ прСдставлява Π·Π°ΠΏΠ»Π°Ρ…Π° Π·Π° сигурността ΠΈ само Π² ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π΅Π΄ΠΊΠΈ случаи, ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ изкуствСно създадСни, ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ Π½Π΅ΠΎΠ±ΠΈΡ‡Π°ΠΉΠ½ΠΎ прСкратяванС Π½Π° скрипта.

Π˜Π·ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π» ΠΏΠΎ сигурността ΠΏΠΎΠ΄ псСвдоним kn32 сС заинтСрСсува ΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΈ успя Π΄Π° ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ Сксплойт, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΡ€Π°Π²ΠΈ възмоТно ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° всяка систСмна ΠΊΠΎΠΌΠ°Π½Π΄Π°, Π±Π΅Π· Π΄Π° ΠΈΠΌΠ°Ρ‚Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π΅Π½ Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ ΠΊΠ°Ρ‚ΠΎ os.system. Π•ΠΊΡΠΏΠ»ΠΎΠΉΡ‚ΡŠΡ‚ Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ Π² чист Python ΠΈ Ρ€Π°Π±ΠΎΡ‚ΠΈ Π±Π΅Π· ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° външни Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ Π±Π΅Π· инсталиранС Π½Π° ΠΌΠ°Π½ΠΈΠΏΡƒΠ»Π°Ρ‚ΠΎΡ€Π° β€žcode.__new__β€œ. ΠžΡ‚ ΠΊΡƒΠΊΠΈΡ‚Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° само β€œbuiltin.__id__”, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π½Π΅ Π΅ Π·Π°Π±Ρ€Π°Π½Π΅Π½ΠΎ. ΠžΡ‚ практичСска Π³Π»Π΅Π΄Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ°, прСдлоТСният ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° заобикалянС Π½Π° ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΈ Π·Π° изолация Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ услуги ΠΈ срСди (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² срСди Π·Π° ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅, ΠΎΠ½Π»Π°ΠΉΠ½ Ρ‡Π΅Ρ€ΡƒΠΏΠΊΠΈ, Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»Π°Ρ‚ΠΎΡ€ΠΈ ΠΈ Ρ‚.Π½.), ΠΊΠΎΠΈΡ‚ΠΎ позволяват ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠ΄ Π½Π° Python, Π½ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π°Π²Π°Ρ‚ Π½Π°Π»ΠΈΡ‡Π½ΠΈ повиквания ΠΈ Π½Π΅ позволяват ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ Π·Π° ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½Π΅ ΠΊΠ°Ρ‚ΠΎ os.system.

ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡΡ‚ ΠΊΠΎΠ΄ Π΅ Π°Π½Π°Π»ΠΎΠ³ Π½Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° os.system, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈ Ρ‡Ρ€Π΅Π· ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° уязвимост Π² CPython. Π•ΠΊΡΠΏΠ»ΠΎΠΉΡ‚ΡŠΡ‚ Ρ€Π°Π±ΠΎΡ‚ΠΈ с всички вСрсии Π½Π° Python 3 Π½Π° систСми с x86-64 Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° ΠΈ дСмонстрира стабилна Ρ€Π°Π±ΠΎΡ‚Π° Π½Π° Ubuntu 22.04, Π΄ΠΎΡ€ΠΈ ΠΊΠΎΠ³Π°Ρ‚ΠΎ Ρ€Π΅ΠΆΠΈΠΌΠΈΡ‚Π΅ Π½Π° Π·Π°Ρ‰ΠΈΡ‚Π° PIE, RELRO ΠΈ CET са Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ΠΈ. Π Π°Π±ΠΎΡ‚Π°Ρ‚Π° сС свСТда Π΄ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° информация ΠΎΡ‚ ΠΊΠΎΠ΄Π° Π½Π° Python Π·Π° адрСса Π½Π° Π΅Π΄Π½Π° ΠΎΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ Π² изпълнимия ΠΊΠΎΠ΄ Π½Π° CPython. Π’ΡŠΠ· основа Π½Π° Ρ‚ΠΎΠ·ΠΈ адрСс сС изчисляват основният адрСс Π½Π° CPython Π² ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° ΠΈ Π°Π΄Ρ€Π΅ΡΡŠΡ‚ Π½Π° функцията system() Π² СкзСмпляра Π½Π° libc, Π·Π°Ρ€Π΅Π΄Π΅Π½ Π² ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°. Накрая сС ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚Π΅Π½ ΠΏΡ€Π΅Ρ…ΠΎΠ΄ към ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π΅Π½ систСмСн адрСс със замяна Π½Π° указатСля Π½Π° ΠΏΡŠΡ€Π²ΠΈΡ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π² Ρ€Π΅Π΄Π° β€œ/bin/sh”.

Уязвимост Π² Python, която позволява систСмни ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½ΠΈ ΠΎΡ‚ ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Π½ΠΈ скриптовС


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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€