CVE-2024-52338
NoneCVSS
—
EPSS
2.3%
Published
Nov 28, 2024
CISA due date
—
Cloudanix analysis
If your R data tools open certain data files from people you do not fully trust, an attacker could run their own programs on the machine that processes those files.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- Moderate
- Impact
- Remote Code Execution
- Component
- Library
- Class
- Deserialization
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Medium
What it actually does
Unsafe deserialization in the Apache Arrow R package (arrow 4.0.0 through 16.1.0) IPC, Feather, and Parquet readers can execute attacker-controlled code in the R process when untrusted files are parsed. The flaw is specific to the R binding; other Apache Arrow implementations are not affected unless invoked through a vulnerable arrow R package. Successful parsing of a crafted file yields arbitrary code execution with the privileges of the R interpreter or the hosting application.
Why it matters to the business
Data-science, ETL, and analytics pipelines that ingest user-supplied or partner-supplied Arrow IPC, Feather, or Parquet files in R can be fully compromised, exposing datasets, credentials, and downstream systems. Impact is highest where R services run with broad filesystem, cloud, or database access. Exploit maturity is none, EPSS is low (~0.023) and slightly declining, and the CVE is not in CISA KEV and has no associated ransomware use, so mass exploitation is not indicated—but any untrusted-file ingest path remains a high-consequence risk. Downstream libraries that pin arrow below 17.0.0 inherit the same exposure.
How an attack unfolds
An attacker who can place a file where an affected R application will read it as Arrow IPC, Feather, or Parquet prepares a malicious dataset that triggers unsafe deserialization in the R readers. When the application opens that file with an affected arrow package (4.0.0–16.1.0), deserialization runs attacker-controlled code inside the R process. The attacker then uses that foothold to steal data, persist, or move laterally. No named threat actors or in-the-wild campaigns are associated with this issue; abuse depends on applications that treat untrusted files as trusted input.
How to fix it
Upgrade the Apache Arrow R package to 17.0.0 or later (GIT fix 801de2fbcf5bcbce0c019ed4b35ff3fc863b141b) and require that version in downstream library dependencies. Until upgrade is complete, do not read untrusted IPC, Feather, or Parquet with the default readers; if an affected version must remain, read into a Table and convert with the internal to_data_frame() path (for example, read_parquet(..., as_data_frame = FALSE)$to_data_frame()) as a temporary workaround, and restrict ingest to authenticated, trusted producers. Inventory all R environments, containers, and CI images that ship arrow 4.0.0–16.1.0.
How to confirm the fix worked
Confirm installed arrow is 17.0.0 or later (packageVersion("arrow") in R, lockfiles, renv/packrat, and container images). Search dependency manifests for pins below 17.0.0. Verify production ingest jobs no longer call vulnerable default readers on untrusted files. After upgrade, regression-test trusted IPC/Feather/Parquet reads and confirm the workaround is removed once 17.0.0 is deployed.
Typical attack path
- Locate an R application, notebook, or pipeline that uses the arrow package to read IPC, Feather, or Parquet from untrusted or user-supplied sources.
- Supply a crafted Arrow IPC, Feather, or Parquet file through an upload, shared store, email, or data-exchange channel the application already consumes.
- Wait for the vulnerable reader to deserialize the file during normal ingest.
- Obtain arbitrary code execution in the R process and pursue data access, persistence, or further movement.
How to detect it
There is no public exploit activity, named actor, or KEV listing, so look for signs of untrusted-file ingest rather than a known payload. Review R session, Rscript, and batch-job logs around Arrow IPC, Feather, and Parquet reads from user uploads, object storage, or email drops; correlate with unexpected child processes, outbound connections, or file writes from R/Rscript after those reads. Inspect application and web-tier upload logs for .parquet, .feather, .arrow, and .ipc files reaching R services running arrow 4.0.0–16.1.0. On hosts, check package libraries and lockfiles for those versions, and examine auditd/EDR for Rscript or rsession spawning shells or unusual interpreters immediately after a file read. Preserve any ingested files from the relevant window for later analysis.
What your security team should do
- Inventory every R runtime, notebook server, batch job, and container that loads the arrow package and flag versions 4.0.0 through 16.1.0.
- Upgrade arrow to 17.0.0 or later and bump downstream package requirements; treat remaining 4.0.0–16.1.0 pins as priority patching even though this CVE is not KEV.
- Until patched, block or sandbox untrusted IPC, Feather, and Parquet ingest into R, or apply the Table/to_data_frame() workaround only as a short-term control.
- Restrict R process privileges, network, and secret access so a compromised reader cannot reach production data stores.
- Hunt historically for untrusted-file ingest into affected arrow versions; EPSS is low and no exploitation is reported, but confirm no silent compromise of analytics hosts.
The record
Deserialization of untrusted data in IPC and Parquet readers in the Apache Arrow R package versions 4.0.0 through 16.1.0 allows arbitrary code execution. An application is vulnerable if it reads Arrow IPC, Feather or Parquet data from untrusted sources (for example, user-supplied input files). This vulnerability only affects the arrow R package, not other Apache Arrow implementations or bindings unless those bindings are specifically used via the R package (for example, an R application that embeds a Python interpreter and uses PyArrow to read files from untrusted sources is still vulnerable if the arrow R package is an affected version). It is recommended that users of the arrow R package upgrade to 17.0.0 or later. Similarly, it is recommended that downstream libraries upgrade their dependency requirements to arrow 17.0.0 or later. If using an affected version of the package, untrusted data can read into a Table and its internal to_data_frame() method can be used as a workaround (e.g., read_parquet(..., as_data_frame = FALSE)$to_data_frame()). This issue affects the Apache Arrow R package: from 4.0.0 through 16.1.0. Users are recommended to upgrade to version 17.0.0, which fixes the issue.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| PyPI | pyarrow | 4.0.0 | 17.0.0 |
| Chainguard | airflow-2 | 0 | 2.11.0-r15 |
| Chainguard | airflow-2-compat | 0 | 2.11.0-r15 |
| Chainguard | airflow-2-iamguarded-compat | 0 | 2.11.0-r15 |
| Chainguard | kubeflow-pipelines-visualization-server | 0 | 2.15.0-r0 |
| Chainguard | superset | 0 | 0 |
| Chainguard | superset-ci | 0 | 0 |
| Chainguard | superset-entrypoint | 0 | 0 |
| Chainguard | superset-iamguarded-compat | 0 | 0 |
| Wolfi | kubeflow-pipelines-visualization-server | 0 | 2.15.0-r0 |
| Wolfi | superset | 0 | 0 |
| Wolfi | superset-ci | 0 | 0 |
| Wolfi | superset-entrypoint | 0 | 0 |
| Wolfi | superset-iamguarded-compat | 0 | 0 |
Related vulnerabilities
- CVE-2026-4539 A security flaw has been discovered in pygments up to 2.19.2. Also affects airflow-2
- CVE-2026-30922 pyasn1 is a generic ASN.1 library for Python. Also affects airflow-2
- CVE-2026-27448 pyOpenSSL is a Python wrapper around the OpenSSL library. Also affects airflow-2
- CVE-2026-27459 pyOpenSSL is a Python wrapper around the OpenSSL library. Also affects airflow-2
- CVE-2026-32597 PyJWT is a JSON Web Token implementation in Python. Also affects airflow-2
- CVE-2026-31958 Tornado is a Python web framework and asynchronous networking library. Also affects airflow-2
- CVE-2026-25604 In AWS Auth manager, the origin of the SAML authentication has been used as provided by… Also affects airflow-2
- CVE-2025-69219 A user with access to the DB could craft a database entry that would result in executing… Also affects airflow-2