apostrophecms-form
Ecosystem: npm
Downloads: 2.01 K
- 0CriticalAffects 0 versions
- 0HighAffects 0 versions
- 0MediumAffects 0 versions
- 2ModerateAffects 2 versions
- 0LowAffects 0 versions
- Critical0 (0.0%)
- High0 (0.0%)
- Medium0 (0.0%)
- Moderate2 (100.0%)
- Low0 (0.0%)
Monthly breakdown
- 2 vulnerabilities
- Critical: 0
- High: 0
- Medium: 0
- Moderate: 2
- Low: 0
Vulnerabilities (2)
Known vulnerabilities affecting apostrophecms-form, based on data from OSV.
| ID | Severity | Summary | Affected versions | Published | Source |
|---|---|---|---|---|---|
| GHSA-44qr-rrjg-2cqq | Moderate | ApostropheCMS: CAPTCHA response token not URL-encoded**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 = ' |
| GitHub (opens in a new tab) | |
| GHSA-89mh-mm8c-mv7f | Moderate | ApostropheCMS: Unauthenticated unbounded multipart upload → disk-exhaustion DoS**Summary** The form submission endpoint runs `multer({ dest: os.tmpdir() }).any()` before authentication, API-key, CSRF-equivalent, or form-existence logic, with no size/count/rate limits. Unauthenticated users can stream unbounded bodies to disk per request; cleanup occurs only after the full body is received. **Details** `packages/form/index.js` `apiRoutes.post.submit` (L274–296): `[ multer({ dest: os.tmpdir() }).any(), self.normalizeFiles, async function (req) { try { submitForm } finally { unlink files } } ]`. No `limits`, no rate limiting, no pre-validation. "CSRF" is a fixed-value doub |
| GitHub (opens in a new tab) |
- GHSA-44qr-rrjg-2cqqModerateApostropheCMS: CAPTCHA response token not URL-encoded
< 1.5.5
**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 = '
CVE: CVE-2026-113667
- GHSA-89mh-mm8c-mv7fModerateApostropheCMS: Unauthenticated unbounded multipart upload → disk-exhaustion DoS
< 1.5.5
**Summary** The form submission endpoint runs `multer({ dest: os.tmpdir() }).any()` before authentication, API-key, CSRF-equivalent, or form-existence logic, with no size/count/rate limits. Unauthenticated users can stream unbounded bodies to disk per request; cleanup occurs only after the full body is received. **Details** `packages/form/index.js` `apiRoutes.post.submit` (L274–296): `[ multer({ dest: os.tmpdir() }).any(), self.normalizeFiles, async function (req) { try { submitForm } finally { unlink files } } ]`. No `limits`, no rate limiting, no pre-validation. "CSRF" is a fixed-value doub
CVE: CVE-2026-113656