Podatność w eksperymentalnym modelu uprawnień (permission model) Node.js pozwala ominąć ochronę przed path traversal poprzez manipulację wewnętrznymi metodami obiektu Buffer. Luka otrzymała ocenę CVSS 9.8 (krytyczną), co wskazuje na możliwość poważnego naruszenia poufności, integralności i dostępności danych.
▸ Pokaż oryginał (EN)
The permission model protects itself against path traversal attacks by calling path.resolve() on any paths given by the user. If the path is to be treated as a Buffer, the implementation uses Buffer.from() to obtain a Buffer from the result of path.resolve(). By monkey-patching Buffer internals, namely, Buffer.prototype.utf8Write, the application can modify the result of path.resolve(), which leads to a path traversal vulnerability. This vulnerability affects all users using the experimental permission model in Node.js 20 and Node.js 21. Please note that at the time this CVE was issued, the permission model is an experimental feature of Node.js.
Permission model w Node.js chroni się przed atakami path traversal, wywołując funkcję path.resolve() na ścieżkach dostarczonych przez użytkownika, a następnie konwertując wynik do obiektu Buffer przy pomocy Buffer.from(). Atakujący może zastosować technikę monkey-patchingu, podmieniając wewnętrzną metodę Buffer.prototype.utf8Write, co umożliwia modyfikację wyniku zwróconego przez path.resolve(). W efekcie mechanizm ochrony przed path traversal zostaje obejście, a aplikacja może zostać nakłoniona do odczytu lub zapisu plików poza zamierzonymi ścieżkami.
Atakujący może uzyskać nieautoryzowany dostęp do plików i zasobów systemu plików poza dozwolonymi ścieżkami, co prowadzi do naruszenia poufności, integralności oraz dostępności danych przetwarzanych przez aplikację.
Należy zastosować patche dostępne u producenta zgodnie z referencjami. Jeśli aktualizacja nie jest możliwa, należy rozważyć wyłączenie eksperymentalnego permission model do czasu wdrożenia poprawki.
Użytkownicy korzystający z eksperymentalnego permission model w Node.js 20 oraz Node.js 21. Podatność nie dotyczy instalacji, w których permission model nie jest włączony.
W chwili publikacji CVE permission model był funkcją eksperymentalną Node.js — podatność dotyczy wyłącznie środowisk, w których ta funkcja jest aktywnie używana.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HNode.js
APPNodejs20.0.0 – 20.11.1 (bez)21.0.0 – 21.6.2 (bez)
Powiązane podatności
Node.js TLS: błąd obsługi hostname z null-bajtem prowadzi do przekierowania authority
Node.js: obejście modelu uprawnień przez Unix Domain Socket
Obejście modelu uprawnień w Node.js poprzez spreparowane symlinki
Command injection w aplikacjach Windows korzystających z CreateProcess
Various `node:fs` functions allow specifying paths as either strings or `Uint8Array` objects. In Node.js envir...