Skip to main content

protobufjs CVE-2026-44288

MEDIUM
Improper Handling of Unicode Encoding (CWE-176)
2026-05-12 https://github.com/protobufjs/protobuf.js GHSA-q6x5-8v7m-xcrf
5.3
CVSS 3.1 · GitHub Advisory
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Recon
    Attacker crafts protobuf message
  2. Delivery
    Encodes string with overlong UTF-8 sequences
  3. Exploit
    Message bypasses byte-level validation filters
  4. Install
    protobufjs minimal decoder canonicalizes overlong bytes
  5. C2
    Decoded string contains characters forbidden in raw bytes
  6. Execute
    Application trusts decoded string in security context
  7. Impact
    Validation bypass achieved

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Unicode normalization
Exploitation Conditions

The vulnerability requires all four of the following conditions to be met for meaningful impact: (1) the application must process protobuf binary data influenced or provided by an attacker, (2) the affected protobuf string field must be decoded through protobufjs's minimal UTF-8 decoder rather than a native UTF-8 decoder (this occurs in non-Node.js environments such as browsers, Cloudflare Workers, or other edge runtimes; Node.js applications typically use native Buffer decoding and are not affected), (3) the application must perform byte-level filtering or validation on the raw protobuf message before decoding (e.g., rejecting messages containing certain byte sequences), and (4) the decoded string must be used in a subsequent security-sensitive operation that depends on the byte-level filtering having been effective. Node.js applications using default Buffer-backed decoding paths are not vulnerable. Browser-based protobufjs deployments and edge-runtime environments that fall back to the minimal decoder are the primary targets.

Impact

CVSS 5.3 (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N) indicates remote unauthenticated exploitation with low complexity, but integrity impact only (no confidentiality or availability loss). However, real-world risk is highly contextual and depends on three converging preconditions: (1) application decodes attacker-controlled protobuf data, (2) decoding uses protobufjs's minimal decoder rather than Node's native path, and (3) the application performs byte-level validation before decoding and then uses the decoded string in a security-sensitive check. This is a validation bypass vulnerability, not a direct remote code execution or denial-of-service vector. The low CVSS reflects the integrity impact alone; practical exploitation requires downstream application logic that falsely assumes byte-level filtering provides security guarantees post-decoding. Applications using Node.js Buffer-backed paths (standard in Node.js environments) are not affected, narrowing the exposed surface to browser-based and edge-runtime protobufjs instances.

Exploit ScenarioDerived

An attacker sends a protobuf message with a string field encoded using overlong UTF-8 sequences. For example, the letter 'A' (ASCII 0x41) could be encoded as the overlong sequence 0xC0 0x81 instead of its valid single-byte form 0x41. An application that filters raw protobuf bytes for forbidden characters (e.g., rejecting messages containing 0x41) would pass the malicious message through. When protobufjs decodes the string using the minimal UTF-8 decoder, it canonicalizes the overlong sequence to 'A', resulting in a string that bypassed the application's byte-level filter. The application then uses this bypassed string in a security decision (e.g., accepting it as a safe username or command), leading to validation bypass.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.0% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – May 12, 2026

protobufjs versions 7.5.5 and earlier, and 8.0.0-8.0.1 accept overlong UTF-8 byte sequences in the minimal UTF-8 decoder used by non-Node and fallback decoding paths, allowing attackers to bypass byte-level filtering and decode strings containing characters that were not present in the raw protobuf binary input. This integrity issue affects applications that rely on pre-decoding byte validation before using protobuf strings in security-sensitive contexts. Patch versions 7.5.6 and 8.0.2 are available; Node.js Buffer-backed paths are not directly affected.

RemediationAI

Upgrade protobufjs to version 7.5.6 (for the 7.x branch) or 8.0.2 (for the 8.x branch); upgrade @protobufjs/utf8 to version 1.1.1 if used as a standalone dependency. These versions fix the overlong UTF-8 decoding issue. For applications unable to immediately patch, implement validation at the point where decoded strings are used rather than relying exclusively on byte-level filtering before decoding. In browser and non-Node.js environments, prefer code paths that delegate UTF-8 decoding to platform-native implementations where possible (e.g., TextDecoder API in browsers). Review and update any byte-level filters that assume protobuf strings have been validated during decoding; move validation logic to occur after decoding for security-sensitive fields. See https://github.com/protobufjs/protobuf.js/security/advisories/GHSA-q6x5-8v7m-xcrf for additional mitigation guidance.

Affected Packages

npm @protobufjs/utf8 fix: 1.1.1
npm protobufjs fix: 7.5.6, 8.0.2

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 2 packages in npm

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

protobufjs is a JavaScript protocol buffer library that includes a minimal UTF-8 decoder for environments where native UTF-8 decoding is unavailable (e.g., browsers, non-Node runtimes). UTF-8 encoding standards require that code points be represented in their shortest form; overlong encodings use more bytes than necessary and are invalid per RFC 3629. The vulnerable decoder failed to reject these overlong sequences, instead canonicalizing them to their corresponding characters. This violates the UTF-8 specification (CWE-176: Improper Handling of Unusual Unicode Characters and Normalization) and creates a semantic gap: bytes inspected by application-level filters do not match the bytes used for UTF-8 decoding, enabling bypass attacks. The @protobufjs/utf8 package contains the shared UTF-8 implementation affected across both major versions.

Know when Node.js gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

GitHub Advisory PRIMARY 5.3 MEDIUM
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N
Red Hat 5.3 MEDIUM

Primary rating from GitHub Advisory.

CVSS VectorGitHub Advisory

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
Low
Availability
None

DescriptionGitHub Advisory

Summary

protobufjs includes a minimal UTF-8 decoder used in non-Node and fallback decoding paths. The affected decoder accepted overlong UTF-8 byte sequences and decoded them to their canonical characters instead of replacing them.

The issue concerns overlong encodings and code points outside the Unicode range. protobufjs may still accept some non-strict UTF-8 input for compatibility, so applications should not rely on protobufjs as a general-purpose strict UTF-8 validator.

Impact

An attacker who can provide protobuf binary data decoded through the affected UTF-8 path may be able to bypass application-level checks that inspect raw bytes before protobuf string decoding. For example, bytes that do not contain certain ASCII characters could decode to strings containing those characters.

The practical impact depends on downstream application validation and how decoded strings are used. Node.js Buffer-backed decoding paths are not directly affected when they use Node's native UTF-8 decoding.

Preconditions

  • The application must decode protobuf binary data influenced by an attacker.
  • The affected protobuf string field must be decoded through protobufjs's minimal UTF-8 decoder rather than a native UTF-8 decoder.
  • The application must rely on byte-level filtering or validation before protobuf string decoding.
  • The decoded string must then be used in a security-sensitive context.

Workarounds

Avoid relying only on byte-level filtering before protobuf string decoding with affected versions. Validate decoded strings at the point where they are used, and prefer runtime paths that use native UTF-8 decoding where necessary.

Blast Radius

ecosystem impact
† from your stack dependencies † transitive graph · vuln.today resolves 4-path depth
  • 8 npm packages depend on @protobufjs/utf8 (6 direct, 2 indirect)
  • 1,651 npm packages depend on protobufjs (129 direct, 1,523 indirect)

Ecosystem-wide dependent count for version 1.1.1 and other introduced versions.

Threat Intelligence Overview

EPSS Score
0.0%
Top 92% exploitable
Threat Intel
1
1 source
Data Quality
5 sources
Confidence: Medium
NVD CVE.org EPSS Vulnrichment GHSA Vendor GitHub VulDB

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.0%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
Yes
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

26
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +26
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

Affected Products (CPE)GitHub Advisory

pkg:npm/protobufjs
pkg:npm/protobufjs
pkg:npm/@protobufjs_utf8
CVE-2025-68613 HIGH POC
8.8 Dec 19

Remote code execution in n8n's workflow expression evaluation system allows an authenticated user with workflow creation

CVE-2024-41713 CRITICAL POC
9.1 Oct 21

A vulnerability in the NuPoint Unified Messaging (NPM) component of Mitel MiCollab through 9.8 SP1 FP2 (9.8.1.201) could

CVE-2024-55591 CRITICAL POC
9.8 Jan 14

FortiOS and FortiProxy contain an authentication bypass via the Node.js websocket module allowing unauthenticated remote

CVE-2023-44487 HIGH POC
7.5 Oct 10

Denial of service against HTTP/2 server implementations allows remote unauthenticated attackers to exhaust server resour

CVE-2014-7205 CRITICAL POC
10.0 Oct 08

Eval injection vulnerability in the internals.batch function in lib/batch.js in the bassmaster plugin before 1.5.2 for t

CVE-2025-59528 CRITICAL POC
10.0 Sep 22

Flowise version 3.0.5 contains a remote code execution vulnerability in the CustomMCP node. The mcpServerConfig paramete

CVE-2017-14849 HIGH POC
7.5 Sep 28

Node.js 8.5.0 before 8.6.0 allows remote attackers to access unintended files, because a change to ".." handling was inc

CVE-2017-5941 CRITICAL POC
9.8 Feb 09

An issue was discovered in the node-serialize package 0.0.4 for Node.js. Rated critical severity (CVSS 9.8), this vulner

CVE-2014-0224 HIGH POC
7.4 Jun 05

OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph

CVE-2014-3744 HIGH POC
7.5 Oct 23

Directory traversal vulnerability in the st module before 0.2.5 for Node.js allows remote attackers to read arbitrary fi

CVE-2014-9566 HIGH POC
7.5 Mar 10

Multiple SQL injection vulnerabilities in the Manage Accounts page in the AccountManagement.asmx service in the Solarwin

CVE-2013-4660 MEDIUM POC
6.8 Jun 28

The JS-YAML module before 2.0.5 for Node.js parses input without properly considering the unsafe !!js/function tag, whic

Vendor StatusVendor

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy