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.
{
"binaries": [
{
"binary_name": "elpa-protobuf-mode",
"binary_version": "3.12.4-1ubuntu7.22.04.6"
},
{
"binary_name": "libprotobuf-java",
"binary_version": "3.12.4-1ubuntu7.22.04.6"
},
{
"binary_name": "libprotobuf-lite23",
"binary_version": "3.12.4-1ubuntu7.22.04.6"
},
{
"binary_name": "libprotobuf23",
"binary_version": "3.12.4-1ubuntu7.22.04.6"
},
{
"binary_name": "libprotoc23",
"binary_version": "3.12.4-1ubuntu7.22.04.6"
},
{
"binary_name": "protobuf-compiler",
"binary_version": "3.12.4-1ubuntu7.22.04.6"
},
{
"binary_name": "python3-protobuf",
"binary_version": "3.12.4-1ubuntu7.22.04.6"
},
{
"binary_name": "ruby-google-protobuf",
"binary_version": "3.12.4-1ubuntu7.22.04.6"
}
]
}{
"binaries": [
{
"binary_name": "elpa-protobuf-mode",
"binary_version": "3.21.12-8.2ubuntu0.3"
},
{
"binary_name": "libprotobuf-java",
"binary_version": "3.21.12-8.2ubuntu0.3"
},
{
"binary_name": "libprotobuf-lite32t64",
"binary_version": "3.21.12-8.2ubuntu0.3"
},
{
"binary_name": "libprotobuf32t64",
"binary_version": "3.21.12-8.2ubuntu0.3"
},
{
"binary_name": "libprotoc32t64",
"binary_version": "3.21.12-8.2ubuntu0.3"
},
{
"binary_name": "php-google-protobuf",
"binary_version": "3.21.12-8.2ubuntu0.3"
},
{
"binary_name": "protobuf-compiler",
"binary_version": "3.21.12-8.2ubuntu0.3"
},
{
"binary_name": "python3-protobuf",
"binary_version": "3.21.12-8.2ubuntu0.3"
},
{
"binary_name": "ruby-google-protobuf",
"binary_version": "3.21.12-8.2ubuntu0.3"
}
]
}{
"binaries": [
{
"binary_name": "elpa-protobuf-mode",
"binary_version": "3.21.12-15ubuntu1"
},
{
"binary_name": "libprotobuf-java",
"binary_version": "3.21.12-15ubuntu1"
},
{
"binary_name": "libprotobuf-lite32t64",
"binary_version": "3.21.12-15ubuntu1"
},
{
"binary_name": "libprotobuf32t64",
"binary_version": "3.21.12-15ubuntu1"
},
{
"binary_name": "libprotoc32t64",
"binary_version": "3.21.12-15ubuntu1"
},
{
"binary_name": "php-google-protobuf",
"binary_version": "3.21.12-15ubuntu1"
},
{
"binary_name": "protobuf-compiler",
"binary_version": "3.21.12-15ubuntu1"
},
{
"binary_name": "python3-protobuf",
"binary_version": "3.21.12-15ubuntu1"
},
{
"binary_name": "ruby-google-protobuf",
"binary_version": "3.21.12-15ubuntu1"
}
]
}{
"binaries": [
{
"binary_name": "libprotobuf-java",
"binary_version": "2.5.0-9ubuntu1+esm1"
},
{
"binary_name": "libprotobuf-lite8",
"binary_version": "2.5.0-9ubuntu1+esm1"
},
{
"binary_name": "libprotobuf8",
"binary_version": "2.5.0-9ubuntu1+esm1"
},
{
"binary_name": "libprotoc8",
"binary_version": "2.5.0-9ubuntu1+esm1"
},
{
"binary_name": "protobuf-compiler",
"binary_version": "2.5.0-9ubuntu1+esm1"
},
{
"binary_name": "python-protobuf",
"binary_version": "2.5.0-9ubuntu1+esm1"
}
]
}{
"binaries": [
{
"binary_name": "libprotobuf-java",
"binary_version": "2.6.1-1.3ubuntu0.1~esm4"
},
{
"binary_name": "libprotobuf-lite9v5",
"binary_version": "2.6.1-1.3ubuntu0.1~esm4"
},
{
"binary_name": "libprotobuf9v5",
"binary_version": "2.6.1-1.3ubuntu0.1~esm4"
},
{
"binary_name": "libprotoc9v5",
"binary_version": "2.6.1-1.3ubuntu0.1~esm4"
},
{
"binary_name": "protobuf-compiler",
"binary_version": "2.6.1-1.3ubuntu0.1~esm4"
},
{
"binary_name": "python-protobuf",
"binary_version": "2.6.1-1.3ubuntu0.1~esm4"
}
]
}{
"binaries": [
{
"binary_name": "libprotobuf-java",
"binary_version": "3.0.0-9.1ubuntu1.1+esm4"
},
{
"binary_name": "libprotobuf-lite10",
"binary_version": "3.0.0-9.1ubuntu1.1+esm4"
},
{
"binary_name": "libprotobuf10",
"binary_version": "3.0.0-9.1ubuntu1.1+esm4"
},
{
"binary_name": "libprotoc10",
"binary_version": "3.0.0-9.1ubuntu1.1+esm4"
},
{
"binary_name": "protobuf-compiler",
"binary_version": "3.0.0-9.1ubuntu1.1+esm4"
},
{
"binary_name": "python-protobuf",
"binary_version": "3.0.0-9.1ubuntu1.1+esm4"
},
{
"binary_name": "python3-protobuf",
"binary_version": "3.0.0-9.1ubuntu1.1+esm4"
}
]
}{
"binaries": [
{
"binary_name": "libprotobuf-java",
"binary_version": "3.6.1.3-2ubuntu5.2+esm3"
},
{
"binary_name": "libprotobuf-lite17",
"binary_version": "3.6.1.3-2ubuntu5.2+esm3"
},
{
"binary_name": "libprotobuf17",
"binary_version": "3.6.1.3-2ubuntu5.2+esm3"
},
{
"binary_name": "libprotoc17",
"binary_version": "3.6.1.3-2ubuntu5.2+esm3"
},
{
"binary_name": "protobuf-compiler",
"binary_version": "3.6.1.3-2ubuntu5.2+esm3"
},
{
"binary_name": "python-protobuf",
"binary_version": "3.6.1.3-2ubuntu5.2+esm3"
},
{
"binary_name": "python3-protobuf",
"binary_version": "3.6.1.3-2ubuntu5.2+esm3"
},
{
"binary_name": "ruby-google-protobuf",
"binary_version": "3.6.1.3-2ubuntu5.2+esm3"
}
]
}