ΠΠΎΡΡΡΠΏΠ½Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠΈΡΡΡΡΠΈΠ΅ Π²ΡΠΏΡΡΠΊΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠΉ 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