Уязвимости Π² ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π΅ needrestart, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ root-доступ Π² Ubuntu Server

Компания Qualys выявила Ρ‚Ρ€ΠΈ уязвимости Π² ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π΅ needrestart, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½ΠΎΠΉ для пСрСзапуска Ρ„ΠΎΠ½ΠΎΠ²Ρ‹Ρ… процСссов послС обновлСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹ΠΌΠΈ процСссами Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. Начиная с Ubuntu 21.04 ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° needrestart Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° Π² состав Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ окруТСния Ubuntu Server, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ запускаСтся с ΠΏΡ€Π°Π²Π°ΠΌΠΈ root Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° APT, сканируСт Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Π΅ процСссы ΠΈ пСрСзапускаСт Ρ‚Π΅ ΠΈΡ… Π½ΠΈΡ…, Ρ‡Ρ‚ΠΎ связанны с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, измСнившимися послС обновлСния ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ². ВыявлСнныС уязвимости ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ Π½Π΅ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²Π° root Π² Ubuntu Server Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

Уязвимости ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π² needrestart начиная с вСрсии 0.8 (2014 Π³ΠΎΠ΄) ΠΈ устранСны Π² выпускС needrestart 3.8. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΆΠ΅ исправлСны Π² дистрибутивах Debian ΠΈ Ubuntu. Π’ качСствС ΠΎΠ±Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡƒΡ‚ΠΈ блокирования эксплуатации уязвимости ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ сканированиС ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠ², ΡƒΠΊΠ°Π·Π°Π² Π² Ρ„Π°ΠΉΠ»Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ /etc/needrestart/needrestart.conf ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ «$nrconf{interpscan} = 0».

Уязвимости ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π² ΠΊΠΎΠ΄Π΅ с Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Ρ€Π΅ΠΆΠΈΠΌΠ° опрСдСлСния обновлСния скриптов, Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… с использованиСм ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠ². ВыявлСнныС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹:

  • CVE-2024-48990 — Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ выполнСния ΠΊΠΎΠ΄Π° с ΠΏΡ€Π°Π²Π°ΠΌΠΈ root Ρ‡Π΅Ρ€Π΅Π· созданиС условий для запуска Python-ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° с выставлСнной Π°Ρ‚Π°ΠΊΡƒΡŽΡ‰ΠΈΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ окруТСния PYTHONPATH. ΠšΡ€ΠΎΠΌΠ΅ использования Python Π°Ρ‚Π°ΠΊΠ° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½Π° (CVE-2024-48992) Ρ‡Π΅Ρ€Π΅Π· запуск ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Ruby с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ окруТСния RUBYLIB.

    Уязвимости Π²Ρ‹Π·Π²Π°Π½Ρ‹ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π² процСссС пСрСзапуска измСнившСгося скрипта ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° needrestart выставляСт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ окруТСния PYTHONPATH Π½Π° основС содСрТимого Ρ„Π°ΠΉΠ»Π° /proc/pid/environ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π·Π°Ρ‚Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΈ для запуска собствСнного Python-ΠΊΠΎΠ΄Π°. БоотвСтствСнно, Π°Ρ‚Π°ΠΊΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΠΆΠ΄Π°Ρ‚ΡŒΡΡ активности, связанной с Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° APT, ΡΠΈΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ своСго скрипта ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ для Π½Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ окруТСния PYTHONPATH, которая Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Π° ΠΏΡ€ΠΈ запускС встроСнного Π² needrestart Python-ΠΊΠΎΠ΄Π° («import sys\n print(sys.path)»), выполняСмого с ΠΏΡ€Π°Π²Π°ΠΌΠΈ root.

    НапримСр, для эксплуатации уязвимости ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ постоянно висящий Π² памяти Python-процСсс, выставив для Π½Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ окруТСния «PYTHONPATH=/home/test», ΠΈ Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ «/home/test/importlib/__init__.so», которая Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Python-ΠΊΠΎΠ΄Π° Π² needrestart.

  • CVE-2024-48991 — Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ выполнСния ΠΊΠΎΠ΄Π° с ΠΏΡ€Π°Π²Π°ΠΌΠΈ root Ρ‡Π΅Ρ€Π΅Π· ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ состояния Π³ΠΎΠ½ΠΊΠΈ (race condition), Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ needrestart запустит Ρ„ΠΈΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Python, подставлСнный Π°Ρ‚Π°ΠΊΡƒΡŽΡ‰ΠΈΠΌ, вмСсто систСмного ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Python. Π‘ΡƒΡ‚ΡŒ ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠ° Π½Π° Π²Ρ‹ΡˆΠ΅ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, Ρ€Π°Π·Π½ΠΈΡ†Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ needrestart опрСдСляСт имя процСсса Python (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, /usr/bin/python3) Ρ‡Π΅Ρ€Π΅Π· Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ «/proc/pid/exe».

    Для эксплуатации уязвимости ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ процСсс /home/test/race, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° inotify доТдётся ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, ΠΊΠΎΠ³Π΄Π° needrestart Π½Π°Ρ‡Π½Ρ‘Ρ‚ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ содСрТимоС /proc/pid/exe, ΠΈ сразу запустит Ρ‡Π΅Ρ€Π΅Π· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ execve систСмный ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Python. Π’Π°ΠΊ ΠΊΠ°ΠΊ needrestart Π½Π΅ выполняСт ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ настоящий Π»ΠΈ это Python, Ρ‚ΠΎ ΠΎΠ½ посчитаСт, Ρ‡Ρ‚ΠΎ /home/test/race ΠΈ Π΅ΡΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Python ΠΈ запустит Π΅Π³ΠΎ для своСго ΠΊΠΎΠ΄Π°.

  • CVE-2024-11003 — Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ выполнСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… shell-ΠΊΠΎΠΌΠ°Π½Π΄ с ΠΏΡ€Π°Π²Π°ΠΌΠΈ root Ρ‡Π΅Ρ€Π΅Π· созданиС условий для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π² needrestart ΠΈΠΌΡ‘Π½ Ρ„Π°ΠΉΠ»ΠΎΠ² Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ «ΠΊΠΎΠΌΠ°Π½Π΄Π°|», ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π² Perl-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ open() ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ запуску ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. ЀактичСски ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ проявляСтся Π² Perl-ΠΌΠΎΠ΄ΡƒΠ»Π΅ ScanDeps (CVE-2024-10224), Π½ΠΎ Π²Ρ‹Π·Π²Π°Π½Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ΠΉ Π² этот ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π±Π΅Π· Π΄ΠΎΠ»ΠΆΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ.

    Атака ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ осущСствлСна Ρ‡Π΅Ρ€Π΅Π· запуск Perl-скрипта с символом «|» Π² ΠΈΠΌΠ΅Π½ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, «/home/test/perl|». Π’ процСссС выполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ scan_deps() Π² needrestart Π΄Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ Ρ‡Π΅Ρ€Π΅Π· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ open(), которая ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ символ «|» ΠΊΠ°ΠΊ Ρ„Π»Π°Π³ для запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ «/home/test/perl» ΠΈ использования ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΡ‚ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°.

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