Podatność w Strapi (CMS) pozwala nieuwierzytelnionemu atakującemu na odczyt prywatnych pól tabeli administratorów, w tym tokenu resetowania hasła, co umożliwia pełne przejęcie konta administracyjnego bez logowania. Problem dotyczy wersji 4.0.0 do 5.36.x i wynika z niewystarczającej sanityzacji parametrów zapytań filtrujących dane przez pola relacyjne.
▸ Pokaż oryginał (EN)
Strapi is an open source headless content management system. Strapi versions starting in 4.0.0 and prior to 5.37.0 did not sufficiently sanitize query parameters when filtering content via relational fields. An unauthenticated attacker could use the `where` query parameter on any publicly-accessible content-type with an `updatedBy` (or other admin-relation) field to perform a boolean-oracle attack against private fields on the joined `admin_users` table, including the `resetPasswordToken` field. Extracting an admin reset token via this oracle made full administrative account takeover possible without authentication. When a filter such as `where[updatedBy][resetPasswordToken][$startsWith]=a` was applied to a public Content API endpoint, the underlying query generation performed a `LEFT JOIN` against the `admin_users` table and emitted a `WHERE` clause referencing the joined column. The query parameter sanitization layer did not block operator chains that traversed into relational target schemas the caller had no read permission on, allowing the response count to be used as a one-bit oracle on any admin-table field. The patch in version 5.37.0 introduces explicit query-parameter sanitization at the controller and service boundary via three new primitives: `strictParam`, `addQueryParams`, and `addBodyParams`. Operator chains that traverse into restricted relational targets are now rejected before reaching the database.
Atakujący wysyła zapytanie GET do publicznie dostępnego endpointu Content API, przekazując parametr `where` wskazujący na pole relacyjne (np. `updatedBy`), a następnie zagnieżdżając w nim odwołanie do prywatnego pola tabeli `admin_users`, np. `where[updatedBy][resetPasswordToken][$startsWith]=a`. Warstwa sanityzacji nie blokowała łańcuchów operatorów przechodzących do schematów docelowych relacji, do których wywołujący nie miał uprawnień odczytu. W rezultacie baza danych wykonywała `LEFT JOIN` na tabeli `admin_users` i emitowała klauzulę `WHERE` odwołującą się do prywatnego pola — liczba zwróconych wyników działała jako jednobitowy wyroczni (boolean-oracle). Powtarzając zapytania z różnymi prefiksami, atakujący mógł metodą brute-force odtworzyć pełną wartość tokenu resetowania hasła i zresetować hasło administratora.
Nieuwierzytelniony atakujący może odczytać token resetowania hasła dowolnego konta administratora i dokonać pełnego przejęcia konta administracyjnego (account takeover) bez żadnych poświadczeń.
Należy zaktualizować Strapi do wersji 5.37.0 lub nowszej. Wersja 5.37.0 wprowadza jawną sanityzację parametrów zapytań na granicy kontrolera i serwisu za pomocą nowych prymitywów `strictParam`, `addQueryParams` oraz `addBodyParams`, które odrzucają łańcuchy operatorów przechodzące do ograniczonych celów relacyjnych przed dotarciem do bazy danych. Jeśli natychmiastowa aktualizacja nie jest możliwa, należy rozważyć ograniczenie dostępu do publicznych endpointów Content API na poziomie firewall lub reverse proxy.
Strapi w wersjach od 4.0.0 do (ale nie włącznie) 5.37.0
Podatność jest możliwa do wyeksploatowania wyłącznie wtedy, gdy przynajmniej jeden typ treści (content-type) jest publicznie dostępny (bez uwierzytelnienia) i posiada pole relacyjne do tabeli administratorów, np. wbudowane pole `updatedBy`. Szczegóły techniczne opublikowano w ramach GitHub Security Advisory GHSA-rjg2-95x7-8qmx.
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:H/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:XStrapi
APPStrapi4.0.0 – 5.37.0 (bez)
Powiązane podatności
SQL Injection w Strapi Content-Type Builder — możliwe RCE i odczyt plików
An arbitrary file upload vulnerability in the file upload module of Strapi v4.1.5 allows attackers to execute ...
admin/src/containers/InputModalStepperProvider/index.js in Strapi before 3.2.5 has unwanted /proxy?url= functi...
strapi before 3.0.0-beta.17.5 mishandles password resets within packages/strapi-admin/controllers/Auth.js and ...
Strapi is an open-source headless content management system. In versions from 5.0.0 to before 5.5.2, the looku...