Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Π² VFS ядра Linux, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ свои ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈ

Π’ API Filesystem Context, прСдоставляСмым ядром Linux, выявлСна ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ (CVE-2022-0185), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ получСния ΠΏΡ€Π°Π² root Π² систСмС. Π’Ρ‹ΡΠ²ΠΈΠ²ΡˆΠΈΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π» Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€Π°Ρ†ΠΈΡŽ Ρ€Π°Π±ΠΎΡ‚Ρ‹ эксплоита, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π³ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ с ΠΏΡ€Π°Π²Π°ΠΌΠΈ root Π² Ubuntu 20.04 Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Код эксплоита планируСтся Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π½Π° GitHub Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅Π΄Π΅Π»ΠΈ, послС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ дистрибутивы выпустят ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ с исправлСниСм уязвимости.

Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ присутствуСт Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ legacy_parse_param() Π² VFS ΠΈ Π²Ρ‹Π·Π²Π°Π½Π° отсутствиС Π΄ΠΎΠ»ΠΆΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ максимального Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², прСдоставляСмых Π² Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… систСмах, Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… API Filesystem Context. ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ слишком большого ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ цСлочислСнной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ для расчСта Ρ€Π°Π·ΠΌΠ΅Ρ€Π° записываСмых Π΄Π°Π½Π½Ρ‹Ρ… — Π² ΠΊΠΎΠ΄Π΅ имССтся ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π²Ρ‹Ρ…ΠΎΠ΄Π° Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρƒ Π±ΡƒΡ„Π΅Ρ€Π° «if (len > PAGE_SIZE — 2 — size)», которая Π½Π΅ срабатываСт, Ссли Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ size большС 4094 ΠΈΠ·-Π·Π° цСлочислСнного пСрСполнСния Ρ‡Π΅Ρ€Π΅Π· ниТнюю Π³Ρ€Π°Π½ΠΈΡ†Ρƒ (integer underflow, ΠΏΡ€ΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠΈ 4096 — 2 — 4095 ΠΊ unsigned int получится 2147483648).

Указанная ошибка позволяСт ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½Π½ΠΎΠΌΡƒ ΠΎΠ±Ρ€Π°Π·Ρƒ Π€Π‘ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π±ΡƒΡ„Π΅Ρ€Π° ΠΈ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ядра, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π·Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ памяти. Для эксплуатации уязвимости трСбуСтся Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΏΡ€Π°Π² CAP_SYS_ADMIN, Ρ‚.Π΅. ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ администратора. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ полномочия Π½Π΅ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π² ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅, Ссли Π² систСмС Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° пространств ΠΈΠΌΡ‘Π½ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ (user namespaces). НапримСр, user namespaces ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½ Π² Ubuntu ΠΈ Fedora, Π½ΠΎ Π½Π΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½ Π² Debian ΠΈ RHEL (Ссли Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½ΠΎΠΉ изоляции).

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° проявляСтся начиная с ядра Linux 5.1 ΠΈ устранСна Π²ΠΎ Π²Ρ‡Π΅Ρ€Π°ΡˆΠ½ΠΈΡ… обновлСниях 5.16.2, 5.15.16, 5.10.93, 5.4.173. ОбновлСния ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² с устранСниСм уязвимости ΡƒΠΆΠ΅ Π²Ρ‹ΠΏΡƒΡ‰Π΅Π½Ρ‹ для RHEL, Debian, Fedora, Ubuntu. Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠΊΠ° нСдоступно Π² Arch Linux, Gentoo, SUSE ΠΈ openSUSE. Π’ качСствС ΠΎΠ±Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡƒΡ‚ΠΈ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ для систСм, Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½ΡƒΡŽ ΠΈΠ·ΠΎΠ»ΡΡ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² 0 Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ sysctl «user.max_user_namespaces»: echo «user.max_user_namespaces=0» > /etc/sysctl.d/userns.conf # sysctl -p /etc/sysctl.d/userns.conf

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