Podatność w Parse Server umożliwia dowolnemu klientowi posiadającemu wyłącznie klucz aplikacji (application key) bezpośredni dostęp do wewnętrznych tabel relacji (Relation) przez REST API lub GraphQL API bez wymagania klucza master. Jest to podatność krytyczna (CVSS 10.0), ponieważ pozwala na pełne obejście mechanizmów kontroli dostępu opartych na rolach.
▸ Pokaż oryginał (EN)
Parse Server is an open source backend that can be deployed to any infrastructure that can run Node.js. Prior to 9.5.2-alpha.7 and 8.6.20, Parse Server's internal tables, which store Relation field mappings such as role memberships, can be directly accessed via the REST API or GraphQL API by any client using only the application key. No master key is required. An attacker can create, read, update, or delete records in any internal relationship table. Exploiting this allows the attacker to inject themselves into any Parse Role, gaining all permissions associated with that role, including full read, write, and delete access to classes protected by role-based Class-Level Permissions (CLP). Similarly, writing to any such table that backs a Relation field used in a pointerFields CLP bypasses that access control. This vulnerability is fixed in 9.5.2-alpha.7 and 8.6.20.
Wewnętrzne tabele Parse Server, przechowujące mapowania pól relacji (np. przynależności do ról), nie są prawidłowo chronione przed dostępem zewnętrznym (CWE-284 — nieprawidłowa kontrola dostępu). Atakujący, dysponując jedynie kluczem aplikacji, może wykonywać operacje CRUD (tworzenie, odczyt, aktualizacja, usuwanie) na dowolnej wewnętrznej tabeli relacji. Dzięki temu może wstrzyknąć dowolne konto do wybranej roli (Parse Role), przejmując wszystkie uprawnienia z nią związane. Analogicznie możliwe jest ominięcie mechanizmu pointerFields CLP poprzez bezpośredni zapis do tabeli backing danego pola Relation.
Atakujący może przyznać sobie pełne uprawnienia odczytu, zapisu i usuwania do klas chronionych przez Class-Level Permissions (CLP) oparte na rolach, skutecznie przejmując kontrolę nad danymi aplikacji. Możliwe jest również całkowite ominięcie innych mechanizmów kontroli dostępu opartych na polach wskaźnikowych (pointerFields CLP).
Należy zaktualizować Parse Server do wersji 9.5.2-alpha.7 (gałąź 9.x) lub 8.6.20 (gałąź 8.x), w których podatność została naprawiona. Patche dostępne są w referencjach producenta na GitHub.
Parse Server (Parseplatform parse-server) w wersjach wcześniejszych niż 9.5.2-alpha.7 oraz wcześniejszych niż 8.6.20
Podatność posiada maksymalny wynik CVSS 10.0 z wektorem sieciowym, bez wymagań co do uprawnień i interakcji użytkownika oraz ze zmianą zakresu (Scope: Changed), co odzwierciedla możliwość wpływu na zasoby wykraczające poza pierwotnie dostępny kontekst. Szczegółowe informacje dostępne w security advisory GHSA-5f92-jrq3-28rc.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:LParseplatform Parse Server
APPParseplatform9.5.2< 8.6.209.0.0 – 9.5.2 (bez)
Powiązane podatności
Parse Server: obejście walidatorów Cloud Functions przez prototype chain
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 polach zagnieżdżonych
SQL Injection w Parse Server (PostgreSQL) — operacje Increment na zagnieżdżonych polach