Уязвимости Π² Node.js ΠΈ libuv

Доступны ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ выпуски сСрвСрной JavaScript-ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Node.js 21.6.2, 20.11.1, 18.19.1, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… исправлСно 8 уязвимостСй, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… 4 присвоСн высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ опасности:

  • CVE-2024-21892 — Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ подстановки Π½Π΅ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΊΠΎΠ΄Π°, Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈ, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ выполняСтся Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ процСсс. Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Π° ошибкой Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π³ΠΎ Π² процСссС с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΌΠΈ привилСгиями ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния, выставлСнныС Π½Π΅ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ. Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ CAP_NET_BIND_SERVICE, Π½ΠΎ ΠΈΠ·-Π·Π° ошибки ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΠ»ΠΎΡΡŒ ΠΈ ΠΊ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ полномочиям (capabilities).
  • CVE-2024-22019 — ΠΎΡ‚ΠΊΠ°Π· Π² обслуТивании Ρ‡Π΅Ρ€Π΅Π· исчСрпаниС доступных рСсурсов (Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π½Π° CPU ΠΈ расходованиС пропускной способности) ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ встроСнным HTTP-сСрвСром ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½Π½Ρ‹Ρ… chunked-запросов, приводящих ΠΊ Ρ‡Ρ‚Π΅Π½ΠΈΡŽ Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ количСства Π±Π°ΠΉΡ‚ΠΎΠ² Π² ΠΎΠ΄Π½ΠΎΠΌ соСдинСнии.
  • CVE-2024-21896 — Π²Ρ‹Ρ…ΠΎΠ΄ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρƒ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Π² Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… путях. Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ позволяСт ΠΎΠ±ΠΎΠΉΡ‚ΠΈ Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… ΠΏΡƒΡ‚Π΅ΠΉ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ path.resolve() Π² случаС ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΏΡƒΡ‚ΠΈ с использованиСм класса Buffer. Для получСния ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ ΠΏΡƒΡ‚ΠΈ послС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ Buffer.from(), Π½ΠΎ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π²Ρ‹Π·ΠΎΠ² Buffer.prototype.utf8Write, приводящий ΠΊ Π·Π°ΠΌΠ΅Π½Π΅ содСрТимого Π½Π° стадии послС выполнСния path.resolve() ΠΈ возникновСнию уязвимости.
  • CVE-2024-22017 — Π²Ρ‹Π·ΠΎΠ² setuid() Π½Π΅ сбрасывал всС ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈ. Π’ частности, setuid() Π½Π΅ влияСт Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ io_uring, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² libuv, Ссли ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π΄ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° setuid().
  • CVE-2023-46809 — ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Π² API privateDecrypt(), Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‰Π°Ρ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π°Ρ‚Π°ΠΊΠΈ Marvin для Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²ΠΊΠΈ RSA Π½Π° основС измСрСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ.
  • CVE-2024-21891 — Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±Ρ…ΠΎΠ΄Π° ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΏΡ€Π°Π² доступа ΠΏΡ€ΠΈ использовании ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… ΠΏΡƒΡ‚Π΅ΠΉ.
  • CVE-2024-21890 — нСкоррСктная ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° масок Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… «—allow-fs-read» ΠΈ «—allow-fs-write». НапримСр, «—allow-fs-read=/home/node/.ssh/*.pub» ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»Π΅Π½ΠΈΡŽ доступа ΠΊΠΎ всСму содСрТимому «.ssh/», Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ «.pub», Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ маска «*» обрабатываСтся ΠΊΠ°ΠΊ послСдний элСмСнт ΠΏΡƒΡ‚ΠΈ.
  • CVE-2024-22025 — ΠΎΡ‚ΠΊΠ°Π· Π² обслуТивании Ρ‡Π΅Ρ€Π΅Π· израсходованиС рСсурсов ΠΏΡ€ΠΈ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ сТатых Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ Brotli, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… Ρ‡Π΅Ρ€Π΅Π· Π²Ρ‹Π·ΠΎΠ² fetch().

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ выпуска Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ libuv 1.48.0, примСняСмой Π² Node.js для ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ соСдинСний ΠΈ асинхронной ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°. ΠšΡ€ΠΎΠΌΠ΅ Node.js Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ DNS-сСрвСрах BIND 9 ΠΈ Knot DNS, HTTP-сСрвСрС H2O, Lua-Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ΅ Luvit, Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машинС MoarVM, языкС Julia ΠΈ Python-Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ΅ uvloop. Π’ Π½ΠΎΠ²ΠΎΠΉ вСрсии устранСна ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ (CVE-2024-24806), ΠΏΡ€ΠΎΡΠ²Π»ΡΡŽΡ‰Π°ΡΡΡ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… libuv, ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ Π°Ρ‚Π°ΠΊΡƒ SSRF (Server-side request forgery) для получСния доступа ΠΊ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌΡƒ API. Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΈΠ·-Π·Π° обрСзания ΠΈΠΌΠ΅Π½ΠΈ хоста Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ uv_getaddrinfo() Π΄ΠΎ 256 символов Π½Π° этапС Π΄ΠΎ Ρ€Π΅Π·ΠΎΠ»Π²ΠΈΠ½Π³Π° Π΄ΠΎΠΌΠ΅Π½Π° Ρ‡Π΅Ρ€Π΅Π· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ getaddrinfo(), Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ Π½Π΅ Ρ‚ΠΎΠ³ΠΎ IP-адрСса ΠΈ ΠΎΠ±Ρ…ΠΎΠ΄Ρƒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ. НапримСр, сСрвисы Ρ‚ΠΈΠΏΠ° MySpace, ΡΠΎΠ·Π΄Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠ΄Π΄ΠΎΠΌΠ΅Π½Ρ‹ Π²ΠΈΠ΄Π° «username.example.com», ΠΌΠΎΠΆΠ½ΠΎ Π°Ρ‚Π°ΠΊΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π΄Π»ΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

Π’Π°ΠΊΠΆΠ΅ Π²Ρ‹ΡˆΠ»ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Π² Node.js HTTP-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° undici 5.28.3, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ устранСна ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ (CVE-2024-24758), вызванная отсутствиСм очистки HTTP-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Proxy-Authorization ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ запросов.

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