Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Π² firejail, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ root-доступ Π² систСмС

Π’ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π΅ для ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ выполнСния ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Firejail выявлСна ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ (CVE-2022-31214), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²Π° root Π² основной систСмС. Π’ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΌ доступС имССтся Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ эксплоит, ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΉ Π² Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… выпусках openSUSE, Debian, Arch, Gentoo ΠΈ Fedora с установлСнной ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΎΠΉ firejail. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° устранСна Π² выпускС firejail 0.9.70. Π’ качСствС ΠΎΠ±Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡƒΡ‚ΠΈ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² настройках (/etc/firejail/firejail.config) ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ «join no» ΠΈ «force-nonewprivs yes».

Firejail ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ для изоляции ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ пространств ΠΈΠΌΡ‘Π½ (namespaces), AppArmor ΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡŽ систСмных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² (seccomp-bpf) Π² Linux, Π½ΠΎ для настройки ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ запуска Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Ρ‡Π΅Ρ€Π΅Π· привязку ΠΊ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π΅ Ρ„Π»Π°Π³Π° suid root ΠΈΠ»ΠΈ запуск ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ sudo. Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Π° ошибкой Π² Π»ΠΎΠ³ΠΈΠΊΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΎΠΏΡ†ΠΈΠΈ «—join=<PID>», ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½ΠΎΠΉ для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ ΡƒΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅ΠΌΡƒ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΡŽ (Π°Π½Π°Π»ΠΎΠ³ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ login для sandbox-окруТСния) с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ окруТСния ΠΏΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅ΠΌΡƒ Π² Π½Ρ‘ΠΌ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρƒ процСсса. На этапС Π΄ΠΎ сброса ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ firejail опрСдСляСт ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ процСсса ΠΈ примСняСт ΠΈΡ… ΠΊ Π½ΠΎΠ²ΠΎΠΌΡƒ процСссу, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΠΎΠΌΡƒ ΠΊ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΡŽ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΎΠΏΡ†ΠΈΠΈ «—join».

ΠŸΠ΅Ρ€Π΅Π΄ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ осущСствляСтся ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°, Π·Π°ΠΏΡƒΡ‰Π΅Π½ Π»ΠΈ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ процСсс Π² ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ firejail. Данная ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΎΡ†Π΅Π½ΠΈΠ²Π°Π΅Ρ‚ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° /run/firejail/mnt/join. Для эксплуатации уязвимости Π°Ρ‚Π°ΠΊΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΈΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΠΈΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ Π½Π΅ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ firejail, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ пространство Ρ‚ΠΎΡ‡Π΅ΠΊ монтирования (mount namespace), послС Ρ‡Π΅Π³ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊ Π½Π΅ΠΌΡƒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΎΠΏΡ†ΠΈΠΈ «—join». Если Π² настройках Π½Π΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½ Ρ€Π΅ΠΆΠΈΠΌ Π·Π°ΠΏΡ€Π΅Ρ‚Π° получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ Π² Π½ΠΎΠ²Ρ‹Ρ… процСссах (prctl NO_NEW_PRIVS), firejail ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΊ Ρ„ΠΈΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌΡƒ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΡŽ ΠΈ попытаСтся ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ настройки пространства ΠΈΠΌΡ‘Π½ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ (user namespace) процСсса init (PID 1).

Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Ρ‘Π½Π½Ρ‹ΠΉ Ρ‡Π΅Ρ€Π΅Π· «firejail —join» процСсс окаТСтся Π² исходном для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ пространствС ΠΈΠΌΡ‘Π½ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ с Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ привилСгиями, Π½ΠΎ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ пространствС Ρ‚ΠΎΡ‡Π΅ΠΊ монтирования, ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΌ Π°Ρ‚Π°ΠΊΡƒΡŽΡ‰ΠΈΠΌ. Π’ Ρ‚ΠΎΠΌ числС Π°Ρ‚Π°ΠΊΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ setuid-root ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² созданном ΠΈΠΌ пространствС Ρ‚ΠΎΡ‡Π΅ΠΊ монтирования, Ρ‡Ρ‚ΠΎ позволяСт, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ настройки /etc/sudoers ΠΈΠ»ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ PAM Π² своСй Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ выполнСния ΠΊΠΎΠΌΠ°Π½Π΄ с ΠΏΡ€Π°Π²Π°ΠΌΠΈ root ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ sudo ΠΈΠ»ΠΈ su.

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

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ