ApostropheCMS import-export: Wstrzyknięcie NoSQL przez wartość update-key umożliwia dopasowanie i nadpisanie niezidentyfikowanego dokumentu
Podsumowanie
Funkcja aktualizacji według klucza w @apostrophecms/import-export pozwala zaimportowanemu dokumentowi zawierać właściwość <field>:key (na przykład slug:key), której wartość służy do wyszukania istniejącego dokumentu w celu jego aktualizacji zamiast wstawiania nowego. getUpdateKey()/insertOrUpdateDocWithKey() (lib/methods/import.js) używają tej wartości bezpośrednio jako zapytania MongoDB bez wcześniejszej sanityzacji:
const matchingDraftPromise = manager.findForEditing(
req.clone({ mode: 'draft' }),
{
aposMode: 'draft',
[updateField]: doc[updateKey]
}).toObject();
Dokumenty archiwum są parsowane za pomocą EJSON (zobacz lib/formats/gzip.js), który odtwarza obiekty, takie jak { $ne: null }, jako aktywne wartości. Jest to to samo niezaufane źródło danych i mechanizm odtwarzania, które zostały już wcześniej naprawione w tym module dla findSingletonAposDocId/findParkedAposDocId w GHSA-79qf-vqgc-7xx3. Poprawka ta nie objęła jednak insertOrUpdateDocWithKey, dlatego ten sam błąd występuje nadal: spreparowany wpis "slug:key": { "$ne": null } w aposDocs.json archiwum sprawia, że proces importu dopasowuje (a następnie aktualizuje) istniejący dokument, którego autor archiwum w rzeczywistości nie zidentyfikował, zamiast zakończyć się niepowodzeniem wyszukiwania.
Wpływ
Wykorzystanie tej podatności wymaga jedynie uwierzytelnionej sesji z uprawnieniami do importu dla danego typu obiektu (posiada je wbudowana rola contributor, co odpowiada warunkom wstępnym z GHSA-79qf-vqgc-7xx3) i nie wymaga interakcji administratora. Ponieważ dopasowanie wykorzystuje operator MongoDB zamiast dokładnej wartości, nie jest ono ograniczone do dokumentu, którego pole identyfikacyjne jest z góry znane importerowi: każdy istniejący dokument, do którego importer ma ogólne prawa edycji i który spełnia warunki operatora (co { $ne: null } spełnia dla każdego dokumentu z wartością inną niż null w tym polu), staje się kandydatem. Jedynym elementem zawężającym wybór nadpisywanego dokumentu jest filtr uprawnień findForEditing w Apostrophe, a nie logika klucza aktualizacji.
Zweryfikowano w działającym środowisku: żądanie roli contributor importujące dokument zawierający "slug:key": { "$ne": null } spowodowało zastosowanie jego zawartości do istniejącego, niepowiązanego szkicu artykułu i nadpisanie jego tytułu, mimo że importer nie wskazał rzeczywistego sluga tego artykułu.
Wersje dotknięte podatnością
Potwierdzono na gałęzi HEAD main z dnia 2026-09-04, packages/import-export/lib/methods/import.js.
Sugerowana poprawka
Przekształć doc[updateKey] w zwykły ciąg znaków (podobnie jak w poprawce zastosowanej do type/aposLocale/parkedId w GHSA-79qf-vqgc-7xx3) przed użyciem go jako wartości zapytania oraz przejdź do ścieżki wstawiania nowego rekordu, jeśli wartość nie jest poprawnym ciągiem znaków.
Co trzeba zrobić
Zaktualizuj pakiet @apostrophecms/import-export do wersji 3.7.0 lub nowszej.
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.0 | 3.7.0 |
Odnośniki
- https://github.com/apostrophecms/apostrophe/security/advisories/GHSA-jqw5-w6h3-44g6
- 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/@apostrophecms/import-export@3.7.0
- Wektor CVSS
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:L- Słabość (CWE)
CWE-284, CWE-943- Platforma
- npm
- Paczka
@apostrophecms/import-export- Ujawniono
- 20.10.2026
- Aktualizacja
- 20.10.2026 21:27
Źródła i licencje · Redakcja lub tłumaczenie: DockRay. Zachowano prawa źródeł i obowiązujące licencje.
OSV / GitHub Advisory Database - GHSA-jqw5-w6h3-44g6 - 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
- 4
- Pierwsza → ostatnia
- 03.2026 10.2026
- Bez poprawki
- 0
- Wykorzystywana w atakach
- 0
Rozkład istotności
- Krytyczna 1
- Średnia 3
Ujawnienia w latach
- 2026: 4
-
ApostropheCMS import-export: Wstrzyknięcie NoSQL przez wartość update-key umożliwia dopasowanie i nadpisanie niezidentyfikowanego dokumentu 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.