CVE-2022-3510
High · 7.5CVSS
7.5
EPSS
0.7%
Published
Dec 12, 2022
CISA due date
—
Cloudanix analysis
A problem processing certain data files can make software using a common library freeze for long periods while cleaning up memory, causing outages.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- Low
- Impact
- Denial Of Service
- Component
- Library
- Class
- Denial of service
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
Specially crafted protobuf inputs with multiple non-repeated embedded messages containing repeated or unknown fields trigger repeated mutable-to-immutable conversions in protobuf-java core and lite, causing extended garbage collection pauses and denial of service.
Why it matters to the business
Applications handling untrusted protobuf data may experience prolonged unresponsiveness or outages, increasing operational costs and disrupting dependent services across ecosystems with high protobuf usage.
How an attack unfolds
An attacker sends a network or file input containing repeated instances of non-repeated embedded messages with repeated or unknown fields to a vulnerable protobuf-java parser; the library repeatedly converts objects between mutable and immutable forms, exhausting CPU time in garbage collection and denying service to legitimate users.
How to fix it
Upgrade protocolbuffers/protobuf (GIT) to the fixed commit db7c17803320525722f45c1d26fc08bc41d1bf48 or adopt protobuf-java versions 3.21.7, 3.20.3, 3.19.6 or 3.16.3 or later. Validate all downstream dependencies and rebuild affected applications.
How to confirm the fix worked
Confirm the protobuf-java version in use matches a fixed release, then replay known trigger inputs in a test environment to verify absence of long GC pauses and service availability under load.
Typical attack path
- Identify a service accepting protobuf messages over the network or via files
- Craft a message with multiple non-repeated embedded messages that include repeated or unknown fields
- Transmit the malicious protobuf payload to the target parser
- Observe resource exhaustion from repeated mutable/immutable conversions and extended GC pauses
How to detect it
Review application and garbage collection logs for unusually long pause durations coinciding with protobuf parsing activity; correlate with inbound message volume spikes from untrusted sources.
What your security team should do
- Immediately inventory all applications using protobuf-java and schedule upgrades to fixed versions
- Apply network-level input validation or size limits on protobuf messages as a temporary control
- Monitor application logs and GC metrics for sudden spikes after any exposure window
The record
A parsing issue similar to CVE-2022-3171, but with Message-Type Extensions in protobuf-java core and lite versions prior to 3.21.7, 3.20.3, 3.19.6 and 3.16.3 can lead to a denial of service attack. Inputs containing multiple instances of non-repeated embedded messages with repeated or unknown fields causes objects to be converted back-n-forth between mutable and immutable forms, resulting in potentially long garbage collection pauses. We recommend updating to the versions mentioned above.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| Maven | com.google.protobuf:protobuf-java | 0 | 3.16.3 |
| Maven | com.google.protobuf:protobuf-java | 3.0.0 | 3.16.3 |
| Maven | com.google.protobuf:protobuf-java | 3.17.0 | 3.19.6 |
| Maven | com.google.protobuf:protobuf-java | 3.20.0 | 3.20.3 |
| Maven | com.google.protobuf:protobuf-java | 3.21.0 | 3.21.7 |
| Maven | com.google.protobuf:protobuf-javalite | 0 | 3.16.3 |
| Maven | com.google.protobuf:protobuf-javalite | 3.0.0 | 3.16.3 |
| Maven | com.google.protobuf:protobuf-javalite | 3.17.0 | 3.19.6 |
| Maven | com.google.protobuf:protobuf-javalite | 3.20.0 | 3.20.3 |
| Maven | com.google.protobuf:protobuf-javalite | 3.21.0 | 3.21.7 |
| Chainguard | apache-nifi | 0 | 1.26.0-r2 |
| Chainguard | apache-nifi | 0 | 2.6.0-r2 |
| Chainguard | apache-nifi-compat | 0 | 2.6.0-r2 |
| Chainguard | apache-nifi-toolkit | 0 | 2.6.0-r2 |
| Chainguard | dotty | 0 | 3.4.0-r0 |
| Chainguard | druid-compat | 0 | 34.0.0-r6 |
| Chainguard | emsdk | 0 | 5.0.0-r1 |
| Chainguard | hadoop-client-modules | 0 | 3.3.6-r8 |
| Chainguard | spark-3.5 | 0 | 3.5.7-r2 |
| Chainguard | spark-3.5-scala-2.12-compat | 0 | 3.5.7-r2 |
| Chainguard | spark-3.5-scala-2.12-iamguarded-compat | 0 | 3.5.7-r2 |
| Chainguard | spark-3.5-scala-2.13-compat | 0 | 3.5.7-r2 |
| Chainguard | spark-3.5.0-compat | 0 | 0 |
| Chainguard | spark-fips-3.5 | 0 | 3.5.4-r17 |
| Chainguard | spark-fips-3.5-scala-2.12-compat | 0 | 3.5.4-r17 |
| Chainguard | spark-fips-3.5-scala-2.13-compat | 0 | 3.5.4-r17 |
| Chainguard | trino | 0 | 439-r0 |
| Chainguard | trino-config | 0 | 439-r0 |
| Chainguard | trino-oci-entrypoint | 0 | 439-r0 |
| Chainguard | trino-plugin-accumulo | 0 | 439-r0 |
| Chainguard | trino-plugin-ai-functions | 0 | 439-r0 |
| Chainguard | trino-plugin-atop | 0 | 439-r0 |
| Chainguard | trino-plugin-bigquery | 0 | 439-r0 |
| Chainguard | trino-plugin-blackhole | 0 | 439-r0 |
| Chainguard | trino-plugin-cassandra | 0 | 439-r0 |
| Chainguard | trino-plugin-clickhouse | 0 | 439-r0 |
| Chainguard | trino-plugin-delta-lake | 0 | 439-r0 |
| Chainguard | trino-plugin-druid | 0 | 439-r0 |
| Chainguard | trino-plugin-duckdb | 0 | 439-r0 |
| Chainguard | trino-plugin-elasticsearch | 0 | 439-r0 |
| Chainguard | trino-plugin-example-http | 0 | 439-r0 |
| Chainguard | trino-plugin-exasol | 0 | 439-r0 |
| Chainguard | trino-plugin-exchange-filesystem | 0 | 439-r0 |
| Chainguard | trino-plugin-exchange-hdfs | 0 | 439-r0 |
| Chainguard | trino-plugin-faker | 0 | 439-r0 |
| Chainguard | trino-plugin-functions-python | 0 | 439-r0 |
| Chainguard | trino-plugin-geospatial | 0 | 439-r0 |
| Chainguard | trino-plugin-google-sheets | 0 | 439-r0 |
| Chainguard | trino-plugin-hive | 0 | 439-r0 |
| Chainguard | trino-plugin-http-event-listener | 0 | 439-r0 |
| Chainguard | trino-plugin-http-server-event-listener | 0 | 439-r0 |
| Chainguard | trino-plugin-hudi | 0 | 439-r0 |
| Chainguard | trino-plugin-iceberg | 0 | 439-r0 |
| Chainguard | trino-plugin-ignite | 0 | 439-r0 |
| Chainguard | trino-plugin-jmx | 0 | 439-r0 |
| Chainguard | trino-plugin-kafka | 0 | 439-r0 |
| Chainguard | trino-plugin-kafka-event-listener | 0 | 439-r0 |
| Chainguard | trino-plugin-kinesis | 0 | 439-r0 |
| Chainguard | trino-plugin-kudu | 0 | 439-r0 |
| Chainguard | trino-plugin-lakehouse | 0 | 439-r0 |
| Chainguard | trino-plugin-ldap-group-provider | 0 | 439-r0 |
| Chainguard | trino-plugin-local-file | 0 | 439-r0 |
| Chainguard | trino-plugin-loki | 0 | 439-r0 |
| Chainguard | trino-plugin-mariadb | 0 | 439-r0 |
| Chainguard | trino-plugin-memory | 0 | 439-r0 |
| Chainguard | trino-plugin-ml | 0 | 439-r0 |
| Chainguard | trino-plugin-mongodb | 0 | 439-r0 |
| Chainguard | trino-plugin-mysql | 0 | 439-r0 |
| Chainguard | trino-plugin-mysql-event-listener | 0 | 439-r0 |
| Chainguard | trino-plugin-opa | 0 | 439-r0 |
| Chainguard | trino-plugin-openlineage | 0 | 439-r0 |
| Chainguard | trino-plugin-opensearch | 0 | 439-r0 |
| Chainguard | trino-plugin-oracle | 0 | 439-r0 |
| Chainguard | trino-plugin-password-authenticators | 0 | 439-r0 |
| Chainguard | trino-plugin-phoenix5 | 0 | 439-r0 |
| Chainguard | trino-plugin-pinot | 0 | 439-r0 |
| Chainguard | trino-plugin-postgresql | 0 | 439-r0 |
| Chainguard | trino-plugin-prometheus | 0 | 439-r0 |
| Chainguard | trino-plugin-ranger | 0 | 439-r0 |
| Chainguard | trino-plugin-raptor-legacy | 0 | 439-r0 |
| Chainguard | trino-plugin-redis | 0 | 439-r0 |
| Chainguard | trino-plugin-redshift | 0 | 439-r0 |
| Chainguard | trino-plugin-resource-group-managers | 0 | 439-r0 |
| Chainguard | trino-plugin-session-property-managers | 0 | 439-r0 |
| Chainguard | trino-plugin-singlestore | 0 | 439-r0 |
| Chainguard | trino-plugin-snowflake | 0 | 439-r0 |
| Chainguard | trino-plugin-spooling-filesystem | 0 | 439-r0 |
| Chainguard | trino-plugin-sqlserver | 0 | 439-r0 |
| Chainguard | trino-plugin-teradata-functions | 0 | 439-r0 |
| Chainguard | trino-plugin-thrift | 0 | 439-r0 |
| Chainguard | trino-plugin-tpcds | 0 | 439-r0 |
| Chainguard | trino-plugin-tpch | 0 | 439-r0 |
| Chainguard | trino-plugin-vertica | 0 | 439-r0 |
| Debian:11 | protobuf | 0 | No fix |
| Debian:12 | protobuf | 0 | 3.21.9-3 |
| Debian:13 | protobuf | 0 | 3.21.9-3 |
| Ubuntu:20.04:LTS | protobuf | 0 | No fix |
| Ubuntu:22.04:LTS | protobuf | 0 | No fix |
| Ubuntu:Pro:14.04:LTS | protobuf | 0 | No fix |
| Ubuntu:Pro:16.04:LTS | protobuf | 0 | No fix |
| Ubuntu:Pro:18.04:LTS | protobuf | 0 | No fix |
| Ubuntu:Pro:20.04:LTS | protobuf | 0 | No fix |
| Wolfi | apache-nifi | 0 | 2.6.0-r2 |
| Wolfi | apache-nifi-compat | 0 | 2.6.0-r2 |
| Wolfi | apache-nifi-toolkit | 0 | 2.6.0-r2 |
| Wolfi | dotty | 0 | 3.4.0-r0 |
| Wolfi | druid-compat | 0 | 34.0.0-r6 |
| Wolfi | spark-3.5 | 0 | 3.5.7-r2 |
| Wolfi | spark-3.5-scala-2.12-compat | 0 | 3.5.7-r2 |
| Wolfi | spark-3.5-scala-2.12-iamguarded-compat | 0 | 3.5.7-r2 |
| Wolfi | spark-3.5-scala-2.13-compat | 0 | 3.5.7-r2 |
| Wolfi | trino | 0 | 439-r0 |
| Wolfi | trino-config | 0 | 439-r0 |
| Wolfi | trino-oci-entrypoint | 0 | 439-r0 |
| Wolfi | trino-plugin-accumulo | 0 | 439-r0 |
| Wolfi | trino-plugin-ai-functions | 0 | 439-r0 |
| Wolfi | trino-plugin-atop | 0 | 439-r0 |
| Wolfi | trino-plugin-bigquery | 0 | 439-r0 |
| Wolfi | trino-plugin-blackhole | 0 | 439-r0 |
| Wolfi | trino-plugin-cassandra | 0 | 439-r0 |
| Wolfi | trino-plugin-clickhouse | 0 | 439-r0 |
| Wolfi | trino-plugin-delta-lake | 0 | 439-r0 |
| Wolfi | trino-plugin-druid | 0 | 439-r0 |
| Wolfi | trino-plugin-duckdb | 0 | 439-r0 |
| Wolfi | trino-plugin-elasticsearch | 0 | 439-r0 |
| Wolfi | trino-plugin-example-http | 0 | 439-r0 |
| Wolfi | trino-plugin-exasol | 0 | 439-r0 |
| Wolfi | trino-plugin-exchange-filesystem | 0 | 439-r0 |
| Wolfi | trino-plugin-exchange-hdfs | 0 | 439-r0 |
| Wolfi | trino-plugin-faker | 0 | 439-r0 |
| Wolfi | trino-plugin-functions-python | 0 | 439-r0 |
| Wolfi | trino-plugin-geospatial | 0 | 439-r0 |
| Wolfi | trino-plugin-google-sheets | 0 | 439-r0 |
| Wolfi | trino-plugin-hive | 0 | 439-r0 |
| Wolfi | trino-plugin-http-event-listener | 0 | 439-r0 |
| Wolfi | trino-plugin-http-server-event-listener | 0 | 439-r0 |
| Wolfi | trino-plugin-hudi | 0 | 439-r0 |
| Wolfi | trino-plugin-iceberg | 0 | 439-r0 |
| Wolfi | trino-plugin-ignite | 0 | 439-r0 |
| Wolfi | trino-plugin-jmx | 0 | 439-r0 |
| Wolfi | trino-plugin-kafka | 0 | 439-r0 |
| Wolfi | trino-plugin-kafka-event-listener | 0 | 439-r0 |
| Wolfi | trino-plugin-kinesis | 0 | 439-r0 |
| Wolfi | trino-plugin-kudu | 0 | 439-r0 |
| Wolfi | trino-plugin-lakehouse | 0 | 439-r0 |
| Wolfi | trino-plugin-ldap-group-provider | 0 | 439-r0 |
| Wolfi | trino-plugin-local-file | 0 | 439-r0 |
| Wolfi | trino-plugin-loki | 0 | 439-r0 |
| Wolfi | trino-plugin-mariadb | 0 | 439-r0 |
| Wolfi | trino-plugin-memory | 0 | 439-r0 |
| Wolfi | trino-plugin-ml | 0 | 439-r0 |
| Wolfi | trino-plugin-mongodb | 0 | 439-r0 |
| Wolfi | trino-plugin-mysql | 0 | 439-r0 |
| Wolfi | trino-plugin-mysql-event-listener | 0 | 439-r0 |
| Wolfi | trino-plugin-opa | 0 | 439-r0 |
| Wolfi | trino-plugin-openlineage | 0 | 439-r0 |
| Wolfi | trino-plugin-opensearch | 0 | 439-r0 |
| Wolfi | trino-plugin-oracle | 0 | 439-r0 |
| Wolfi | trino-plugin-password-authenticators | 0 | 439-r0 |
| Wolfi | trino-plugin-phoenix5 | 0 | 439-r0 |
| Wolfi | trino-plugin-pinot | 0 | 439-r0 |
| Wolfi | trino-plugin-postgresql | 0 | 439-r0 |
| Wolfi | trino-plugin-prometheus | 0 | 439-r0 |
| Wolfi | trino-plugin-ranger | 0 | 439-r0 |
| Wolfi | trino-plugin-raptor-legacy | 0 | 439-r0 |
| Wolfi | trino-plugin-redis | 0 | 439-r0 |
| Wolfi | trino-plugin-redshift | 0 | 439-r0 |
| Wolfi | trino-plugin-resource-group-managers | 0 | 439-r0 |
| Wolfi | trino-plugin-session-property-managers | 0 | 439-r0 |
| Wolfi | trino-plugin-singlestore | 0 | 439-r0 |
| Wolfi | trino-plugin-snowflake | 0 | 439-r0 |
| Wolfi | trino-plugin-spooling-filesystem | 0 | 439-r0 |
| Wolfi | trino-plugin-sqlserver | 0 | 439-r0 |
| Wolfi | trino-plugin-teradata-functions | 0 | 439-r0 |
| Wolfi | trino-plugin-thrift | 0 | 439-r0 |
| Wolfi | trino-plugin-tpcds | 0 | 439-r0 |
| Wolfi | trino-plugin-tpch | 0 | 439-r0 |
| Wolfi | trino-plugin-vertica | 0 | 439-r0 |
| maven | com.google.protobuf/protobuf-java | 3.0.0 | 3.16.3 |
| maven | com.google.protobuf/protobuf-java | 3.16.0 | 3.16.3 |
| maven | com.google.protobuf/protobuf-java | 3.17.0 | 3.19.6 |
| maven | com.google.protobuf/protobuf-java | 3.19.0 | 3.19.6 |
| maven | com.google.protobuf/protobuf-java | 3.20.0 | 3.20.3 |
| maven | com.google.protobuf/protobuf-java | 3.21.0 | 3.21.7 |
| maven | com.google.protobuf/protobuf-javalite | 3.0.0 | 3.16.3 |
| maven | com.google.protobuf/protobuf-javalite | 3.17.0 | 3.19.6 |
| maven | com.google.protobuf/protobuf-javalite | 3.20.0 | 3.20.3 |
| maven | com.google.protobuf/protobuf-javalite | 3.21.0 | 3.21.7 |
Related vulnerabilities
- CVE-2024-7254 protobuf-java has potential Denial of Service issue Also affects com.google.protobuf:protobuf-java
- CVE-2022-3509 A parsing issue similar to CVE-2022-3171, but with textformat in protobuf-java core and… Also affects com.google.protobuf:protobuf-java
- CVE-2022-3171 A parsing issue with binary data in protobuf-java core and lite versions prior to 3.21.7… Also affects com.google.protobuf:protobuf-java
- CVE-2021-22570 Nullptr dereference when a null char is present in a proto symbol. Also affects com.google.protobuf:protobuf-java
- CVE-2021-22569 An issue in protobuf-java allowed the interleaving of com.google.protobuf.UnknownFieldSet… Also affects com.google.protobuf:protobuf-java
- CVE-2026-22732 When applications specify HTTP response headers for servlet applications using Spring… Also affects apache-nifi
- CVE-2026-24281 Hostname verification in Apache ZooKeeper ZKTrustManager falls back to reverse DNS (PTR)… Also affects apache-nifi
- CVE-2026-24308 Improper handling of configuration values in ZKConfig in Apache ZooKeeper 3.8.5 and 3.9.4… Also affects apache-nifi