GitHub Advisoryadvisory · npm

GHSA-44qr-rrjg-2cqq ApostropheCMS: CAPTCHA response token not URL-encoded

MEDIUM Published 2026-10-20 Modified 2026-10-20 Official page ↗
Aliases
CVE-2026-113667
Ecosystem
npm
Packages
@apostrophecms/form, @apostrophecms/login-recaptcha, @apostrophecms/login-hcaptcha
Severity
Moderate
CVSS vector
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
Weaknesses
CWE-116
Reviewed
2026-10-20

Affected packages

• npm @apostrophecms/form: < 1.5.5 → fixed in 1.5.5 • npm @apostrophecms/login-recaptcha: < 1.2.1 → fixed in 1.2.1 • npm @apostrophecms/login-hcaptcha: < 1.3.0 → fixed in 1.3.0

Description

Summary Form and login CAPTCHA verification interpolate the user-supplied widget token unencoded into the server-side verification URL/body, allowing a crafted token to inject query parameters into the reCAPTCHA/hCaptcha verify request. Details • `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` — same pattern for login • `packages/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=&response=attacker_token&secret=INJECTED_SECRET&something=1 (replicated exactly from recaptcha.js:39) ``` Impact Low: a crafted token smuggles extra `key=value` pairs (`secret`, extra `response`) into the outbound verify call, forcing verification failures (DoS of the captcha gate and of captcha-gated login/form flows) and enabling automated bypass probing; no secret exfiltration. Remediation — Build the verify request with `URL` + `searchParams` (or `encodeURIComponent` on both `secret` and `response`), and validate the token against `^[A-Za-z0-9._-]{1,2048}$` before use.

Related

Alias · CVE (1)

  • CVE-2026-113667 ApostropheCMS is an open-source Node.js content management system. vulnerability

Weakness · CWE (1)

  • CWE-116 Improper Encoding or Escaping of Output weakness

References