Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ root-уязвимости Π² инструмСнтарии управлСния ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ Snap

Компания Qualys выявила Π΄Π²Π΅ уязвимости (CVE-2021-44731, CVE-2021-44730) Π² ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π΅ snap-confine, поставляСмой с Ρ„Π»Π°Π³ΠΎΠΌ SUID root ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ процСссом snapd для формирования исполняСмого окруТСния для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, поставляСмых Π² самодостаточных ΠΏΠ°ΠΊΠ΅Ρ‚Π°Ρ… Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ snap. Уязвимости ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ Π½Π΅ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ выполнСния ΠΊΠΎΠ΄Π° с ΠΏΡ€Π°Π²Π°ΠΌΠΈ root Π² систСмС. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ устранСны Π² сСгодняшнСм ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² snapd для Ubuntu 21.10, 20.04 ΠΈ 18.04.

ΠŸΠ΅Ρ€Π²Π°Ρ ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ (CVE-2021-44730) позволяСт ΡΠΎΠ²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ Π°Ρ‚Π°ΠΊΡƒ Ρ‡Π΅Ρ€Π΅Π· ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΡΡ†ΠΈΡŽ Тёсткими ссылками, Π½ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ систСмной Π·Π°Ρ‰ΠΈΡ‚Ρ‹ Тёстких ссылок (установки sysctl fs.protected_hardlinks Π² 0). ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π²Ρ‹Π·Π²Π°Π½Π° Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ мСстополоТСния исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ² Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ snap-update-ns ΠΈ snap-discard-ns, запускаСмых с ΠΏΡ€Π°Π²Π°ΠΌΠΈ root. ΠŸΡƒΡ‚ΡŒ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ Ρ„Π°ΠΉΠ»Π°ΠΌ вычислялся Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sc_open_snapd_tool() Π½Π° основС собствСнного ΠΏΡƒΡ‚ΠΈ ΠΈΠ· /proc/self/exe, Ρ‡Ρ‚ΠΎ позволяСт ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΆΡ‘ΡΡ‚ΠΊΡƒΡŽ ссылку Π½Π° snap-confine Π² своём ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ ΠΈ Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² этом ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ свои Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ snap-update-ns ΠΈ snap-discard-ns. ПослС запуска ΠΏΠΎ Тёсткой ссылкС snap-confine с ΠΏΡ€Π°Π²Π°ΠΌΠΈ root запустит ΠΈΠ· Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Ρ„Π°ΠΉΠ»Ρ‹ snap-update-ns ΠΈ snap-discard-ns, подставлСнныС Π°Ρ‚Π°ΠΊΡƒΡŽΡ‰ΠΈΠΌ.

Вторая ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Π° состояниСм Π³ΠΎΠ½ΠΊΠΈ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ эксплуатирована Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Ubuntu Desktop ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Для ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ эксплоита Π² Ubuntu Server трСбуСтся Π²Ρ‹Π±ΠΎΡ€ ΠΏΡ€ΠΈ установкС ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΈΠ· сСкции «Featured Server Snaps». БостояниС Π³ΠΎΠ½ΠΊΠΈ проявляСтся Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ setup_private_mount(), Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ Π²ΠΎ врСмя ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ пространства ΠΈΠΌΡ‘Π½ Ρ‚ΠΎΡ‡Π΅ΠΊ монтирования для ΠΏΠ°ΠΊΠ΅Ρ‚Π° snap. Данная функция создаёт Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ «/tmp/snap.$SNAP_NAME/tmp» ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ для bind-монтировния Π² Π½Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² для ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ snap.

Π’Π°ΠΊ ΠΊΠ°ΠΊ имя Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° прСдсказуСмо, Π°Ρ‚Π°ΠΊΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ содСрТимоС Π½Π° ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ссылку Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ послС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π°, Π½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ΠΌ ΠΊ систСмному Π²Ρ‹Π·ΠΎΠ²Ρƒ mount. НапримСр, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ /tmp/snap.lxd ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ссылку «/tmp/snap.lxd/tmp», ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, ΠΈ Π²Ρ‹Π·ΠΎΠ² mount() послСдуСт Π·Π° символичСской ссылкой ΠΈ ΠΏΡ€ΠΈΠΌΠΎΠ½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Π² пространствС ΠΈΠΌΡ‘Π½ snap. ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ своё содСрТимоС Π² /var/lib ΠΈ Ρ‡Π΅Ρ€Π΅Π· Π·Π°ΠΌΠ΅Π½Ρƒ /var/lib/snapd/mount/snap.snap-store.user-fstab ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ своСго ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° /etc Π² пространствС ΠΈΠΌΡ‘Π½ snap-ΠΏΠ°ΠΊΠ΅Ρ‚Π° для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ своСй Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ с ΠΏΡ€Π°Π²Π°ΠΌΠΈ root Ρ‡Π΅Ρ€Π΅Π· Π·Π°ΠΌΠ΅Π½Ρƒ /etc/ld.so.preload.

ΠžΡ‚ΠΌΠ΅Ρ‡Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ созданиС эксплоита оказалось Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅ΠΉ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° snap-confine написана Π½Π° языкС Go с использованиСм ΠΏΡ€ΠΈΡ‘ΠΌΠΎΠ² бСзопасного программирования, ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π°Ρ‰ΠΈΡ‚Ρƒ Π½Π° основС ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ AppArmor, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡŽ систСмных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π½Π° основС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° seccomp ΠΈ примСняСт для изоляции пространство ΠΈΠΌΡ‘Π½ для монтирования. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, исслСдоватСлям ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ эксплоит для получСния ΠΏΡ€Π°Π² root Π² систСмС. Код эксплоита Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ Ρ‡Π΅Ρ€Π΅Π· нСсколько нСдСль, послС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ установят прСдоставлСнныС обновлСния.

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

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