Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Π² runc, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒΡΡ ΠΈΠ· ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Docker ΠΈ Kubernetes

Π’ инструмСнтарии для запуска ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² runc, примСняСмом Π² Docker ΠΈ Kubernetes, Π½Π°ΠΉΠ΄Π΅Π½Π° ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ CVE-2024-21626, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС хост-окруТСния ΠΈΠ· ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Π’ Ρ…ΠΎΠ΄Π΅ Π°Ρ‚Π°ΠΊΠΈ Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹ Π² хост-окруТСния ΠΈ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ выполнСния своСго ΠΊΠΎΠ΄Π° Π²Π½Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Π’ runtime crun ΠΈ youki, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… runc, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π² LXC, ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π½Π΅ проявляСтся. Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ устранСна Π² выпускС runc 1.1.12.

Π’ случаС использования инструмСнтариСв Docker ΠΈΠ»ΠΈ Kubernetes Π°Ρ‚Π°ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π° Ρ‡Π΅Ρ€Π΅Π· ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΡƒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π·Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, послС установки ΠΈ запуска ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΈΠ· ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ внСшнСй Π€Π‘. ΠŸΡ€ΠΈ использовании Docker имССтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ эксплуатации Ρ‡Π΅Ρ€Π΅Π· ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½Π½Ρ‹ΠΉ Dockerfile. Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ эксплуатирована Π² случаС запуска Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ процСссов ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ «runc exec» Ρ‡Π΅Ρ€Π΅Π· привязку Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° ΠΊ пространству ΠΈΠΌΡ‘Π½ хостового окруТСния.

Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Π° ΡƒΡ‚Π΅Ρ‡ΠΊΠΎΠΉ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… дСскрипторов. ΠŸΠ΅Ρ€Π΅Π΄ запуском ΠΊΠΎΠ΄Π° Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π² runc выполняСтся Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ всСх Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… дСскрипторов ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„Π»Π°Π³Π° O_CLOEXEC. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, послС ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ выполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ setcwd() остаётся ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ дСскриптор, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π½Π° Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‰ΠΈΠΉ ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ доступным послС запуска ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎ нСсколько Π±Π°Π·ΠΎΠ²Ρ‹Ρ… сцСнария Π°Ρ‚Π°ΠΊΠΈ Π½Π° хост-ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΡΡ‚Π°Π²ΡˆΠΈΠΉΡΡ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ дСскриптор.

НапримСр, Π°Ρ‚Π°ΠΊΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π² ΠΎΠ±Ρ€Π°Π·Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ process.cwd, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π½Π° «/proc/self/fd/7/», Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ привязкС ΠΊ процСссу pid1 Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°, находящСгося Π² пространствС монтирования хост-окруТСния. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π² ΠΎΠ±Ρ€Π°Π·Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ запуск «/proc/self/fd/7/../../../bin/bash» ΠΈ Ρ‡Π΅Ρ€Π΅Π· Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ shell-скрипта ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ содСрТимоС «/proc/self/exe», ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ссылаСтся Π½Π° Ρ…ΠΎΡΡ‚ΠΎΠ²ΡƒΡŽ копию /bin/bash.

Π”Ρ€ΡƒΠ³ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π°Ρ‚Π°ΠΊΠΈ позволяСт Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊΡƒ, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠΌΡƒ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Ρƒ хостового окруТСния, Ссли Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ процСссы ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ «runc exec с ΠΎΠΏΡ†ΠΈΠ΅ΠΉ «—cwd». ΠΡ‚Π°ΠΊΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΡƒΡ‚ΡŒ запускаСмого процСсса Π½Π° ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ссылку, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ Π½Π° «/proc/self/fd/7/» ΠΈ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ открытия «/proc/$exec_pid/cwd» для доступа ΠΊ Π€Π‘ Π½Π° сторонС хоста. ΠΡ‚Π°ΠΊΡƒΡŽΡ‰ΠΈΠΉ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ пСрСзаписи исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ² Π½Π° сторонС хостового окруТСния, Ρ‡Π΅Ρ€Π΅Π· ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡŽ запуска исполняСмого Ρ„Π°ΠΉΠ»Π° ΠΈΠ· хостового окруТСния («/proc/self/fd/7/../../../bin/bash») с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡŒΡŽ Ρ„Π°ΠΉΠ»Π° «/proc/$pid/exe», ΡΡΡ‹Π»Π°ΡŽΡ‰Π΅Π³ΠΎΡΡ Π½Π° Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ».

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ… инструмСнтария Docker выявлСно Π΅Ρ‰Ρ‘ ΠΏΡΡ‚ΡŒ уязвимостСй:

  • CVE-2024-23651 — состояниС Π³ΠΎΠ½ΠΊΠΈ Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ BuildKit, примСняСмом Π² Docker для прСобразования исходного ΠΊΠΎΠ΄Π° Π² сборочныС Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Ρ‹. Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Π° использованиСм Π² ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ выполняСмых стадиях сборки ΠΎΠ΄Π½ΠΎΠΉ ΠΎΠ±Ρ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ монтирования c кэшСм («—mount=type=cache,source=»), Ρ‡Ρ‚ΠΎ позволяСт ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π² BuildKit ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½Π½ΠΎΠ³ΠΎ Dockerfile ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ· сборочного ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° доступ ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ Π² хостовом ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ. Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ устранСна Π² BuildKit 0.12.5.
  • CVE-2024-23652 — ошибка ΠΏΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ пустых Ρ„Π°ΠΉΠ»ΠΎΠ², созданных для Ρ‚ΠΎΡ‡ΠΊΠΈ монтирования ΠΏΡ€ΠΈ использовании ΠΎΠΏΡ†ΠΈΠΈ «—mount», позволяСт Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ удалСния Ρ„Π°ΠΉΠ»Π° Π²Π½Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½Π½ΠΎΠ³ΠΎ Dockerfile. Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ устранСна Π² BuildKit 0.12.5.
  • CVE-2024-23653 — ошибка Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ API Π² BuildKit позволяСт Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ выполнСния ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° с ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½Π½Ρ‹ΠΌΠΈ привилСгиями, нСвзирая Π½Π° состояниС настройки security.insecure. Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ устранСна Π² BuildKit 0.12.5.
  • CVE-2024-23650 — врСдоносный ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΈΠ»ΠΈ фронтэнд BuildKit ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠ³ΠΎ процСсса BuildKit. Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ устранСна Π² BuildKit 0.12.5.
  • CVE-2024-24557 — Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ отравлСния кэша Π² Moby, ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅ для построСния спСциализированных систСм ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½ΠΎΠΉ изоляции. ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π·Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ помСщСния Π² кэш Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… этапах сборки. Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ устранСна Π² Moby 25.0.2 ΠΈ 24.0.9.

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