ApostropheCMS: trasa REST :_id/locales pomija weryfikację autoryzacji publicznego API wymuszaną przez siostrzane trasy odczytu (ujawnienie istnienia dokumentu i metadanych wersji językowych)
Podsumowanie
Trasa REST GET /api/v1/<piece-type>/:_id/locales (oraz jej odpowiednik dla stron) nie stosuje mechanizmu sprawdzającego publicApiCheckAsync, który jest egzekwowany przez inne trasy odczytu w ApostropheCMS. Nieuwierzytelniony użytkownik może odpytać tę trasę o dowolny dokument _id i dowiedzieć się, czy dokument istnieje oraz w jakich wersjach językowych (locales) został opublikowany — stanowi to ujawnienie faktu istnienia dokumentu i metadanych wersji językowych, które powinno być chronione przez API odczytu.
Dotyczy
- Repozytorium:
apostrophecms/apostrophe(pakiet monorepoapostrophe). - Potwierdzone w wersji: 4.32.2 (commit
d3ff8c9== wydana wersja 4.32.2; bez zmian w aktualnym HEAD w chwili zgłoszenia). Brak poprawki w momencie publikacji zgłoszenia. - Stos technologiczny: Node.js / Express + MongoDB.
- Punkty końcowe:
GET /api/v1/<piece-type>/:_id/localesorazGET /api/v1/@apostrophecms/page/:_id/locales.
Szczegóły techniczne
- Luka:
modules/@apostrophecms/piece-type/index.js:397rejestruje trasę:_id/localesbezpublicApiCheckAsync. Moduł stron zawiera to samo pominięcie wmodules/@apostrophecms/page/index.js:925. - Zabezpieczone trasy pokrewne: trasy odczytu w tym samym module (np.
getAllwpiece-type/index.js:256-263) wywołująpublicApiCheckAsync(:263), aby wymusić politykę dostępu do publicznego API. - W rezultacie procedura obsługi
locales(wywołującagetLocales()dla danego dokumentu) wykonuje się dla każdego wywołującego, bez względu na politykę publicznego API stosowaną przez pozostałe trasy, zwracając metadane lokalizacji i publikacji dokumentu bez autoryzacji.
Wpływ
Nieuwierzytelniony użytkownik może potwierdzić istnienie dokumentu za pomocą _id i wyliczyć jego wersje językowe oraz stan publikacji — czyli informacje, które API odczytu powinno zabezpieczać. Zasadnie zaklasyfikowane jako 4.3 (AC:H) ze względu na warunek wstępny w postaci nieprzejrzystego identyfikatora _id (wywołujący musi znać ID dokumentu).
Weryfikacja (tylko lokalnie)
Odtworzono lokalnie na wersji apostrophe@4.32.2 (== commit d3ff8c9) przy użyciu syntetycznych danych:
- Przegląd kodu źródłowego potwierdził, że w trasie
:_id/localesbrakujepublicApiCheckAsync, podczas gdy siostrzane trasy odczytu posiadają to zabezpieczenie. - Nieuwierzytelnione zapytanie
GET /api/v1/<piece-type>/<_id>/localeszwróciło metadane lokalizacji dokumentu (istnienie + wersje językowe), podczas gdy chronione trasy odczytu (np.getAll) prawidłowo wymagały spełnienia polityki publicznego API. - Próba kontrolna: ta sama trasa po dodaniu mechanizmu
publicApiCheckAsync(zgodnie z trasami pokrewnymi) odrzuca nieuwierzytelnione żądanie, co potwierdza brak bramki jako przyczynę problemu. Testy przeprowadzono wyłącznie na danych syntetycznych; środowiska produkcyjne/hostowane nie były modyfikowane.
Podziękowania
Podziękowania dla Santosh Kumar Puppala (https://github.com/Santoshkumarpuppala).).
Co trzeba zrobić
Należy dodać bramkę autoryzacyjną publicApiCheckAsync (lub równoważną) do trasy :_id/locales zarówno w module piece-type, jak i w module page, zgodnie z konfiguracją siostrzanych tras odczytu, aby metadane istnienia dokumentu i wersji językowych były zwracane tylko wywołującym uprawnionym przez politykę publicznego API.
Czego dotyczy
Kliknij technologię, aby zobaczyć wszystkie dotyczące jej podatności.
| Platforma | Paczka | Podatne wersje | Poprawka w wersji |
|---|---|---|---|
| Paczka npm | apostrophe | < 4.33.0 | 4.33.0 |
Odnośniki
- https://github.com/apostrophecms/apostrophe/security/advisories/GHSA-gqh3-7856-rjjg
- https://github.com/apostrophecms/apostrophe/commit/9500b8b0e1d630d5e07fbb5fd2c25ed0943845ce
- https://github.com/apostrophecms/apostrophe/commit/f84fd41cbf6c22eb8d0008fc9c25df1f7130b350
- https://github.com/apostrophecms/apostrophe
- https://github.com/apostrophecms/apostrophe/releases/tag/apostrophe@4.33.0
- Wektor CVSS
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N- Słabość (CWE)
CWE-200, CWE-862- Platforma
- npm
- Paczka
apostrophe- Ujawniono
- 20.10.2026
- Aktualizacja
- 20.10.2026 21:26
Źródła i licencje · Redakcja lub tłumaczenie: DockRay. Zachowano prawa źródeł i obowiązujące licencje.
OSV / GitHub Advisory Database - GHSA-gqh3-7856-rjjg - CC BY 4.0
Historia podatności: apostrophe
Wszystkie opisane podatności tej paczki (Paczka npm), od najnowszej. Widać, czy to jednorazowa wpadka, czy paczka, której trzeba pilnować.
- Wszystkich wpisów
- 27
- Pierwsza → ostatnia
- 09.2020 10.2026
- Bez poprawki
- 4
- Wykorzystywana w atakach
- 0
Rozkład istotności
- Krytyczna 2
- Wysoka 8
- Średnia 13
- Niska 4
Ujawnienia w latach
- 2020: 2
- 2021: 2
- 2022: 0
- 2023: 0
- 2024: 0
- 2025: 0
- 2026: 23
-
ApostropheCMS: trasa REST :_id/locales pomija weryfikację autoryzacji publicznego API wymuszaną przez siostrzane trasy odczytu (ujawnienie istnienia dokumentu i metadanych wersji językowych) ten wpis
Dowiedz się, które podatności dotyczą Twojej aplikacji
Po podłączeniu integracji DockRay i włączeniu raportowania oprogramowania DockRay porównuje zgłoszone wersje komponentów ze znanymi podatnościami i powiadamia o potwierdzonych dopasowaniach. Zakres zależy od obsługiwanej technologii i dostępnych biuletynów.