@apostrophecms/form: ApostropheCMS: CAPTCHA response token not URL-encoded
What fixes it
- 1.5.5@apostrophecms/form, npmGitHub
npm install @apostrophecms/form@1.5.5 - 1.2.1@apostrophecms/login-recaptcha, npmGitHub
npm install @apostrophecms/login-recaptcha@1.2.1 - 1.3.0@apostrophecms/login-hcaptcha, npmGitHub
npm install @apostrophecms/login-hcaptcha@1.3.0
A fixed version on one release line is not the upgrade target for every line. Check your exact version and any vendor backports.
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 loginpackages/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)
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.
Text from GitHub Advisory Database
Affected versions 10
- @apostrophecms/form, npm< 1.5.5GitHub
- @apostrophecms/login-recaptcha, npm< 1.2.1GitHub
- @apostrophecms/login-hcaptcha, npm< 1.3.0GitHub
- apostropheaffected: < 4.33.0CVE List
- formaffected: < 1.5.5CVE List
- login-hcaptchaaffected: < 1.3.0CVE List
- login-recaptchaaffected: < 1.2.1CVE List
- @apostrophecms/form, npmfrom first release, fixed in 1.5.5OSV
- @apostrophecms/login-recaptcha, npmfrom first release, fixed in 1.2.1OSV
- @apostrophecms/login-hcaptcha, npmfrom first release, fixed in 1.3.0OSV
References 5
- github.com/apostrophecms/apostrophe/commit/9500b8b0e1d630d5e07fbb5fd2c25ed0943845ceFixvia CVE List
- github.com/apostrophecms/apostrophe/commit/f84fd41cbf6c22eb8d0008fc9c25df1f7130b350Fixvia CVE List
- github.com/apostrophecms/apostrophe/releases/tag/@apostrophecms/form@1.5.5Fixvia CVE List
- github.com/apostrophecms/apostrophe/security/advisories/GHSA-44qr-rrjg-2cqqAdvisoryvia CVE List
- github.com/advisories/GHSA-44qr-rrjg-2cqqAdvisoryvia GitHub