Cloudanix VulnDB

CVE-2024-39689

High · 7.5

CVSS

7.5

EPSS

1.0%

Published

Jul 5, 2024

CISA due date

—

Cloudanix analysis

Next patch cycle SSVC: Track

A core software component for securing communications mistakenly trusts an unreliable authority, allowing attackers to potentially impersonate legitimate websites and intercept sensitive data.

Chainable
Exploitation
Remote Unauthenticated
Attacker needs
None
Complexity
Moderate
Impact
Data Tampering
Component
Library
Class
Cryptographic Weakness
Remediation
Upgrade
Effort
Medium
Patch risk
Low

What it actually does

The certifi library, a core component for TLS certificate validation in the Python ecosystem, includes root certificates from the 'GLOBALTRUST' Certificate Authority (CA). This CA has been deemed untrustworthy due to unresolved compliance issues, leading to its removal from major trust stores. Applications using vulnerable versions of certifi will incorrectly trust TLS certificates issued by this CA, enabling an attacker with such a certificate to successfully impersonate a legitimate server, thereby breaking the integrity and authenticity of the TLS connection.

Why it matters to the business

Applications relying on outdated versions of this library are susceptible to Man-in-the-Middle (MitM) attacks, where attackers can impersonate legitimate services to intercept, read, or alter sensitive data in transit. This could lead to the theft of customer data, financial credentials, or internal secrets, resulting in significant financial loss, regulatory fines, and severe reputational damage. Given that certifi is a foundational dependency for countless other libraries (e.g., 'requests'), the vulnerability's reach is extensive, potentially affecting a wide array of web clients, APIs, and internal tools.

How an attack unfolds

An attacker first obtains a TLS certificate from the now-distrusted 'GLOBALTRUST' CA. They then position themselves between a client application and a legitimate server, typically through techniques like DNS poisoning or by controlling a network segment (e.g., public Wi-Fi). When the client, using a vulnerable version of certifi, attempts to connect to the legitimate service, the attacker intercepts the request and presents their malicious server secured with the 'GLOBALTRUST' certificate. The client's certifi library, trusting the 'GLOBALTRUST' root, validates the certificate and establishes a supposedly secure connection with the attacker. The attacker now has full control over the communication channel, allowing them to decrypt traffic, steal credentials, or inject malicious content.

How to fix it

Update the 'certifi' package to version 2024.07.04 or later. This can be accomplished using the standard Python package manager with the command: `pip install --upgrade certifi`. Ensure that all Python environments, virtual environments, container images, and serverless function dependencies are updated. After updating, redeploy any applications that bundle or depend on the certifi library.

How to confirm the fix worked

To verify that the vulnerability has been remediated, check the installed version of the certifi package in your environment. Run `pip show certifi` or `pip list | grep certifi` and confirm that the version is 2024.07.04 or newer. As a functional test, you can inspect the library's certificate bundle (typically `cacert.pem`) to confirm that certificates with 'GLOBALTRUST' in their issuer name have been removed.

Typical attack path

  1. Attacker obtains a TLS certificate chaining up to a distrusted 'GLOBALTRUST' root.
  2. Attacker gains a Man-in-the-Middle (MitM) position on the network between a victim client and a target server.
  3. The victim's application, using a vulnerable version of the certifi library, initiates a connection to the target server.
  4. The attacker intercepts the TLS handshake and presents their malicious certificate.
  5. The vulnerable client library validates and trusts the attacker's certificate, establishing a connection to the attacker's server.
  6. The attacker intercepts and manipulates the communication, potentially stealing sensitive data like credentials or session tokens.

How to detect it

Detecting past exploitation is challenging as it would appear as valid TLS traffic. Focus on analyzing historical network data. Review TLS inspection logs, proxy logs, or network flow data for successful connections where the server certificate's issuer chain contains 'GLOBALTRUST'. Correlate these connections with sensitive endpoints to assess potential data exposure. Proactively, monitor Certificate Transparency (CT) logs for any new certificates being issued by 'GLOBALTRUST' that target your domains.

  • TLS certificate issuer containing the string 'GLOBALTRUST'

What your security team should do

  • Immediately use a Software Composition Analysis (SCA) tool to identify all instances of the 'certifi' library, including as a transitive dependency, across all codebases and deployed applications.
  • Prioritize patching all affected systems by upgrading 'certifi' to version 2024.07.04 or later, focusing first on production and internet-facing applications.
  • Update base container images and CI/CD pipeline configurations to ensure all future builds and deployments use the patched version of the library by default.

The record

Certifi is a curated collection of Root Certificates for validating the trustworthiness of SSL certificates while verifying the identity of TLS hosts. Certifi starting in 2021.05.30 and prior to 2024.07.4 recognized root certificates from `GLOBALTRUST`. Certifi 2024.07.04 removes root certificates from `GLOBALTRUST` from the root store. These are in the process of being removed from Mozilla's trust store. `GLOBALTRUST`'s root certificates are being removed pursuant to an investigation which identified "long-running and unresolved compliance issues."

Affected packages

Ecosystem Package Introduced Fixed
PyPI certifi 2021.05.30 2024.07.04
PyPI certifi 2021.5.30 2024.7.4
Chainguard airflow 0 2.9.2-r2
Chainguard airflow-bitnami-compat 0 2.9.2-r2
Chainguard airflow-compat 0 2.9.2-r2
Chainguard az 0 2.61.0-r2
Chainguard az-iamguarded-compat 0 2.61.0-r2
Chainguard barman 0 3.10.1-r2
Chainguard barman-cloudnative-pg 0 3.10.1-r2
Chainguard checkov 0 3.0.34-r1
Chainguard confluent-docker-utils 0 0.0.82-r1
Chainguard dask-gateway 0 2024.1.0-r8
Chainguard dask-gateway-server 0 2024.1.0-r8
Chainguard datadog-agent 0 7.55.2-r0
Chainguard datadog-agent-core-integrations 0 7.55.2-r0
Chainguard datadog-agent-core-integrations-fips 0 7.72.0-r0
Chainguard datadog-agent-fakeintake 0 7.55.2-r0
Chainguard datadog-agent-fakeintake-fips 0 7.72.0-r0
Chainguard datadog-agent-fips 0 7.72.0-r0
Chainguard datadog-agent-jmx 0 7.55.2-r0
Chainguard datadog-agent-jmx-fips 0 7.72.0-r0
Chainguard datadog-agent-oci-compat 0 7.55.2-r0
Chainguard datadog-agent-oci-compat-fips 0 7.72.0-r0
Chainguard datadog-agent-s6-overlay 0 7.55.2-r0
Chainguard datadog-agent-s6-overlay-fips 0 7.72.0-r0
Chainguard datadog-cluster-agent 0 7.55.2-r0
Chainguard datadog-cluster-agent-fips 0 7.72.1-r0
Chainguard datadog-cluster-agent-oci-compat 0 7.55.2-r0
Chainguard datadog-cluster-agent-oci-compat-fips 0 7.72.0-r0
Chainguard dogstatsd 0 7.55.2-r0
Chainguard graalvm-23 0 23.0.2-r7
Chainguard graalvm-23-ce 0 23.0.2-r7
Chainguard graalvm-23-ce-dbg 0 23.0.2-r7
Chainguard graalvm-23-ce-default-jdk 0 23.0.2-r7
Chainguard graalvm-23-ce-jmods 0 23.0.2-r7
Chainguard graalvm-23-ce-nodejs 0 23.0.2-r7
Chainguard graalvm-23-ce-nodejs-dbg 0 23.0.2-r7
Chainguard graalvm-23-ce-nodejs-default-jdk 0 23.0.2-r7
Chainguard graalvm-23-ce-nodejs-jmods 0 23.0.2-r7
Chainguard graalvm-23-graalpy 0 23.0.2-r7
Chainguard graalvm-23-truffleruby 0 23.0.2-r7
Chainguard graalvm-24 0 24.0.2-r6
Chainguard graalvm-24-ce 0 24.0.2-r6
Chainguard graalvm-24-ce-dbg 0 24.0.2-r6
Chainguard graalvm-24-ce-default-jdk 0 24.0.2-r6
Chainguard graalvm-24-ce-jmods 0 24.0.2-r6
Chainguard graalvm-24-ce-nodejs 0 24.0.2-r6
Chainguard graalvm-24-ce-nodejs-dbg 0 24.0.2-r6
Chainguard graalvm-24-ce-nodejs-default-jdk 0 24.0.2-r6
Chainguard graalvm-24-ce-nodejs-jmods 0 24.0.2-r6
Chainguard graalvm-24-graalpy 0 24.0.2-r6
Chainguard graalvm-24-truffleruby 0 24.0.2-r6
Chainguard jwt-tool 0 2.2.7-r1
Chainguard k8s-sidecar 0 1.27.4-r2
Chainguard k8s-sidecar-1.22 0 1.22.4-r2
Chainguard katib-cert-generator 0 0.18.0-r0
Chainguard katib-cert-generator-compat 0 0.18.0-r0
Chainguard katib-controller 0 0.18.0-r0
Chainguard katib-controller-compat 0 0.18.0-r0
Chainguard katib-db-manager 0 0.18.0-r0
Chainguard katib-db-manager-compat 0 0.18.0-r0
Chainguard katib-earlystopping 0 0.18.0-r0
Chainguard katib-file-metricscollector 0 0.18.0-r0
Chainguard katib-file-metricscollector-compat 0 0.18.0-r0
Chainguard katib-suggestion-goptuna 0 0.18.0-r0
Chainguard katib-suggestion-goptuna-compat 0 0.18.0-r0
Chainguard katib-suggestion-hyperband 0 0.18.0-r0
Chainguard katib-suggestion-hyperopt 0 0.18.0-r0
Chainguard katib-suggestion-nas-darts 0 0.18.0-r0
Chainguard katib-suggestion-nas-enas 0 0.18.0-r0
Chainguard katib-suggestion-optuna-enas 0 0.18.0-r0
Chainguard katib-suggestion-pbt-enas 0 0.18.0-r0
Chainguard katib-suggestion-skopt-enas 0 0.18.0-r0
Chainguard katib-tfevent-metricscollector 0 0.18.0-r0
Chainguard kubeflow-jupyter-web-app 0 1.8.0-r10
Chainguard kubeflow-katib 0 0.18.0-r0
Chainguard kubeflow-pipelines 0 2.2.0-r6
Chainguard kubeflow-pipelines-apiserver 0 2.2.0-r6
Chainguard kubeflow-pipelines-cache-deployer 0 2.2.0-r6
Chainguard kubeflow-pipelines-cache-deployer-compat 0 2.2.0-r6
Chainguard kubeflow-pipelines-cache_server 0 2.2.0-r6
Chainguard kubeflow-pipelines-frontend 0 2.2.0-r6
Chainguard kubeflow-pipelines-metadata-envoy-config 0 2.2.0-r6
Chainguard kubeflow-pipelines-metadata-writer 0 2.2.0-r6
Chainguard kubeflow-pipelines-metadata-writer-compat 0 2.2.0-r6
Chainguard kubeflow-pipelines-persistence_agent 0 2.2.0-r6
Chainguard kubeflow-pipelines-scheduledworkflow 0 2.2.0-r6
Chainguard kubeflow-pipelines-viewer-crd-controller 0 2.2.0-r6
Chainguard kubeflow-pipelines-visualization-server 0 2.3.0-r1
Chainguard kubeflow-volumes-web-app 0 1.8.0-r8
Chainguard mlflow 0 2.14.2-r0
Chainguard mlflow-bitnami 0 2.14.2-r0
Chainguard mlflow-iamguarded-compat 0 2.14.2-r0
Chainguard nvidia-apex-12.3-wheel 0 24.04.01-r1
Chainguard patroni 0 3.3.2-r0
Chainguard py3-cassandra-medusa 0 0.21.0-r5
Chainguard py3-cassandra-medusa 0 0.23.0-r30
Chainguard py3-cassandra-medusa-compat 0 0.21.0-r5
Chainguard py3-cassandra-medusa-compat 0 0.23.0-r30
Chainguard py3-certifi 0 2024.07.04-r0
Chainguard py3-pipenv 0 2024.4.1-r0
Chainguard py3-supported-certifi 0 2024.07.04-r0
Chainguard py3-supported-pipenv 0 2024.4.1-r0
Chainguard py3.10-certifi 0 2024.07.04-r0
Chainguard py3.10-pipenv 0 2024.4.1-r0
Chainguard py3.10-pipenv-bin 0 2024.4.1-r0
Chainguard py3.10-pytorch-cuda-11.8 0 2.3.1-r2
Chainguard py3.10-pytorch-cuda-12.3 0 2.3.1-r2
Chainguard py3.10-torchvision-cuda-11.8 0 0.18.1-r3
Chainguard py3.10-torchvision-cuda-12.3 0 0.18.1-r4
Chainguard py3.10-wheels-torch-cuda-11.8 0 2.3.1-r2
Chainguard py3.10-wheels-torch-cuda-12.3 0 2.3.1-r2
Chainguard py3.10-wheels-torchvision-cuda-11.8 0 0.18.1-r3
Chainguard py3.10-wheels-torchvision-cuda-12.3 0 0.18.1-r4
Chainguard py3.11-certifi 0 2024.07.04-r0
Chainguard py3.11-pipenv 0 2024.4.1-r0
Chainguard py3.11-pipenv-bin 0 2024.4.1-r0
Chainguard py3.11-pytorch-cuda-12.3 0 2.3.1-r6
Chainguard py3.11-torchaudio-cuda-12.3 0 2.3.1-r1
Chainguard py3.11-torchvision-cuda-11.8 0 0.18.1-r3
Chainguard py3.11-torchvision-cuda-12.3 0 0.18.1-r5
Chainguard py3.11-wheels-torch-cuda-12.3 0 2.3.1-r6
Chainguard py3.11-wheels-torchaudio-cuda-12.3 0 2.3.1-r1
Chainguard py3.11-wheels-torchvision-cuda-11.8 0 0.18.1-r3
Chainguard py3.11-wheels-torchvision-cuda-12.3 0 0.18.1-r5
Chainguard py3.12-certifi 0 2024.07.04-r0
Chainguard py3.12-pipenv 0 2024.4.1-r0
Chainguard py3.12-pipenv-bin 0 2024.4.1-r0
Chainguard py3.12-pytorch-cuda-11.8 0 2.3.1-r1
Chainguard py3.12-pytorch-cuda-12.3 0 2.3.1-r1
Chainguard py3.12-torchvision-cuda-12.3 0 0.18.1-r2
Chainguard py3.12-wheels-torch-cuda-11.8 0 2.3.1-r1
Chainguard py3.12-wheels-torch-cuda-12.3 0 2.3.1-r1
Chainguard py3.12-wheels-torchvision-cuda-11.8 0 0.18.1-r2
Chainguard py3.12-wheels-torchvision-cuda-12.3 0 0.18.1-r2
Chainguard py3.13-certifi 0 2024.07.04-r0
Chainguard py3.13-pipenv 0 2024.4.1-r0
Chainguard py3.13-pipenv-bin 0 2024.4.1-r0
Chainguard reflex 0 0.5.6-r0
Chainguard request-1276 0 0.21.0-r4
Chainguard request-1276 0 0.23.0-r0
Chainguard request-1276-compat 0 0.21.0-r4
Chainguard request-1276-compat 0 0.23.0-r0
Chainguard superset 0 4.0.2-r1
Chainguard superset-ci 0 4.0.2-r1
Chainguard superset-entrypoint 0 4.0.2-r1
Chainguard superset-iamguarded-compat 0 4.0.2-r1
Debian:11 python-certifi 0 No fix
Debian:12 python-certifi 0 No fix
Debian:13 python-certifi 0 No fix
Ubuntu:20.04:LTS python-certifi 0 No fix
Ubuntu:20.04:LTS python-pip 0 No fix
Ubuntu:22.04:LTS python-certifi 0 No fix
Ubuntu:22.04:LTS python-pip 0 No fix
Ubuntu:24.04:LTS python-certifi 0 No fix
Ubuntu:24.04:LTS python-pip 0 No fix
Ubuntu:Pro:14.04:LTS python-pip 0 No fix
Ubuntu:Pro:16.04:LTS python-certifi 0 No fix
Ubuntu:Pro:16.04:LTS python-pip 0 No fix
Ubuntu:Pro:18.04:LTS python-certifi 0 No fix
Ubuntu:Pro:18.04:LTS python-pip 0 No fix
Ubuntu:Pro:20.04:LTS python-certifi 0 No fix
Ubuntu:Pro:20.04:LTS python-pip 0 No fix
Ubuntu:Pro:22.04:LTS python-pip 0 No fix
Ubuntu:Pro:24.04:LTS python-pip 0 No fix
Wolfi airflow 0 2.9.2-r2
Wolfi airflow-bitnami-compat 0 2.9.2-r2
Wolfi airflow-compat 0 2.9.2-r2
Wolfi az 0 2.61.0-r2
Wolfi az-iamguarded-compat 0 2.61.0-r2
Wolfi checkov 0 3.0.34-r1
Wolfi confluent-docker-utils 0 0.0.82-r1
Wolfi dask-gateway 0 2024.1.0-r8
Wolfi dask-gateway-server 0 2024.1.0-r8
Wolfi datadog-agent 0 7.55.2-r0
Wolfi datadog-agent-core-integrations 0 7.55.2-r0
Wolfi datadog-agent-fakeintake 0 7.55.2-r0
Wolfi datadog-agent-jmx 0 7.55.2-r0
Wolfi datadog-agent-oci-compat 0 7.55.2-r0
Wolfi datadog-agent-s6-overlay 0 7.55.2-r0
Wolfi datadog-cluster-agent 0 7.55.2-r0
Wolfi datadog-cluster-agent-oci-compat 0 7.55.2-r0
Wolfi dogstatsd 0 7.55.2-r0
Wolfi jwt-tool 0 2.2.7-r1
Wolfi k8s-sidecar 0 1.27.4-r2
Wolfi katib-cert-generator 0 0.18.0-r0
Wolfi katib-cert-generator-compat 0 0.18.0-r0
Wolfi katib-controller 0 0.18.0-r0
Wolfi katib-controller-compat 0 0.18.0-r0
Wolfi katib-db-manager 0 0.18.0-r0
Wolfi katib-db-manager-compat 0 0.18.0-r0
Wolfi katib-earlystopping 0 0.18.0-r0
Wolfi katib-file-metricscollector 0 0.18.0-r0
Wolfi katib-file-metricscollector-compat 0 0.18.0-r0
Wolfi katib-suggestion-goptuna 0 0.18.0-r0
Wolfi katib-suggestion-goptuna-compat 0 0.18.0-r0
Wolfi katib-suggestion-hyperband 0 0.18.0-r0
Wolfi katib-suggestion-hyperopt 0 0.18.0-r0
Wolfi katib-suggestion-nas-darts 0 0.18.0-r0
Wolfi katib-suggestion-nas-enas 0 0.18.0-r0

Related vulnerabilities