ApostropheCMS: token odpowiedzi CAPTCHA nie jest kodowany w formacie URL
Podsumowanie
Weryfikacja CAPTCHA formularzy i logowania interpoluje podany przez użytkownika token widżetu w postaci niezakodowanej do adresu URL/treści weryfikacji po stronie serwera. Pozwala to spreparowanemu tokenowi na wstrzyknięcie parametrów zapytania do żądania weryfikacji reCAPTCHA/hCaptcha.
Szczegóły
packages/form/lib/recaptcha.js:39—recaptchaUri = 'https://www.google.com/recaptcha/api/siteverify?secret=${recaptchaSecret}&response=${input.recaptcha}'packages/login-recaptcha/index.js:44— ten sam schemat przy logowaniupackages/login-hcaptcha/index.js:47—body: 'response=${token}&secret=${secret}'
PoC
input.recaptcha = 'attacker_token&secret=INJECTED_SECRET&something=1'
→ resulting verify URL:
https://www.google.com/recaptcha/api/siteverify?secret=<real>&response=attacker_token&secret=INJECTED_SECRET&something=1
# (replicated exactly from recaptcha.js:39)
Wpływ
Niski: spreparowany token przemyca dodatkowe pary key=value (secret, dodatkowe response) do wychodzącego wywołania weryfikacyjnego, wymuszając błędy weryfikacji (odmowa usługi dla bramki CAPTCHA oraz przepływów logowania i formularzy chronionych przez CAPTCHA) i umożliwiając zautomatyzowane testowanie obejścia; brak eksfiltracji poufnych danych.
Co trzeba zrobić
Buduj żądanie weryfikacji za pomocą URL + searchParams (lub encodeURIComponent na obu: secret i response), a przed użyciem zweryfikuj poprawność tokena względem ^[A-Za-z0-9._-]{1,2048}$.
Zaktualizuj podatne pakiety do wersji zawierających poprawkę:
@apostrophecms/form: wersja 1.5.5 lub nowsza@apostrophecms/login-hcaptcha: wersja 1.3.0 lub nowsza@apostrophecms/login-recaptcha: wersja 1.2.1 lub nowsza
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 |
| Paczka npm | @apostrophecms/login-hcaptcha | < 1.3.0 | 1.3.0 |
| Paczka npm | @apostrophecms/login-recaptcha | < 1.2.1 | 1.2.1 |
Odnośniki
- https://github.com/apostrophecms/apostrophe/security/advisories/GHSA-44qr-rrjg-2cqq
- 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:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:L/VA:L/SC:N/SI:N/SA:N- Słabość (CWE)
CWE-116- Platforma
- npm
- Paczka
@apostrophecms/form, @apostrophecms/login-hcaptcha, @apostrophecms/login-recaptcha- Ujawniono
- 20.10.2026
- Aktualizacja
- 21.10.2026 10:00
Źródła i licencje · Redakcja lub tłumaczenie: DockRay. Zachowano prawa źródeł i obowiązujące licencje.
OSV / GitHub Advisory Database - GHSA-44qr-rrjg-2cqq - CC BY 4.0
Historia podatności: @apostrophecms/login-hcaptcha
Wszystkie opisane podatności tej paczki (Paczka npm), od najnowszej. Widać, czy to jednorazowa wpadka, czy paczka, której trzeba pilnować.
To jedyna znana podatność tej paczki.
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.