Cloudanix VulnDB

CVE-2023-2976

Medium · 5.5

CVSS

5.5

EPSS

0.2%

Published

Jun 14, 2023

CISA due date

—

Cloudanix analysis

Next patch cycle SSVC: Track

Some Java applications may temporarily place sensitive data where another person or app on the same machine can read it.

Exploitation
Local Privilege
Attacker needs
Local User
Complexity
Low
Impact
Data Exposure
Component
Library
Class
Information Disclosure
Remediation
Upgrade
Effort
Medium
Patch risk
Medium

What it actually does

In affected Google Guava versions 1.0 through 31.1, FileBackedOutputStream creates spill-to-disk temporary files in Java's default temporary directory, commonly /tmp on Unix-like systems. On shared Unix systems or affected Android versions, other local users or apps with access to that directory may be able to discover and read those temporary files while they exist, exposing any data the application buffered through FileBackedOutputStream. The flaw is a local information disclosure issue: it does not directly provide remote code execution, privilege escalation, or data modification, but it can expose highly sensitive contents depending on what the application writes to the stream.

Why it matters to the business

Applications that use vulnerable Guava versions may unintentionally expose sensitive data such as uploaded files, API responses, documents, tokens, customer records, or intermediate processing data to other local users or applications on the same machine. The operational risk is highest on multi-tenant servers, shared build systems, developer workstations, batch-processing hosts, and Android environments where untrusted local apps or users may coexist. EPSS is low and the issue is not in CISA KEV, so broad internet-scale exploitation is unlikely; however, Guava is a common transitive dependency, making inventory and dependency remediation important across Java estates.

How an attack unfolds

An attacker first needs local access to the same Unix-like host or affected Android environment as an application using Guava FileBackedOutputStream. The attacker identifies that the target process uses Guava 1.0 through 31.1 and writes data large enough, or in a configured way, to spill from memory to disk. The attacker monitors the Java default temporary directory, typically /tmp, for files with the FileBackedOutputStream temporary-file naming pattern. When the application creates one of these files, the attacker attempts to read or copy it before it is deleted. Successful exploitation yields the contents written by the vulnerable application to the temporary file. The provided threat-actor labels appear to reference unrelated vulnerabilities rather than confirmed actors for this issue; there is no strong public evidence of widespread exploitation or ransomware use.

How to fix it

Upgrade Google Guava to a fixed release. The vulnerability is fixed in Guava 32.0.0, but Guava 32.0.1 or later is recommended because 32.0.0 introduced Windows functionality regressions. For source-based tracking, google/guava is fixed at commit 6b1f97ced922d48f071153ad9e631d06383033a4. Review direct and transitive dependencies in Maven, Gradle, Bazel, SBT, and vendored Java artifacts to ensure no runtime path still resolves to Guava 31.1 or earlier. If immediate upgrade is not possible, reduce exposure by running affected workloads on single-tenant hosts, restricting local shell or app co-tenancy, setting Java's temporary directory to a private directory with mode 0700, hardening /tmp mount options where appropriate, and avoiding use of FileBackedOutputStream for sensitive data until patched. Where the affected package inventory also includes Ubuntu kernel packages, apply the listed vendor-fixed kernel packages for the relevant releases, including Ubuntu 14.04 linux 3.13.0-65.105, linux-aws 4.4.0-1002.2, linux-lts-xenial 4.4.0-13.29~14.04.1, and Ubuntu 16.04 linux 4.2.0-16.19 or the corresponding listed flavor-specific fixed versions.

How to confirm the fix worked

Confirm that applications resolve Guava 32.0.1 or later at runtime, not merely at build time. Use dependency tooling such as mvn dependency:tree, gradle dependencies, sbt dependencyTree, Bazel query, software composition analysis, and jar inspection to locate guava-*.jar files. Inspect packaged applications, fat JARs, container images, application servers, and plugin directories for guava versions 31.1 or older. Validate that Java processes do not create FileBackedOutputStream temporary files in shared directories by running functional tests under file-system monitoring and confirming that any temporary spill files are created only in private directories with owner-only permissions. On Linux, verify private temp-directory permissions with stat and confirm relevant packages are updated with the operating system package manager where vendor packages are in scope.

Typical attack path

  1. Obtain local user, container, shell, or app-level access on the same Unix-like or affected Android system as the vulnerable Java application.
  2. Determine or infer that the application uses a vulnerable Guava version and the FileBackedOutputStream class.
  3. Monitor the Java default temporary directory, commonly /tmp, for temporary files whose names begin with FileBackedOutputStream.
  4. Read, copy, or continuously tail accessible temporary files while the application is processing data.
  5. Extract sensitive contents from the captured temporary files before the application deletes them.

How to detect it

Historical exploitation is difficult to prove unless file access auditing was already enabled, because the temporary files may be deleted quickly and ordinary application logs usually do not record local reads. Review Linux auditd, eBPF/Falco telemetry, EDR file-event logs, shell history, process accounting, and filesystem monitoring for reads or copies of FileBackedOutputStream temporary files by users or processes other than the Java application owner. Search for suspicious commands such as cat, cp, tail, less, grep, strings, tar, or exfiltration tools accessing /tmp/FileBackedOutputStream* files. Review /tmp and any configured java.io.tmpdir locations for residual FileBackedOutputStream files, unexpected permissions, or copied archives. Correlate file-read events with application processing windows that may have handled sensitive data. If audit logs show another user or untrusted process opening these files, scope the incident as possible data disclosure.

  • /tmp/FileBackedOutputStream
  • /var/tmp/FileBackedOutputStream
  • FileBackedOutputStream*.tmp
  • guava-31.1-jre.jar
  • guava-31.1-android.jar
  • guava-30.1.1-jre.jar
  • guava-30.1-jre.jar
  • guava-29.0-jre.jar
  • guava-28.2-jre.jar
  • guava-27.1-jre.jar
  • guava-26.0-jre.jar
  • guava-25.1-jre.jar
  • guava-24.1.1-jre.jar
  • guava-23.6-jre.jar
  • guava-22.0.jar
  • guava-21.0.jar
  • java.io.tmpdir=/tmp
  • openat*FileBackedOutputStream
  • cat /tmp/FileBackedOutputStream
  • cp /tmp/FileBackedOutputStream
  • tail -f /tmp/FileBackedOutputStream
  • less /tmp/FileBackedOutputStream
  • strings /tmp/FileBackedOutputStream

What your security team should do

  • Prioritize dependency upgrades for internet-facing, multi-tenant, shared-host, CI/CD, batch-processing, and document-processing Java applications that use Guava.
  • Standardize on Guava 32.0.1 or later and block Guava 31.1 or older in dependency policy gates and software composition analysis tooling.
  • Search container images, fat JARs, application server libraries, plugins, and build caches for vulnerable guava-*.jar files because Guava is frequently included transitively.
  • For systems that cannot be upgraded immediately, configure Java temporary directories to private 0700 paths and remove untrusted local users or applications from affected hosts.
  • Enable or review file access auditing for shared temporary directories on high-risk systems to identify unexpected reads of FileBackedOutputStream temporary files.
  • Treat any confirmed unauthorized access to these temporary files as potential sensitive-data exposure and follow data-handling, legal, and incident-response procedures.

The record

Use of Java's default temporary directory for file creation in `FileBackedOutputStream` in Google Guava versions 1.0 to 31.1 on Unix systems and Android Ice Cream Sandwich allows other users and apps on the machine with access to the default Java temporary directory to be able to access the files created by the class. Even though the security vulnerability is fixed in version 32.0.0, we recommend using version 32.0.1 as version 32.0.0 breaks some functionality under Windows.

Affected packages

Ecosystem Package Introduced Fixed
Maven com.google.guava:guava 1.0 32.0.0-android
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 cassandra-4.0 0 0
Chainguard cassandra-4.0-compat 0 0
Chainguard cassandra-4.0-iamguarded-compat 0 0
Chainguard cassandra-4.1 0 0
Chainguard cassandra-4.1-compat 0 0
Chainguard cassandra-4.1-iamguarded-compat 0 0
Chainguard cassandra-fips-4.0 0 0
Chainguard cassandra-fips-4.0-compat 0 0
Chainguard cassandra-fips-4.1 0 0
Chainguard cassandra-fips-4.1-compat 0 0
Chainguard cassandra-reaper 0 4.0.1-r1
Chainguard cassandra-reaper-jre-bcfips 0 3.7.1-r1
Chainguard debezium-connector-spanner-3.0 0 3.0.4-r2
Chainguard druid 0 0
Chainguard druid-compat 0 0
Chainguard elasticsearch-7 0 7.17.14-r2
Chainguard elasticsearch-7 0 0
Chainguard elasticsearch-7-bitnami 0 0
Chainguard elasticsearch-7-iamguarded 0 0
Chainguard elasticsearch-7.17 0 0
Chainguard elasticsearch-7.17-iamguarded 0 0
Chainguard flyway 0 11.15.0-r1
Chainguard gradle-8 0 8.2.1-r1
Chainguard grpc-java-fips-1.56.0 0 0
Chainguard grpc-java-fips-1.56.0-m2 0 0
Chainguard hadoop-client-modules 0 3.3.6-r8
Chainguard keycloak 0 0
Chainguard keycloak-bitnami-compat 0 0
Chainguard keycloak-bitnami-fips 0 0
Chainguard keycloak-compat 0 0
Chainguard keycloak-fips 0 0
Chainguard keycloak-fips-bitnami-compat 0 0
Chainguard keycloak-fips-policy-140-2 0 0
Chainguard keycloak-fips-policy-140-3 0 0
Chainguard keycloak-iamguarded-compat 0 0
Chainguard keycloak-iamguarded-fips 0 0
Chainguard maven 0 3.9.3-r1
Chainguard maven-stage0 0 3.9.12-r0
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-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 spdx-tools-java 0 1.1.8-r1
Chainguard trino 0 439-r0
Chainguard trino 0 478-r2
Chainguard trino-config 0 439-r0
Chainguard trino-config 0 478-r2
Chainguard trino-oci-entrypoint 0 439-r0
Chainguard trino-oci-entrypoint 0 478-r2
Chainguard trino-plugin-accumulo 0 439-r0
Chainguard trino-plugin-ai-functions 0 478-r2
Chainguard trino-plugin-atop 0 439-r0
Chainguard trino-plugin-bigquery 0 439-r0
Chainguard trino-plugin-bigquery 0 478-r2
Chainguard trino-plugin-blackhole 0 439-r0
Chainguard trino-plugin-blackhole 0 478-r2
Chainguard trino-plugin-cassandra 0 439-r0
Chainguard trino-plugin-cassandra 0 478-r2
Chainguard trino-plugin-clickhouse 0 439-r0
Chainguard trino-plugin-delta-lake 0 439-r0
Chainguard trino-plugin-delta-lake 0 478-r2
Chainguard trino-plugin-druid 0 439-r0
Chainguard trino-plugin-druid 0 478-r2
Chainguard trino-plugin-duckdb 0 478-r2
Chainguard trino-plugin-elasticsearch 0 439-r0
Chainguard trino-plugin-elasticsearch 0 478-r2
Chainguard trino-plugin-example-http 0 439-r0
Chainguard trino-plugin-exasol 0 478-r2
Chainguard trino-plugin-exchange-filesystem 0 439-r0
Chainguard trino-plugin-exchange-filesystem 0 478-r2
Chainguard trino-plugin-exchange-hdfs 0 439-r0
Chainguard trino-plugin-exchange-hdfs 0 478-r2
Chainguard trino-plugin-faker 0 478-r2
Chainguard trino-plugin-functions-python 0 478-r2
Chainguard trino-plugin-geospatial 0 439-r0
Chainguard trino-plugin-geospatial 0 478-r2
Chainguard trino-plugin-google-sheets 0 439-r0
Chainguard trino-plugin-google-sheets 0 478-r2
Chainguard trino-plugin-hive 0 439-r0
Chainguard trino-plugin-hive 0 478-r2
Chainguard trino-plugin-http-event-listener 0 439-r0
Chainguard trino-plugin-http-event-listener 0 478-r2
Chainguard trino-plugin-hudi 0 439-r0
Chainguard trino-plugin-hudi 0 478-r2
Chainguard trino-plugin-iceberg 0 439-r0
Chainguard trino-plugin-iceberg 0 478-r2
Chainguard trino-plugin-ignite 0 439-r0
Chainguard trino-plugin-ignite 0 478-r2
Chainguard trino-plugin-jmx 0 439-r0
Chainguard trino-plugin-jmx 0 478-r2
Chainguard trino-plugin-kafka 0 439-r0
Chainguard trino-plugin-kafka 0 478-r2
Chainguard trino-plugin-kafka-event-listener 0 478-r2
Chainguard trino-plugin-kinesis 0 439-r0
Chainguard trino-plugin-kudu 0 439-r0
Chainguard trino-plugin-lakehouse 0 478-r2
Chainguard trino-plugin-ldap-group-provider 0 478-r2
Chainguard trino-plugin-local-file 0 439-r0
Chainguard trino-plugin-loki 0 478-r2
Chainguard trino-plugin-mariadb 0 439-r0
Chainguard trino-plugin-mariadb 0 478-r2
Chainguard trino-plugin-memory 0 439-r0
Chainguard trino-plugin-memory 0 478-r2
Chainguard trino-plugin-ml 0 439-r0
Chainguard trino-plugin-ml 0 478-r2
Chainguard trino-plugin-mongodb 0 439-r0
Chainguard trino-plugin-mongodb 0 478-r2
Chainguard trino-plugin-mysql 0 439-r0
Chainguard trino-plugin-mysql 0 478-r2
Chainguard trino-plugin-mysql-event-listener 0 439-r0
Chainguard trino-plugin-mysql-event-listener 0 478-r2
Chainguard trino-plugin-opa 0 478-r2
Chainguard trino-plugin-openlineage 0 478-r2
Chainguard trino-plugin-opensearch 0 478-r2
Chainguard trino-plugin-oracle 0 439-r0
Chainguard trino-plugin-oracle 0 478-r2
Chainguard trino-plugin-password-authenticators 0 439-r0
Chainguard trino-plugin-password-authenticators 0 478-r2
Chainguard trino-plugin-pinot 0 439-r0
Chainguard trino-plugin-pinot 0 478-r2
Chainguard trino-plugin-postgresql 0 439-r0
Chainguard trino-plugin-postgresql 0 478-r2
Chainguard trino-plugin-prometheus 0 439-r0
Chainguard trino-plugin-prometheus 0 478-r2
Chainguard trino-plugin-ranger 0 478-r2
Chainguard trino-plugin-raptor-legacy 0 439-r0
Chainguard trino-plugin-redis 0 439-r0
Chainguard trino-plugin-redis 0 478-r2
Chainguard trino-plugin-redshift 0 439-r0
Chainguard trino-plugin-redshift 0 478-r2
Chainguard trino-plugin-resource-group-managers 0 439-r0
Chainguard trino-plugin-resource-group-managers 0 478-r2
Chainguard trino-plugin-session-property-managers 0 439-r0
Chainguard trino-plugin-session-property-managers 0 478-r2
Chainguard trino-plugin-singlestore 0 439-r0
Chainguard trino-plugin-singlestore 0 478-r2
Chainguard trino-plugin-snowflake 0 478-r2
Chainguard trino-plugin-spooling-filesystem 0 478-r2
Chainguard trino-plugin-sqlserver 0 439-r0
Chainguard trino-plugin-sqlserver 0 478-r2
Chainguard trino-plugin-teradata-functions 0 439-r0
Chainguard trino-plugin-teradata-functions 0 478-r2
Chainguard trino-plugin-thrift 0 439-r0
Chainguard trino-plugin-thrift 0 478-r2
Chainguard trino-plugin-tpcds 0 439-r0
Chainguard trino-plugin-tpcds 0 478-r2
Chainguard trino-plugin-tpch 0 439-r0
Chainguard trino-plugin-tpch 0 478-r2
Chainguard trino-plugin-vertica 0 478-r2
Debian:11 guava-libraries 0 No fix
Debian:12 guava-libraries 0 No fix
Debian:13 guava-libraries 0 32.0.1-1
Mageia:9 guava 0 32.0.1-1.mga9
Red Hat:jboss_enterprise_application_platform:7.4::el7 eap7-activemq-artemis 0 0:2.16.0-17.redhat_00051.1.el7eap
Red Hat:jboss_enterprise_application_platform:7.4::el7 eap7-activemq-artemis-cli 0 0:2.16.0-17.redhat_00051.1.el7eap
Red Hat:jboss_enterprise_application_platform:7.4::el7 eap7-activemq-artemis-commons 0 0:2.16.0-17.redhat_00051.1.el7eap
Red Hat:jboss_enterprise_application_platform:7.4::el7 eap7-activemq-artemis-core-client 0 0:2.16.0-17.redhat_00051.1.el7eap
Red Hat:jboss_enterprise_application_platform:7.4::el7 eap7-activemq-artemis-dto 0 0:2.16.0-17.redhat_00051.1.el7eap
Red Hat:jboss_enterprise_application_platform:7.4::el7 eap7-activemq-artemis-hornetq-protocol 0 0:2.16.0-17.redhat_00051.1.el7eap
Red Hat:jboss_enterprise_application_platform:7.4::el7 eap7-activemq-artemis-hqclient-protocol 0 0:2.16.0-17.redhat_00051.1.el7eap
Red Hat:jboss_enterprise_application_platform:7.4::el7 eap7-activemq-artemis-jdbc-store 0 0:2.16.0-17.redhat_00051.1.el7eap
Red Hat:jboss_enterprise_application_platform:7.4::el7 eap7-activemq-artemis-jms-client 0 0:2.16.0-17.redhat_00051.1.el7eap
Red Hat:jboss_enterprise_application_platform:7.4::el7 eap7-activemq-artemis-jms-server 0 0:2.16.0-17.redhat_00051.1.el7eap
Red Hat:jboss_enterprise_application_platform:7.4::el7 eap7-activemq-artemis-journal 0 0:2.16.0-17.redhat_00051.1.el7eap
Red Hat:jboss_enterprise_application_platform:7.4::el7 eap7-activemq-artemis-ra 0 0:2.16.0-17.redhat_00051.1.el7eap
Red Hat:jboss_enterprise_application_platform:7.4::el7 eap7-activemq-artemis-selector 0 0:2.16.0-17.redhat_00051.1.el7eap
Red Hat:jboss_enterprise_application_platform:7.4::el7 eap7-activemq-artemis-server 0 0:2.16.0-17.redhat_00051.1.el7eap
Red Hat:jboss_enterprise_application_platform:7.4::el7 eap7-activemq-artemis-service-extensions 0 0:2.16.0-17.redhat_00051.1.el7eap
Red Hat:jboss_enterprise_application_platform:7.4::el7 eap7-activemq-artemis-tools 0 0:2.16.0-17.redhat_00051.1.el7eap
Red Hat:jboss_enterprise_application_platform:7.4::el7 eap7-apache-sshd 0 0:2.9.3-1.redhat_00001.1.el7eap
Red Hat:jboss_enterprise_application_platform:7.4::el7 eap7-avro 0 0:1.11.3-1.redhat_00001.1.el7eap
Red Hat:jboss_enterprise_application_platform:7.4::el7 eap7-guava 0 0:32.1.1-2.jre_redhat_00001.1.el7eap
Red Hat:jboss_enterprise_application_platform:7.4::el7 eap7-guava-libraries 0 0:32.1.1-2.jre_redhat_00001.1.el7eap
Red Hat:jboss_enterprise_application_platform:7.4::el7 eap7-hal-console 0 0:3.3.20-1.Final_redhat_00001.1.el7eap
Red Hat:jboss_enterprise_application_platform:7.4::el7 eap7-hibernate 0 0:5.3.32-1.Final_redhat_00001.1.el7eap
Red Hat:jboss_enterprise_application_platform:7.4::el7 eap7-hibernate-core 0 0:5.3.32-1.Final_redhat_00001.1.el7eap
Red Hat:jboss_enterprise_application_platform:7.4::el7 eap7-hibernate-entitymanager 0 0:5.3.32-1.Final_redhat_00001.1.el7eap
Red Hat:jboss_enterprise_application_platform:7.4::el7 eap7-hibernate-envers 0 0:5.3.32-1.Final_redhat_00001.1.el7eap
Red Hat:jboss_enterprise_application_platform:7.4::el7 eap7-hibernate-java8 0 0:5.3.32-1.Final_redhat_00001.1.el7eap
Red Hat:jboss_enterprise_application_platform:7.4::el7 eap7-infinispan 0 0:11.0.18-1.Final_redhat_00001.1.el7eap
Red Hat:jboss_enterprise_application_platform:7.4::el7 eap7-infinispan-cachestore-jdbc 0 0:11.0.18-1.Final_redhat_00001.1.el7eap
Red Hat:jboss_enterprise_application_platform:7.4::el7 eap7-infinispan-cachestore-remote 0 0:11.0.18-1.Final_redhat_00001.1.el7eap
Red Hat:jboss_enterprise_application_platform:7.4::el7 eap7-infinispan-client-hotrod 0 0:11.0.18-1.Final_redhat_00001.1.el7eap
Red Hat:jboss_enterprise_application_platform:7.4::el7 eap7-infinispan-commons 0 0:11.0.18-1.Final_redhat_00001.1.el7eap
Red Hat:jboss_enterprise_application_platform:7.4::el7 eap7-infinispan-component-annotations 0 0:11.0.18-1.Final_redhat_00001.1.el7eap
Red Hat:jboss_enterprise_application_platform:7.4::el7 eap7-infinispan-core 0 0:11.0.18-1.Final_redhat_00001.1.el7eap
Red Hat:jboss_enterprise_application_platform:7.4::el7 eap7-infinispan-hibernate-cache-commons 0 0:11.0.18-1.Final_redhat_00001.1.el7eap
Red Hat:jboss_enterprise_application_platform:7.4::el7 eap7-infinispan-hibernate-cache-spi 0 0:11.0.18-1.Final_redhat_00001.1.el7eap
Red Hat:jboss_enterprise_application_platform:7.4::el7 eap7-infinispan-hibernate-cache-v53 0 0:11.0.18-1.Final_redhat_00001.1.el7eap
Red Hat:jboss_enterprise_application_platform:7.4::el7 eap7-jandex 0 0:2.4.4-1.Final_redhat_00001.1.el7eap
Red Hat:jboss_enterprise_application_platform:7.4::el7 eap7-jboss-jsp-api_2.3_spec 0 0:2.0.1-1.Final_redhat_00001.1.el7eap
Red Hat:jboss_enterprise_application_platform:7.4::el7 eap7-jboss-marshalling 0 0:2.0.14-1.SP1_redhat_00001.1.el7eap

Related vulnerabilities