Podatność w Parse Server pozwala nieuwierzytelnionemu atakującemu na ominięcie mechanizmów kontroli dostępu (walidatorów) chroniących Cloud Functions poprzez dołączenie ciągu 'prototype.constructor' do nazwy funkcji w URL. Zagrożenie jest krytyczne, ponieważ umożliwia wywołanie chronionych funkcji backendowych bez jakiegokolwiek uwierzytelnienia.
▸ Pokaż oryginał (EN)
Parse Server is an open source backend that can be deployed to any infrastructure that can run Node.js. Prior to versions 8.6.67 and 9.7.0-alpha.11, an attacker can bypass Cloud Function validator access controls by appending "prototype.constructor" to the function name in the URL. When a Cloud Function handler is declared using the function keyword and its validator is a plain object or arrow function, the trigger store traversal resolves the handler through its own prototype chain while the validator store fails to mirror this traversal, causing all access control enforcement to be skipped. This allows unauthenticated callers to invoke Cloud Functions that are meant to be protected by validators such as requireUser, requireMaster, or custom validation logic. This issue has been patched in versions 8.6.67 and 9.7.0-alpha.11.
Gdy handler Cloud Function jest zadeklarowany słowem kluczowym 'function', a jego walidator jest zwykłym obiektem lub arrow function, mechanizm wyszukiwania handlera przeszukuje łańcuch prototypów JavaScript (prototype chain). Walidator przechowywany jest jednak w osobnym miejscu, które nie odzwierciedla tego samego przeszukiwania łańcucha prototypów. W rezultacie, gdy atakujący doda 'prototype.constructor' do nazwy funkcji w żądaniu HTTP, serwer odnajduje handler przez prototype chain, ale nie znajduje odpowiadającego walidatora — co powoduje całkowite pominięcie egzekwowania kontroli dostępu. Atakujący może w ten sposób wywołać funkcje chronione przez walidatory takie jak requireUser, requireMaster lub własną logikę walidacyjną.
Nieuwierzytelniony atakujący może wywoływać dowolne chronione Cloud Functions, w tym te wymagające uprawnień użytkownika lub klucza master, co może prowadzić do nieautoryzowanego odczytu i modyfikacji danych aplikacji.
Należy zaktualizować Parse Server do wersji 8.6.67 lub nowszej (gałąź v8) albo do wersji 9.7.0-alpha.11 lub nowszej (gałąź v9). Patche dostępne są w referencjach producenta pod commit 4fc48cf oraz dc59e27.
Parse Server (Parseplatform parse-server) w wersjach wcześniejszych niż 8.6.67 (gałąź v8) oraz wcześniejszych niż 9.7.0-alpha.11 (gałąź v9)
Podatność zgłoszona i załatana w ramach security advisory GHSA-vpj2-qq7w-5qq6 w repozytorium GitHub parse-community/parse-server. Poprawki wprowadzono w pull requestach #10342 i #10343.
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:XParseplatform Parse Server
APPParseplatform9.7.0< 8.6.679.0.0 – 9.7.0 (bez)
Powiązane podatności
Parse Server — przejęcie konta przez manipulację zapytaniem (Auth Bypass)
Race condition w Parse Server — błędna walidacja tokenów OAuth2
SQL Injection w Parse Server (PostgreSQL) — operacje Increment na zagnieżdżonych polach
SQL Injection w Parse Server (PostgreSQL) — operacje Increment na polach zagnieżdżonych
SQL Injection w Parse Server poprzez dot-notation i parametr sort (PostgreSQL)