ApostropheCMS: GET /api/v1/@apostrophecms/page/:id omija ograniczenie viewRole i ujawnia pola chronione przez viewPermission użytkownikom o niższych uprawnieniach
Podsumowanie
Punkt końcowy REST getOne dla stron nie stosuje ograniczeń na poziomie typów viewRole ani redagowania na poziomie pól viewPermission. Użytkownik o uprawnieniach edytora, który zna _id dokumentu, może odczytać pełną treść stron przeznaczonych wyłącznie dla administratorów oraz ich uprzywilejowane pola, podczas gdy punkt końcowy getAll poprawnie egzekwuje oba te ograniczenia.
Szczegóły
Ustalenie 3 — pominięcie viewRole:
modules/@apostrophecms/page/index.js udostępnia getRestQuery(req, omitPermissionCheck = false). The getAll path calls publicApiCheckAsync i przetwarza pełny potok konstruktora zapytań, w tym filtrowanie viewRole. Ścieżka getOne używa odmiennej ścieżki kodu, która omija ten potok.
Typ strony zadeklarowany z viewRole: 'admin' jest niedostępny za pośrednictwem GET /api/v1/@apostrophecms/page?type=secretPage (zwraca 403 dla edytora), lecz jest w całości zwracany przez GET /api/v1/@apostrophecms/page/:id:en:published dla tego samego edytora.
Ustalenie 4 — wyciek pól viewPermission:
Pola oznaczone za pomocą viewPermission: { action: 'edit', type: '@apostrophecms/page' } są usuwane przez removeForbiddenFields na ścieżce getAll, lecz są zwracane w niezmienionej formie w getOne. Edytor znający dowolny _id dokumentu może odczytać wszystkie pola ograniczone przez viewPermission.
PoC
# Log in as editor, get session jar
EDITOR_JAR="..."
# getAll — correctly blocked
curl -b "$EDITOR_JAR" \
"http://TARGET/api/v1/@apostrophecms/page?type=secretPage"
# → 403 Forbidden
# getOne — bypassed, returns full document including viewPermission fields
curl -b "$EDITOR_JAR" \
"http://TARGET/api/v1/@apostrophecms/page/ADMIN_PAGE_ID:en:published"
# → 200 OK, full doc including secretField value
Wpływ
Edytorzy mogą odczytać pełną zawartość dowolnej strony — w tym tych zastrzeżonych dla administratorów za pomocą viewRole — jeśli znają lub odgadną _id. Wartości wrażliwych pól chronionych przez viewPermission są również całkowicie ujawnione. Narusza to model kontroli dostępu do treści w każdej witrynie korzystającej z tych dekoratorów.
Co trzeba zrobić
Zaktualizuj pakiet apostrophe do wersji 4.34.0 lub nowszej.
Czego dotyczy
Kliknij technologię, aby zobaczyć wszystkie dotyczące jej podatności.
| Platforma | Paczka | Podatne wersje | Poprawka w wersji |
|---|---|---|---|
| Paczka npm | apostrophe | < 4.34.0 | 4.34.0 |
Odnośniki
- https://github.com/apostrophecms/apostrophe/security/advisories/GHSA-vh56-5m88-39rq
- https://nvd.nist.gov/vuln/detail/CVE-2026-112957
- https://github.com/apostrophecms/apostrophe/commit/06e4b377f3c360f9e89c32dccd7e505ad5ddf498
- https://github.com/apostrophecms/apostrophe/commit/40b989b1a9dd23d30029b8ce7668634265cfe5ea
- https://github.com/apostrophecms/apostrophe
- https://github.com/apostrophecms/apostrophe/releases/tag/apostrophe@4.34.0
- Wektor CVSS
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N- Słabość (CWE)
CWE-862- Platforma
- npm
- Paczka
apostrophe- Ujawniono
- 21.10.2026
- Aktualizacja
- 21.10.2026 20:25
Źródła i licencje · Redakcja lub tłumaczenie: DockRay. Zachowano prawa źródeł i obowiązujące licencje.
OSV / GitHub Advisory Database - GHSA-vh56-5m88-39rq - 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
- 33
- Pierwsza → ostatnia
- 09.2020 10.2026
- Bez poprawki
- 4
- Wykorzystywana w atakach
- 0
Rozkład istotności
- Krytyczna 2
- Wysoka 9
- Średnia 18
- Niska 4
Ujawnienia w latach
- 2020: 2
- 2021: 2
- 2022: 0
- 2023: 0
- 2024: 0
- 2025: 0
- 2026: 29
-
ApostropheCMS: GET /api/v1/@apostrophecms/page/:id omija ograniczenie viewRole i ujawnia pola chronione przez viewPermission użytkownikom o niższych uprawnieniach 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.