ApostropheCMS: Nieuwierzytelnione żądania importu CSV pozostawiają odrzucone pliki w systemowym katalogu tymczasowym
Podsumowanie
Odrzucony plik może pozostać w katalogu tymczasowym systemu operacyjnego.
Multer zapisuje plik przed zweryfikowaniem jego rozszerzenia, a ścieżka obsługi odrzucenia nie usuwa tego pliku tymczasowego. Nieuwierzytelniony użytkownik może powtarzać tę operację z użyciem dużych plików i stopniowo wyczerpywać przestrzeń dyskową na pliki tymczasowe.
Szczegóły
Punkt końcowy (endpoint):
POST /api/v1/@apostrophecms/rich-text-widget/generate-csv-table
W packages/apostrophe/modules/@apostrophecms/rich-text-widget/lib/apiRoutes.js Multer najpierw zapisuje przesyłany plik do os.tmpdir(). Następnie procedura obsługi odrzuca nazwy plików, których rozszerzenie jest inne niż csv, jednak na tej ścieżce błędu brakuje czyszczenia pliku zapisanego przez Multer.
Ścieżka ta nie wymaga uwierzytelnionego użytkownika. Wystarczy standardowe ciasteczko CSRF.
Podczas testów żądanie zwróciło odpowiedź HTTP 400 z Only csv files are supported, podczas gdy cała przesłana zawartość pozostała po odpowiedzi w pliku o losowej nazwie w skonfigurowanym katalogu tymczasowym.
Związek z wcześniejszymi pracami publicznymi
Przeanalizowano PR #5013,, w ramach którego ścieżka przesyłania plików CSV w formacie Rich Text została zmigrowana z connect-multiparty do biblioteki Multer. Niniejsze zgłoszenie dotyczy czyszczenia po tej migracji: odrzucony plik Multer pozostaje na dysku, co nie zostało opisane w PR ani w powiązanej dyskusji w ramach przeglądu kodu.
Dowód koncepcji (PoC)
Utwórz mały plik testowy. Do zademonstrowania zapełniania dysku można użyć większego pliku, lecz 1 MiB wystarcza do bezpiecznego lokalnego odtworzenia problemu:
dd if=/dev/zero of=rejected.txt bs=1M count=1
Pobierz standardowe ciasteczka witryny i wyślij odrzucany plik:
curl -c cookies.txt 'http://127.0.0.1:3000/' > /dev/null
curl -i -b cookies.txt \
-F 'file=@rejected.txt;filename=rejected.txt;type=text/plain' \
'http://127.0.0.1:3000/api/v1/@apostrophecms/rich-text-widget/generate-csv-table'
Odpowiedź to HTTP 400. Porównaj zawartość systemowego katalogu tymczasowego przed i po żądaniu:
ls -lt /tmp
Nowy plik o losowej nazwie pozostaje na dysku i zawiera przesłane bajty.
Logowanie nie jest wymagane. Powtarzanie żądania multipart tworzy kolejne trwałe pliki tymczasowe.
Wpływ
Zdalny, nieuwierzytelniony atakujący może zapełnić partycję używaną przez katalog tymczasowy systemu operacyjnego. Po wyczerpaniu miejsca na tej partycji Apostrophe oraz inne, niezwiązane usługi na tym samym hoście mogą nie być w stanie przesyłać plików, tworzyć danych tymczasowych ani kontynuować normalnego działania.
Atak wymaga jedynie powtarzania żądań HTTP, a zapisane pliki pozostają na dysku po każdej odrzuconej odpowiedzi.
Co trzeba zrobić
Zaktualizuj ApostropheCMS do wersji 4.33.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.33.0 | 4.33.0 |
Odnośniki
- https://github.com/apostrophecms/apostrophe/security/advisories/GHSA-qhcq-9pm2-c9w9
- 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:N/I:N/A:H- Słabość (CWE)
CWE-400, CWE-459, CWE-770- 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-qhcq-9pm2-c9w9 - 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: Nieuwierzytelnione żądania importu CSV pozostawiają odrzucone pliki w systemowym katalogu tymczasowym 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.