ApostropheCMS: Brak uwierzytelnienia w trasie `cleanExport`
1. Podsumowanie
Punkt końcowy API POST /api/v1/@apostrophecms/import-export/clean-export w @apostrophecms/import-export nie posiada weryfikacji uwierzytelnienia ani autoryzacji. Dowolny klient — w tym nieuwierzytelnieni anonimowi użytkownicy, którzy uzyskali standardowy plik cookie CSRF po odwiedzeniu witryny — może bezpośrednio wywołać tę trasę i uruchomić bazową metodę self.cleanExport(req).
2. Pliki i punkty końcowe, których dotyczy problem
- Punkt końcowy:
POST /api/v1/@apostrophecms/import-export/clean-export - Definicja trasy:
packages/import-export/lib/apiRoutes.js(linie 32–34) - Implementacja metody:
packages/import-export/lib/methods/import.js(linie 1271–1324)
3. Analiza przyczyny źródłowej
W packages/import-export/lib/apiRoutes.js procedura obsługi get.related jawnie weryfikuje, czy wywołujący jest zalogowany:
get: {
async related(req) {
if (!req.user) {
throw self.apos.error('forbidden');
}
// ...
}
}
W przeciwieństwie do tego, post.cleanExport (jak również post.overrideDuplicates) nie zawiera żadnej weryfikacji req.user:
post: {
async overrideDuplicates(req) {
return self.overrideDuplicates(req);
},
async cleanExport(req) {
return self.cleanExport(req); // <-- No authentication check
}
}
Ponieważ ApostropheCMS nie wymusza uwierzytelnienia globalnie na wszystkich apiRoutes, pominięcie jawnego zabezpieczenia if (!req.user) pozwala anonimowym żądaniom przejść bezpośrednio do warstwy logiki biznesowej.
4. Dowód podatności
Podczas wysyłania nieuwierzytelnionego żądania POST ze standardowym plikiem cookie CSRF witryny (wydawanym każdemu odwiedzającemu na GET /), żądanie całkowicie omija kontrolę dostępu i wykonuje self.cleanExport(req), na co wskazuje ślad stosu serwera:
at Object.cleanExport (.../packages/import-export/lib/methods/import.js)
at .../packages/apostrophe/modules/@apostrophecms/module/index.js:193:30
Potwierdza to, że wykonanie bezpośrednio dociera do głównego modułu importu/eksportu bez uwierzytelnionej sesji.
5. Wpływ
- Naruszenie kontroli dostępu: Nieuwierzytelnieni użytkownicy mogą wywoływać operacje czyszczenia oraz usuwać tymczasowe pliki i artefakty eksportu przechowywane na serwerze.
- Nieautoryzowana zmiana stanu: Punkt końcowy umożliwia modyfikację rekordów zadań w bazie danych za pośrednictwem
req.body.jobId(wymuszając ich stan naended: true, status: 'completed') oraz odrzucanie powiadomień przezreq.body.notificationIdbez weryfikacji, czy zasoby należą do wnioskującego użytkownika.
6. Sugerowane rozwiązanie (łatka)
Wymuś sprawdzanie uwierzytelnienia w packages/import-export/lib/apiRoutes.js przed wykonaniem bazowych metod:
--- a/packages/import-export/lib/apiRoutes.js
+++ b/packages/import-export/lib/apiRoutes.js
@@ -26,10 +26,16 @@ module.exports = self => {
get: { ... },
post: {
async overrideDuplicates(req) {
+ if (!req.user) {
+ throw self.apos.error('forbidden');
+ }
return self.overrideDuplicates(req);
},
async cleanExport(req) {
+ if (!req.user) {
+ throw self.apos.error('forbidden');
+ }
return self.cleanExport(req);
}
}
Co trzeba zrobić
Zaktualizuj pakiet @apostrophecms/import-export do wersji 3.7.1 lub nowszej. Alternatywnie wdróż sprawdzanie uwierzytelnienia w packages/import-export/lib/apiRoutes.js przed wykonaniem bazowych metod.
Czego dotyczy
Kliknij technologię, aby zobaczyć wszystkie dotyczące jej podatności.
| Platforma | Paczka | Podatne wersje | Poprawka w wersji |
|---|---|---|---|
| Paczka npm | @apostrophecms/import-export | < 3.7.1 | 3.7.1 |
Odnośniki
- https://github.com/apostrophecms/apostrophe/security/advisories/GHSA-rw26-wwfc-9wvm
- https://nvd.nist.gov/vuln/detail/CVE-2026-113648
- 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/@apostrophecms/import-export@3.7.1
- Wektor CVSS
CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:L/A:N- Słabość (CWE)
CWE-306, CWE-862- Platforma
- npm
- Paczka
@apostrophecms/import-export- Ujawniono
- 21.10.2026
- Aktualizacja
- 21.10.2026 20:24
Źródła i licencje · Redakcja lub tłumaczenie: DockRay. Zachowano prawa źródeł i obowiązujące licencje.
OSV / GitHub Advisory Database - GHSA-rw26-wwfc-9wvm - CC BY 4.0
Historia podatności: @apostrophecms/import-export
Wszystkie opisane podatności tej paczki (Paczka npm), od najnowszej. Widać, czy to jednorazowa wpadka, czy paczka, której trzeba pilnować.
- Wszystkich wpisów
- 9
- Pierwsza → ostatnia
- 03.2026 10.2026
- Bez poprawki
- 0
- Wykorzystywana w atakach
- 0
Rozkład istotności
- Krytyczna 1
- Wysoka 1
- Średnia 6
- Niska 1
Ujawnienia w latach
- 2026: 9
-
ApostropheCMS: Brak uwierzytelnienia w trasie `cleanExport` 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.