Vulnerability GHSA-4h7h-rv7c-7m2v

Medium Risk
MEDIUM RISK
CVSS Score: 5.3
Score Range: 4.0–6.9
Medium severity vulnerabilities (CVSS 4.0–6.9). Important issues that meaningfully reduce security confidence.
17 hours ago
November 12, 2026 at 11:30 PM UTC
Hono: `validator('form')` skips validation for `multipart/form-data` requests with extra parameters
4.5.1 - 4.13.15
4.5.1 - 4.13.15

Summary

Hono: `validator('form')` skips validation for `multipart/form-data` requests with extra parameters

Details

Summary

validator('form') only recognizes a multipart/form-data Content-Type that carries nothing but a single boundary parameter. A request with another legal parameter, such as charset, or with extra whitespace after the ; is not recognized as a form. The validation callback then receives an empty object, while c.req.parseBody() still parses the body as a form.

Details

The check that decides whether a request body is a form was written as a strict pattern over the whole Content-Type value. Any parameter list that does not look exactly like ; boundary=... fails the check. When it fails, the middleware does not read the body and passes an empty object to the validation callback. If the callback accepts an empty object, the request proceeds to the handler, which can still read all submitted fields through c.req.parseBody() or c.req.formData().

application/x-www-form-urlencoded is not affected. Only the multipart/form-data branch has the strict pattern.

This issue arises when an application relies on validator('form') to reject or restrict fields and the validation callback does not fail on an empty object.

Impact

An unauthenticated client can send form fields that the form validator never sees, by adding a legal parameter to the Content-Type header.

This may lead to:

  • Allow-list or required-field checks in the validator being skipped
  • Fields the application intended to reject reaching the handler

This issue affects applications that use validator('form') with multipart/form-data requests and whose validation callback accepts an empty object.

Workarounds

Reject an empty object in the validator('form') callback, or validate the result of await c.req.parseBody() in the handler.

Impacted packages

Timeline

Published
17 hours ago
November 12, 2026 at 11:30 PM UTC
Fixed (4.13.16)
12 days ago
November 01, 2026 at 03:04 AM UTC
Last Modified
17 hours ago
November 12, 2026 at 11:45 PM UTC