<Vulnerability name="CVE-2026-104635">
    <DocumentDistribution xml:lang="en">Copyright © 2012 Red Hat, Inc. All rights reserved.</DocumentDistribution>
    <ThreatSeverity>Moderate</ThreatSeverity>
    <PublicDate>2026-10-09T08:17:52</PublicDate>
    <Bugzilla id="2548406" url="https://bugzilla.redhat.com/show_bug.cgi?id=2548406" xml:lang="en:us">
protobuf: protobuf: Denial of Service via deeply nested JSON input
    </Bugzilla>
    <CVSS3 status="draft">
        <CVSS3BaseScore>5.9</CVSS3BaseScore>
        <CVSS3ScoringVector>CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H</CVSS3ScoringVector>
    </CVSS3>
    <CWE>CWE-770</CWE>
    <Details xml:lang="en:us" source="Mitre">
Uncontrolled Recursion vulnerability in Protobuf.JSON.Decode in elixir-protobuf protobuf allows an unauthenticated remote attacker to crash the decoding process via a deeply nested JSON document. Any application that decodes attacker-supplied JSON with Protobuf.JSON.decode/3, Protobuf.JSON.decode!/3, or Protobuf.JSON.from_decoded/3 into a schema that contains a self-referential or cyclic message type is affected.

In lib/protobuf/json/decode.ex, the embedded-message clause of decode_singular/3 recurses into internal_from_json_data/3 once per nesting level without incrementing or checking the decoder's depth counter. The depth guard increase_depth_and_maybe_throw/1 covers only the Google.Protobuf.ListValue and Google.Protobuf.Struct clauses, so the recursion_limit option has no effect on user-defined message types. Each nesting level allocates a stack frame and heap objects, and a sufficiently deep document exhausts the memory of the decoding process. Confidentiality and integrity are not affected.

This issue affects protobuf: from 0.8.0 before 0.17.1.
    </Details>
    <Details xml:lang="en:us" source="Red Hat">
A flaw was found in protobuf. An unauthenticated remote attacker can trigger a Denial of Service (DoS) by submitting a deeply nested JSON document to an application configured to decode self-referential message types. Because the decoder fails to enforce recursion limits on these structures, processing the input exhausts system memory and crashes the application.
    </Details>
    <Statement xml:lang="en:us">
A moderate-impact denial of service flaw was found in the JSON decoder of the Elixir protobuf library (elixir-protobuf protobuf, Protobuf.JSON.Decode). An unauthenticated remote attacker can submit a deeply nested JSON document to an application that decodes attacker-supplied JSON into a protobuf schema containing self-referential or cyclic message types. The decoder's depth guard covers only the Google.Protobuf.ListValue and Google.Protobuf.Struct well-known types, so the recursion_limit option does not apply to user-defined message types; decoding recurses once per nesting level and each level allocates a stack frame and heap objects until process memory is exhausted and the decoding process crashes. Confidentiality and integrity are not affected. Red Hat product streams matched to this flaw are currently recorded as affected. Because the Red Hat impact is moderate with a CVSS3 score of 5.9 (AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H), below the threshold at which Red Hat files trackers for moderate severity, fixes for in-support Red Hat product streams are deferred; the residual risk is a crash of applications that decode untrusted JSON into self-referential protobuf message types. Community streams such as Fedora and EPEL are delegated, with a fix pursued through those streams, and streams outside full support scope are marked out of support scope. Red Hat's moderate rating differs from the upstream/CVEorg assessment of important (CVSS 4.0 score 8.2) mainly because Red Hat scores exploitation as high attack complexity: successful exploitation requires the target application to use a schema with self-referential or cyclic message types, whereas the CVSS 4.0 vector records this only as an attack prerequisite.
    </Statement>
    <Mitigation xml:lang="en:us">
The Protobuf.JSON recursion_limit option does not currently limit recursion for user-defined message types, so no decoder configuration prevents this issue. As an interim mitigation, operators of applications that decode untrusted JSON with Protobuf.JSON.decode/3, Protobuf.JSON.decode!/3, or Protobuf.JSON.from_decoded/3 into self-referential or cyclic message types can bound the accepted request body size and reject or pre-validate the maximum JSON nesting depth at the web server or middleware layer before the document reaches the protobuf decoder. The upstream advisory GHSA-m497-c2h9-rvw6 lists elixir-protobuf protobuf 0.17.1 as the patched release for the affected range (&gt;= 0.8.0, &lt;= 0.17.0); upgrading applications to a version containing the upstream fix resolves the issue.
    </Mitigation>
    <PackageState cpe="cpe:/a:redhat:service_mesh:3">
        <ProductName>OpenShift Service Mesh 3</ProductName>
        <FixState>Fix deferred</FixState>
        <PackageName>istio-proxy</PackageName>
    </PackageState>
    <PackageState cpe="cpe:/a:redhat:amq_clients:2023">
        <ProductName>Red Hat AMQ Clients</ProductName>
        <FixState>Fix deferred</FixState>
        <PackageName>protobuf</PackageName>
    </PackageState>
    <PackageState cpe="cpe:/a:redhat:ansible_automation_platform:2">
        <ProductName>Red Hat Ansible Automation Platform 2</ProductName>
        <FixState>Out of support scope</FixState>
        <PackageName>python-protobuf</PackageName>
    </PackageState>
    <PackageState cpe="cpe:/a:redhat:ceph_storage:9">
        <ProductName>Red Hat Ceph Storage 9</ProductName>
        <FixState>Fix deferred</FixState>
        <PackageName>protobuf</PackageName>
    </PackageState>
    <PackageState cpe="cpe:/a:redhat:enterprise_linux:10">
        <ProductName>Red Hat Enterprise Linux 10</ProductName>
        <FixState>Fix deferred</FixState>
        <PackageName>protobuf</PackageName>
    </PackageState>
    <PackageState cpe="cpe:/o:redhat:rhel_els:7">
        <ProductName>Red Hat Enterprise Linux 7</ProductName>
        <FixState>Fix deferred</FixState>
        <PackageName>protobuf</PackageName>
    </PackageState>
    <PackageState cpe="cpe:/a:redhat:enterprise_linux:8">
        <ProductName>Red Hat Enterprise Linux 8</ProductName>
        <FixState>Fix deferred</FixState>
        <PackageName>protobuf</PackageName>
    </PackageState>
    <PackageState cpe="cpe:/a:redhat:enterprise_linux:9">
        <ProductName>Red Hat Enterprise Linux 9</ProductName>
        <FixState>Fix deferred</FixState>
        <PackageName>protobuf</PackageName>
    </PackageState>
    <PackageState cpe="cpe:/a:redhat:hummingbird:1">
        <ProductName>Red Hat Hardened Images</ProductName>
        <FixState>Not affected</FixState>
        <PackageName>protobuf</PackageName>
    </PackageState>
    <PackageState cpe="cpe:/a:redhat:openshift:4">
        <ProductName>Red Hat OpenShift Container Platform 4</ProductName>
        <FixState>Fix deferred</FixState>
        <PackageName>openshift/ose-rhel-coreos-8</PackageName>
    </PackageState>
    <PackageState cpe="cpe:/a:redhat:openshift:4">
        <ProductName>Red Hat OpenShift Container Platform 4</ProductName>
        <FixState>Fix deferred</FixState>
        <PackageName>openshift/ose-rhel-coreos-9</PackageName>
    </PackageState>
    <PackageState cpe="cpe:/a:redhat:openshift:5">
        <ProductName>Red Hat OpenShift Container Platform 5</ProductName>
        <FixState>Fix deferred</FixState>
        <PackageName>openshift/ose-rhel-coreos-9</PackageName>
    </PackageState>
    <PackageState cpe="cpe:/a:redhat:openstack:16.2">
        <ProductName>Red Hat OpenStack Platform 16.2</ProductName>
        <FixState>Out of support scope</FixState>
        <PackageName>protobuf</PackageName>
    </PackageState>
    <PackageState cpe="cpe:/a:redhat:satellite:6">
        <ProductName>Red Hat Satellite 6</ProductName>
        <FixState>Fix deferred</FixState>
        <PackageName>python-protobuf</PackageName>
    </PackageState>
    <PackageState cpe="cpe:/a:redhat:satellite:6">
        <ProductName>Red Hat Satellite 6</ProductName>
        <FixState>Fix deferred</FixState>
        <PackageName>satellite:el8/python-protobuf</PackageName>
    </PackageState>
    <PackageState cpe="cpe:/a:redhat:rhui:4::el8">
        <ProductName>Red Hat Update Infrastructure 4 for Cloud Providers</ProductName>
        <FixState>Out of support scope</FixState>
        <PackageName>python-protobuf</PackageName>
    </PackageState>
    <References xml:lang="en:us">
https://www.cve.org/CVERecord?id=CVE-2026-104635
https://nvd.nist.gov/vuln/detail/CVE-2026-104635
https://cna.erlef.org/cves/CVE-2026-104635.html
https://github.com/elixir-protobuf/protobuf/commit/b0a1d4eaffaf50012fa71a8e931a47cf252d0370
https://github.com/elixir-protobuf/protobuf/security/advisories/GHSA-m497-c2h9-rvw6
https://osv.dev/vulnerability/EEF-CVE-2026-104635
    </References>
</Vulnerability>