ApostropheCMS: Nieodpowiednio ograniczone przesyłanie multipart bez uwierzytelnienia prowadzące do DoS przez wyczerpanie dysku
Podsumowanie
Punkt końcowy przesyłania formularzy uruchamia multer({ dest: os.tmpdir() }).any() przed logiką uwierzytelniania, klucza API, odpowiednika CSRF lub weryfikacji istnienia formularza, bez limitów rozmiaru, liczby czy częstotliwości zapytań. Nieuwierzytelnieni użytkownicy mogą przesyłać nieograniczone treści żądań na dysk w ramach każdego żądania; czyszczenie następuje dopiero po odebraniu pełnej zawartości.
Szczegóły
packages/form/index.js apiRoutes.post.submit (L274–296): [ multer({ dest: os.tmpdir() }).any(), self.normalizeFiles, async function (req) { try { submitForm } finally { unlink files } } ]. Brak limits, brak limitowania zapytań (rate limiting) i brak wstępnej walidacji. „CSRF” to plik cookie o stałej wartości typu double-submit (vulnlab.csrf=csrf, ustawiany przy dowolnym GET, express/index.js L694–703) — łatwy do anonimowego uzyskania.
PoC
$ curl -s -c csrfjar.cookies http://localhost:3100/ # get vulnlab.csrf=csrf (any GET)
$ df -P /tmp # before: used=1105212
$ curl -b csrfjar.cookies -X POST http://localhost:3100/api/v1/@apostrophecms/form/submit \
-F "file=@/tmp/opencode/big.bin;type=application/octet-stream" &
DURING transfer: used=1148668
still transferring: used=1226936 # +121MB mid-transfer on disk
http=500 time=1.78s sent=209715411B # generic error AFTER full staging
# Anonymous, zero credentials. 200MB written to /tmp pre-validation.
Wpływ
Dowolny nieuwierzytelniony klient może zmusić serwer do zapisywania całych treści żądań w tymczasowym systemie plików i ich dekodowania przez procesor; równoległe żądania wyczerpują dysk /tmp (awaria procesu/hosta) oraz nasycają pętlę zdarzeń, powodując zdalny DoS. Przerwane transfery stwarzają ryzyko pozostawienia porzuconych plików tymczasowych (brak czyszczenia req.aborted).
Co trzeba zrobić
Zaktualizuj pakiet @apostrophecms/form do wersji 1.5.5 lub nowszej.
Ponadto należy ustawić limits dla multer (fileSize, fields, parts, fieldSize); przeprowadzać weryfikację uwierzytelnienia/ról/istnienia przed montowaniem multer lub wewnątrz sprawdzanego handlera; usuwać przygotowane pliki przy pierwszym odczycie oraz przy req.aborted/błędzie; a także dodać limitowanie zapytań per IP.
Czego dotyczy
Kliknij technologię, aby zobaczyć wszystkie dotyczące jej podatności.
| Platforma | Paczka | Podatne wersje | Poprawka w wersji |
|---|---|---|---|
| Paczka npm | @apostrophecms/form | < 1.5.5 | 1.5.5 |
Odnośniki
- https://github.com/apostrophecms/apostrophe/security/advisories/GHSA-89mh-mm8c-mv7f
- 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/form@1.5.5
- Wektor CVSS
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L- Słabość (CWE)
CWE-770- Platforma
- npm
- Paczka
@apostrophecms/form- Ujawniono
- 20.10.2026
- Aktualizacja
- 20.10.2026 21:23
Źródła i licencje · Redakcja lub tłumaczenie: DockRay. Zachowano prawa źródeł i obowiązujące licencje.
OSV / GitHub Advisory Database - GHSA-89mh-mm8c-mv7f - CC BY 4.0
Historia podatności: @apostrophecms/form
Wszystkie opisane podatności tej paczki (Paczka npm), od najnowszej. Widać, czy to jednorazowa wpadka, czy paczka, której trzeba pilnować.
- Wszystkich wpisów
- 2
- Pierwsza → ostatnia
- 10.2026 10.2026
- Bez poprawki
- 0
- Wykorzystywana w atakach
- 0
Rozkład istotności
- Średnia 2
Ujawnienia w latach
- 2026: 2
-
ApostropheCMS: Nieodpowiednio ograniczone przesyłanie multipart bez uwierzytelnienia prowadzące do DoS przez wyczerpanie dysku 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.