Уязвимост Π² e2fsck ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° спСциално ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€Π°Π½ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ

Π’ ΠΏΠΎΠΌΠΎΡ‰Π½Π°Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° e2fsck, доставСна ΠΊΠ°Ρ‚ΠΎ част ΠΎΡ‚ ΠΏΠ°ΠΊΠ΅Ρ‚Π° e2fsprogs, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π½ΠΈ уязвимост (CVE-2019 5188-), ΠΊΠΎΠ΅Ρ‚ΠΎ Π²ΠΈ позволява Π΄Π° ΠΈΠ·ΠΏΡŠΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠ΄ Π½Π° Π°Ρ‚Π°ΠΊΡƒΠ²Π°Ρ‰, ΠΊΠΎΠ³Π°Ρ‚ΠΎ провСряватС Ρ„Π°ΠΉΠ»ΠΎΠ²Π° систСма, ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‰Π° спСциално ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€Π°Π½ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ. Уязвимостта бСшС ΠΏΠΎΡ‚Π²ΡŠΡ€Π΄Π΅Π½Π° във вСрсии 1.43.3 Π΄ΠΎ 1.45.4. Уязвимостта Π΅ ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°Π½Π° Π² актуализацията e2fsck 1.45.5. Π’ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚ΠΈΡ‚Π΅ Π·Π° разпространСниС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ всС ΠΎΡ‰Π΅ остава Π½Π΅ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°Π½ (Debian, Arch Linux, SUSE/openSUSE, Ubuntu, RHEL).

Уязвимостта Π΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅Π½Π° ΠΎΡ‚ Π³Ρ€Π΅ΡˆΠΊΠ° във функцията mutate_name() във Ρ„Π°ΠΉΠ»Π° rehash.c, ΠΊΠΎΠΉΡ‚ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΡ€ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° Ρ…Π΅Ρˆ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈΡ‚Π΅, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с дирСктория, ΠΊΠ°Ρ‚ΠΎ сС Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°, Ρ‡Π΅ всички Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π² дирСкторията са ΡΡŠΠΏΠΎΡΡ‚Π°Π²Π΅Π½ΠΈ с дирСкторията. ΠŸΠΎΠ²Ρ€Π΅Π΄Π°Ρ‚Π° Π½Π° структурата hash_entry, ΡΠ²ΡŠΡ€Π·Π°Π½Π° с дирСктория, ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ Π½Π°ΠΏΠ°Π΄Π°Ρ‚Π΅Π», ΠΊΠΎΠΉΡ‚ΠΎ записва Π΄Π°Π½Π½ΠΈ Π² област извън разпрСдСлСния Π±ΡƒΡ„Π΅Ρ€. Ако няколко Ρ„Π°ΠΉΠ»Π° с Π΅Π΄Π½ΠΎ ΠΈ ΡΡŠΡ‰ΠΎ ΠΈΠΌΠ΅ са ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π½ΠΈ Π² Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° ΠΊΠ°Ρ‚ΠΎ ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ към дирСктория, ΠΏΠΎΠΌΠΎΡ‰Π½Π°Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° e2fsck ΠΏΡ€Π΅ΠΈΠΌΠ΅Π½ΡƒΠ²Π° Π΄ΡƒΠ±Π»ΠΈΡ€Π°Ρ‰ΠΈΡ‚Π΅ сС Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, ΠΊΠ°Ρ‚ΠΎ добавя ~0, ~1 ΠΈ Ρ‚.Π½. към ΠΈΠΌΠ΅Ρ‚ΠΎ. Π—Π° Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Π½Π΅ Π½Π° Π½ΠΎΠ²ΠΎΡ‚ΠΎ ΠΈΠΌΠ΅ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Ρ‚Π°ΠΊΠΎΠ²Π° ΠΏΡ€Π΅ΠΈΠΌΠ΅Π½ΡƒΠ²Π°Π½Π΅, Π² стСка сС разпрСдСля Π±ΡƒΡ„Π΅Ρ€ с Ρ€Π°Π·ΠΌΠ΅Ρ€ 256 Π±Π°ΠΉΡ‚Π°.

Π Π°Π·ΠΌΠ΅Ρ€ΡŠΡ‚ Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ трябва Π΄Π° сС ΠΊΠΎΠΏΠΈΡ€Π°Ρ‚, сС опрСдСля ΠΎΡ‚ ΠΈΠ·Ρ€Π°Π·Π° "entry->name_len & 0xff", Π½ΠΎ стойността Π½Π° entry->name_len сС Π·Π°Ρ€Π΅ΠΆΠ΄Π° ΠΎΡ‚ структура Π½Π° диска, Π° Π½Π΅ сС изчислява ΠΎΡ‚ дСйствитСлния Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π° ΠΈΠΌΠ΅Ρ‚ΠΎ. Ако Ρ€Π°Π·ΠΌΠ΅Ρ€ΡŠΡ‚ Π΅ Π½ΡƒΠ»Π°, Ρ‚ΠΎΠ³Π°Π²Π° ΠΈΠ½Π΄Π΅ΠΊΡΡŠΡ‚ Π½Π° масива ΠΏΡ€ΠΈΠ΅ΠΌΠ° стойност -1 ΠΈ сС ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚ условия Π·Π° цСлочислСно ΠΏΡ€Π΅ΠΏΡŠΠ»Π²Π°Π½Π΅ ΠΏΡ€Π΅Π· Π΄ΠΎΠ»Π½Π°Ρ‚Π° Π³Ρ€Π°Π½ΠΈΡ†Π° Π½Π° Π±ΡƒΡ„Π΅Ρ€Π° (integer underflow) ΠΈ прСзаписванС Π½Π° Π΄Ρ€ΡƒΠ³ΠΈ Π΄Π°Π½Π½ΠΈ Π² стСка със стойност β€ž~0β€œ. Π—Π° 64-Π±ΠΈΡ‚ΠΎΠ²ΠΈ систСми ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° уязвимостта сС оцСнява ΠΊΠ°Ρ‚ΠΎ ΠΌΠ°Π»ΠΊΠΎ вСроятно ΠΈ Π½Π΅ изисква ограничСния Π·Π° Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π° стСка (ulimit -s unlimited). Π—Π° 32-Π±ΠΈΡ‚ΠΎΠ²ΠΈ систСми Сксплоатацията сС счита Π·Π° възмоТна, Π½ΠΎ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΡŠΡ‚ силно зависи ΠΎΡ‚ Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ ΠΈΠ·ΠΏΡŠΠ»Π½ΠΈΠΌΠΈΡΡ‚ Ρ„Π°ΠΉΠ» Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½ ΠΎΡ‚ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Π°.

Π—Π° Π΄Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠΈ Π°Ρ‚Π°ΠΊΠ°, нападатСлят трябва Π΄Π° ΠΏΠΎΠ²Ρ€Π΅Π΄ΠΈ Π΄Π°Π½Π½ΠΈΡ‚Π΅ ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π½Π°Ρ‡ΠΈΠ½ Π² дяла с Ρ„Π°ΠΉΠ»ΠΎΠ²Π°Ρ‚Π° систСма ext2, ext3 ΠΈΠ»ΠΈ ext4. Въй ΠΊΠ°Ρ‚ΠΎ Ρ‚Π°Π·ΠΈ опСрация изисква ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈ Π½Π° супСрпотрСбитСл, уязвимостта прСдставлява Π·Π°ΠΏΠ»Π°Ρ…Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΡ‰Π½Π°Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° e2fsck сканира външни устройства ΠΈΠ»ΠΈ външно ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈ FS изобраТСния.

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

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