CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-32711

CVE-2026-32711: Path Traversal and Arbitrary File Operations in pydicom FileSet

Alon Barad
Alon Barad
Software Engineer

Mar 20, 2026·6 min read·73 visits

Executive Summary (TL;DR)

A path traversal vulnerability (CWE-22) in pydicom's FileSet parsing allows local arbitrary file operations via maliciously crafted DICOMDIR files. Update to version 3.0.2 or 2.4.5 to mitigate.

CVE-2026-32711 is a high-severity path traversal vulnerability in the pydicom Python library, affecting versions 2.0.0-rc.1 through 3.0.1. The flaw resides in the FileSet implementation, where insufficient validation of the ReferencedFileID attribute allows malicious DICOMDIR files to perform out-of-bounds file reads, copies, or deletions.

Vulnerability Overview

The pydicom Python library provides parsing and manipulation capabilities for DICOM files, a standard format in medical imaging. A core component of this standard is the DICOMDIR file, which acts as an index for a set of related DICOM files known as a File-set. The pydicom.fileset.FileSet class implements the logic for loading, modifying, and exporting these collections.

CVE-2026-32711 identifies a CWE-22 Path Traversal vulnerability within the FileSet parsing logic. The vulnerability specifically affects the handling of the ReferencedFileID attribute found in directory records. Insufficient sanitization of this attribute allows a malicious DICOMDIR file to reference arbitrary files outside the intended File-set root directory.

Exploitation requires a victim to process a weaponized DICOMDIR file using a vulnerable version of pydicom. Depending on the subsequent operations performed on the FileSet object, an attacker can achieve arbitrary file read, copy, or deletion on the victim's host filesystem. The impact is highly dependent on the privileges of the executing Python process.

Root Cause Analysis

The vulnerability originates from an unsafe interaction between user-supplied paths and Python's pathlib.Path module. When joining paths using the / operator, pathlib completely discards the left-hand operand if the right-hand operand evaluates to an absolute path. This behavior allows an attacker to bypass intended directory restrictions simply by supplying a path beginning with a root descriptor, such as / on Linux or C:\ on Windows.

In vulnerable versions of pydicom, the FileSet.load() method processes the ReferencedFileID to locate referenced files. The library invokes .resolve(strict=True) on the constructed path to verify that the target file exists on the filesystem. However, it fails to implement a containment check to verify that the resolved, absolute path remains a child of the designated File-set root directory.

Once the unvalidated path is loaded into the FileSet object, it becomes subject to standard operations. Methods such as FileSet.copy(), FileSet.write(), and FileSet.remove() utilize the stored path without further validation. If a victim script invokes FileSet.copy(), the library will read the file from the attacker-controlled absolute path and write it to the specified output destination, completing the data exfiltration chain.

Code Analysis

The remediation for CVE-2026-32711 introduces explicit path validation to enforce directory containment. The patch, implemented in commit 6414f01a053dff925578799f5a7208d2ae585e82, deprecates the vulnerable _file_id property. It replaces it with a dedicated file_id_path method that requires the root path as an argument for contextual validation.

def file_id_path(self, root_path: Path) -> Path | None:
    # Attribute extraction logic omitted for brevity
    path = Path(...)
    if path is not None:
        if path.anchor or not (
            (root_path / path).resolve().is_relative_to(root_path)
        ):
            raise PermissionError(
                f"ReferencedFileID ('{path}') must be inside the DICOMDIR root path"
            )
    return path

The patched logic implements two critical security checks. First, it evaluates path.anchor to explicitly reject any absolute paths, directly mitigating the pathlib joining behavior. Second, it resolves the combined path and uses is_relative_to(root_path) to ensure that relative traversals utilizing ../ sequences cannot escape the designated root directory. This comprehensive approach effectively eliminates the path traversal vector.

Exploitation Methodology

Exploiting CVE-2026-32711 requires the construction of a malicious DICOMDIR file. An attacker modifies a valid directory record, altering the ReferencedFileID attribute to point to a target file on the victim's system. The payload can be an absolute path, such as /etc/passwd, or a relative traversal path depending on the attacker's knowledge of the execution environment.

The attacker must then deliver the modified DICOMDIR file to the victim, typically bundled within a larger medical imaging dataset. The attack relies on social engineering or standard data ingestion workflows to prompt the victim to process the dataset. No specialized network access or authentication is required by the attacker, as the execution occurs entirely locally on the victim's machine.

from pydicom.fileset import FileSet
 
# Victim loads the malicious DICOMDIR
fs = FileSet("malicious_dicom_dir/DICOMDIR")
 
# The library reads from the traversal path and writes to the output
fs.copy("output_folder/")

> [!NOTE] > The specific operation invoked by the victim dictates the final impact. While copy() results in arbitrary file read, a combination of remove() and write(use_existing=True) can lead to arbitrary file deletion or modification outside the intended directory structure.

Impact Assessment

The NVD assigned a CVSS v3.1 base score of 7.8 to CVE-2026-32711, represented by the vector CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H. The Attack Vector is classified as Local because the exploit is delivered via a file rather than an active network connection. User Interaction is required, as the victim must actively invoke the pydicom parsing logic on the malicious file.

The impact metrics for Confidentiality, Integrity, and Availability are all rated High. An attacker can achieve complete compromise of files accessible to the Python process. Reading sensitive configuration files degrades confidentiality, while overwriting or deleting critical system files impacts integrity and availability.

The Exploit Prediction Scoring System (EPSS) assigns a probability score of 0.00016, placing the vulnerability in the 3.29th percentile. This low score indicates a minimal historical likelihood of exploitation in the wild for this specific class of vulnerability in a specialized Python library. The vulnerability is not currently listed in the CISA Known Exploited Vulnerabilities (KEV) catalog.

Remediation and Mitigation

The maintainers of pydicom addressed the vulnerability in two separate release branches. Users operating on the modern 3.x branch must upgrade to version 3.0.2 to receive the security patch. For environments constrained to the 2.x branch, the fix was backported and released in version 2.4.5.

Organizations utilizing pydicom to process untrusted or externally sourced DICOM datasets should apply the updates immediately. In scenarios where immediate patching is prohibited by change management policies, defensive operations must be implemented. Processing untrusted datasets within tightly restricted sandbox environments or unprivileged containers reduces the impact of a successful path traversal.

System administrators should enforce the principle of least privilege on processes invoking pydicom. Ensuring the Python execution environment only possesses read and write access to dedicated processing directories prevents the traversal from reaching sensitive operating system files. Regular auditing of dependencies via software composition analysis tools will identify vulnerable instances of the library across the infrastructure.

Official Patches

pydicomGitHub Security Advisory GHSA-v856-2rf8-9f28
pydicompydicom v3.0.2 Release Notes

Fix Analysis (2)

Technical Appendix

CVSS Score
7.8/ 10
CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
EPSS Probability
0.02%
Top 97% most exploited

Affected Systems

pydicom

Affected Versions Detail

Product
Affected Versions
Fixed Version
pydicom
pydicom
>= 2.0.0-rc.1, <= 3.0.13.0.2
AttributeDetail
CWE IDCWE-22
Attack VectorLocal
CVSS Score7.8
EPSS Score0.00016
ImpactHigh (Confidentiality, Integrity, Availability)
Exploit StatusProof of Concept
CISA KEVFalse

MITRE ATT&CK Mapping

T1083File and Directory Discovery
Discovery
T1005Data from Local System
Collection
CWE-22
Path Traversal

Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal')

Vulnerability Timeline

Fix commits pushed to pydicom repository
2026-03-19
Official Security Advisory published
2026-03-20
Vulnerability published in NVD and CVE databases
2026-03-20

References & Sources

  • [1]Official CVE Record
  • [2]GitHub Security Advisory
  • [3]Fix Commit (Main)
  • [4]Fix Commit (v2.4.5 Backport)
  • [5]pydicom v3.0.2 Release Notes

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•about 5 hours ago•CVE-2026-54347
8.7

CVE-2026-54347: Stored Cross-Site Scripting in Froxlor DNS TXT Record Configuration

A critical stored Cross-Site Scripting (XSS) vulnerability was identified in Froxlor server administration software panel before version 2.3.8. Authenticated customers with DNS editor privileges can inject malicious JavaScript into DNS TXT records. Because the application processes these values via a raw formatting callback without context-aware HTML entity encoding, the payload executes in the security context of administrative users who view the affected domain's DNS zones.

Amit Schendel
Amit Schendel
3 views•6 min read
•about 6 hours ago•CVE-2026-54348
7.2

CVE-2026-54348: Second-Order SQL Injection in Froxlor API Layer

An authenticated administrator with privileges to manage admin accounts (such as change_serversettings) can execute arbitrary SQL commands via a second-order SQL injection vulnerability. The flaw resides in Froxlor's administrative API endpoints, specifically during the handling of IP address mapping parameters which are stored as serialized arrays and later interpolated without sanitization into active database queries. This vulnerability allows high-privileged administrative attackers to compromise the database. By injecting a payload into administrative profile metadata, an attacker can extract sensitive credentials, manipulate backend settings, or potentially disrupt database integrity. The vulnerability affects all versions of Froxlor prior to 2.3.8.

Amit Schendel
Amit Schendel
3 views•6 min read
•about 7 hours ago•CVE-2026-54543
5.4

CVE-2026-54543: DNS Resource Record (RR) Injection in Froxlor DomainZones API

CVE-2026-54543 is a DNS Resource Record (RR) Injection vulnerability in Froxlor, an open-source server administration control panel. Prior to version 2.3.8, the DomainZones.add API command failed to perform strict sanitization and validation on the user-controlled record (label) and type parameters before serializing them into BIND-compatible zone files. An authenticated customer with DNS zone management permissions can inject control characters, breaking out of the original record context to define unauthorized resource records within managed zones.

Amit Schendel
Amit Schendel
4 views•7 min read
•about 7 hours ago•CVE-2026-42533
9.2

CVE-2026-42533: NGINX Map Directive and Regex Matching Pre-Auth Heap Buffer Overflow & Info Leak

CVE-2026-42533 is a critical security vulnerability discovered in NGINX Open Source, NGINX Plus, NGINX Ingress Controller, and related products, referred to as the 'Two-Pass Capture-Clobbering' bug. The flaw is situated within NGINX's internal evaluation engine when handling complex variables, exposing a heap-based buffer overflow and information leak when a configuration chains regular expression-based map directives with numbered capture groups. An unauthenticated remote attacker can exploit this weakness by transmitting crafted HTTP requests to trigger remote code execution or defeat ASLR.

Alon Barad
Alon Barad
7 views•7 min read
•about 8 hours ago•CVE-2026-55593
6.5

CVE-2026-55593: Persistent Administrative Hijacking via Cross-Site Request Forgery in Froxlor Ajax Router

Froxlor prior to version 2.3.8 contains a high-severity architectural flaw where the standalone lib/ajax.php entry point bypasses the centralized request validation in lib/init.php. Unauthenticated remote attackers can leverage Cross-Site Request Forgery (CSRF) to induce authenticated administrators to submit forged requests that modify API key whitelists and expiration dates, potentially yielding persistent, out-of-band administrative control.

Amit Schendel
Amit Schendel
6 views•8 min read
•about 9 hours ago•CVE-2026-62988
9.0

CVE-2026-62988: Multi-Factor Authentication and Credential Bypass in Froxlor API

An insecure data retrieval flaw in the Froxlor server administration panel API allows authenticated remote attackers to retrieve unredacted bcrypt password hashes and Base32-encoded Time-Based One-Time Password (TOTP) seeds. Affected endpoints include several 'get' and 'listing' handlers for customers, administrators, and FTP accounts. Utilizing these leaked parameters, attackers can crack the password hashes offline and concurrently generate valid second-factor authentication codes to completely bypass access controls.

Amit Schendel
Amit Schendel
8 views•6 min read