Skip to main content

proot-distro EUVDEUVD-2026-50408

| CVE-2026-54574 HIGH
UNIX Symbolic Link (Symlink) Following (CWE-61)
2026-07-29 GitHub_M GHSA-9xq3-3fqg-4vg7
8.2
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Craft malicious rootfs tarball or Docker layer
  2. Delivery
    Distribute and lure user to install it
  3. Exploit
    proot-distro install plants absolute-path symlink from linkname
  4. Execution
    Follow-up member written through symlink
  5. Impact
    Arbitrary file written onto host filesystem

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V5 - File Handling UNIX symlink resolution
Exploitation Conditions

Requires the victim to install/reset/restore an attacker-supplied malicious archive: a plain rootfs tarball (via _extract_plain_tar in commands/install.py) or a Docker/OCI layer (via _apply_layer in helpers/docker.py) containing a symlink member whose linkname is an absolute host path (e.g. /data/data/com.termux/files/home) or a traversal target, immediately followed by a regular-file member whose path routes through that planted symlink name. Limiting factors: exploitation is local and cannot be triggered remotely without user action - the user must actively obtain and run proot-distro install/reset/restore on the crafted archive (UI:R), matching AV:L in the CVSS vector; writes occur at the privilege of the Termux/host process (typically an unprivileged Android app sandbox), not root, and installing only trusted, checksum-verified rootfs images fully avoids the condition.

Impact

The supplied CVSS 3.1 vector (AV:L/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:N, base 8.2) is internally consistent with the description: exploitation is local (the victim must obtain and install an attacker-supplied archive), requires user interaction (running install/reset/restore on that archive), needs no prior privileges, and the scope change reflects the write escaping the container onto the host. This is a genuine integrity risk (arbitrary host file write) rather than a remote mass-exploitation issue - the AV:L/UI:R gating makes it a social-engineering / supply-chain-of-rootfs problem, not a wormable network bug, so raw 8.2 overstates internet-facing urgency while accurately reflecting host compromise potential once a user is tricked. No EPSS score, KEV entry, POC, or SSVC decision was provided, so automatability and exploitation-status signals are UNKNOWN and cannot be cross-referenced. The 'Information Disclosure' tag plus the hardlink-copy vector (copying host files into the rootfs) suggests confidentiality impact is plausible, supporting C:H, though the primary demonstrated impact is host file write (integrity).

Exploit ScenarioDerived

An attacker publishes a tampered distribution rootfs tarball (or Docker layer) on a mirror, forum, or shared link and convinces a Termux user to install it with proot-distro install. The archive first plants a symlink such as evil -> /data/data/com.termux/files/home, then ships a member written through evil/, causing proot-distro to write an attacker-controlled file (e.g. a shell profile or authorized_keys equivalent) onto the host home directory at Termux privilege - before the container is ever started. No public POC is currently identified, but the vulnerable code and technique are fully documented in the vendor advisory.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.1% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Jul 29, 2026

Arbitrary host file write in termux/proot-distro before 5.1.5 lets a malicious rootfs tarball or Docker layer plant an absolute-path symlink during proot-distro install, so a follow-up file member is written through that symlink onto the host filesystem - outside the container, before it is ever run. The install/reset paths (_extract_plain_tar) and the Docker layer path (_apply_layer) validated member names for '..' traversal but never validated symlink targets in member.linkname. No public exploit identified at time of analysis and it is not in CISA KEV, but the flaw is confirmed and fully described by the vendor GHSA advisory with vulnerable source shown.

RemediationAI

Vendor-released patch: upgrade to proot-distro 5.1.5 (pip install --upgrade proot-distro, or update via your Termux package source), which adds clamped symlink/hardlink resolution (_safe_resolve/_safe_dest) across the install, reset, restore, and build-engine extraction paths - see the fix commit https://github.com/termux/proot-distro/commit/a96d7a9667f38e45d812614852ee3915d1c0ae45, advisory https://github.com/termux/proot-distro/security/advisories/GHSA-9xq3-3fqg-4vg7, and release https://github.com/termux/proot-distro/releases/tag/v5.1.5. Until upgraded, the concrete compensating control is to only install rootfs tarballs and Docker/OCI images from trusted, integrity-verified sources (verify checksums/signatures) and avoid running proot-distro install, reset, or restore on archives from untrusted third parties; if you must inspect an unknown archive, extract it inside a disposable sandbox or unprivileged container first and audit for symlink members with absolute or traversal targets (e.g. tar -tvf listing link targets). The trade-off is that source-trust vetting is manual and does not protect against a compromised upstream mirror, so upgrading to 5.1.5 is strongly preferred over the workaround.

Affected VersionsENISA

proot-distro < 5.1.5

Affected Packages

pypi proot-distro fix: 5.1.5

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in pypi

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

proot-distro is a Termux/Android utility that installs and manages proot (unprivileged chroot-like) Linux distributions by unpacking rootfs tarballs and OCI/Docker image layers into a target directory. The root cause is CWE-61 (UNIX Symbolic Link Following): the extractor honored archive-controlled symlink targets verbatim via os.symlink(member.linkname, dest) with no clamp inside the destination root. The pre-existing guard only rejected '..'/'' components in the member name (rel_parts), leaving both absolute symlink targets and traversal via linkname unchecked. Because a symlink is materialized before a later regular-file member that references its name, Python's open() follows the planted symlink and writes outside rootfs_dir. The fix introduces helpers/tar_extract.py._safe_resolve/_safe_dest, which re-resolves each destination's parent through existing symlink components while clamping every hop inside the rootfs (re-rooting absolute targets to the guest '/'), and applies the same clamped resolution to hardlink source endpoints in restore.py and build_engine/copy_step.py.

Know when Docker gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (GitHub_M) PRIMARY 8.2 HIGH
AV:L/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:N
vuln.today AI 8.2 HIGH

Local because the victim must run install on an attacker-supplied archive (AV:L/UI:R), no prior privileges needed (PR:N), and the host-filesystem write escapes the container (S:C) yielding high confidentiality/integrity impact.

3.1 AV:L/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:N
4.0 AV:L/AC:L/AT:N/PR:N/UI:A/VC:H/VI:H/VA:N/SC:H/SI:H/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Local
Attack Complexity
Low
Privileges Required
None
User Interaction
Required
Scope
Changed
Confidentiality
High
Integrity
High
Availability
None

Lifecycle Timeline

2
Patch available
Jul 29, 2026 - 17:02 EUVD
CVE Published
Jul 29, 2026 - 16:32 cve.org
HIGH 8.2

DescriptionCVE.org

proot-distro is a utility for managing proot containers. Prior to version 5.1.5, proot-distro install extracted plain tarball root filesystems through _extract_plain_tar() in proot_distro/commands/install.py and Docker layers through _apply_layer() in proot_distro/helpers/docker.py without validating archive-controlled symlink targets in member.linkname, allowing a malicious archive to plant an absolute host-path symlink and write files through it onto the host filesystem. This issue is fixed in version 5.1.5.

Executive ViewAI

Why It Matters

A critical vulnerability in termux/proot-distro before version 5.1.5 allows arbitrary file writes to the host filesystem during container installation through malicious rootfs tarballs or Docker layers. Organizations deploying containerized workloads via proot-distro face potential complete system compromise if untrusted container images are installed, requiring immediate source validation and installation controls.

Business Impact: High
Compensating Controls

No vendor-released patch identified at time of analysis. Implement the following interim mitigations: (1) restrict proot-distro installations to organization-approved, digitally-signed container images only; (2) implement pre-extraction symlink target validation to reject members with absolute-path or traversal symlinks; (3) run proot-distro processes in restricted environments with mandatory filesystem access controls preventing writes outside designated container directories; (4) deploy endpoint detection and response (EDR) monitoring to alert on unexpected file writes to host system paths; (5) maintain detailed audit logs of all container installation attempts for forensic investigation.

Threat Intelligence Overview

EPSS Score
0.1%
Top 96% exploitable
Prevalence
Low
niche Termux/Android proot container utility, no enterprise footprint
Threat Intel
1
1 sources
Exploit
POC
Public exploit code exists
Social Media
1
Sightings
Data Quality
6 sources
Confidence: High

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity HIGH
CISA KEV No
Public POC Yes
EPSS 0.1%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
Poc
System Exposure· derived
Small
Automatable
No
Human Impact
High
Technical Impact
Total

Priority Score

61
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +41
PoC: +20
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

More in Docker

View all
CVE-2024-55964 CRITICAL POC
9.8 Mar 26

An issue was discovered in Appsmith before 1.52. Rated critical severity (CVSS 9.8), this vulnerability is remotely expl

CVE-2019-5736 HIGH POC
8.6 Feb 11

runc through version 1.0-rc6 (used in Docker before 18.09.2) contains a container escape vulnerability that allows attac

CVE-2023-32077 HIGH POC
7.5 Aug 24

Netmaker makes networks with WireGuard. Rated high severity (CVSS 7.5), this vulnerability is remotely exploitable, no a

CVE-2026-39987 CRITICAL POC
9.3 Apr 08

Unauthenticated remote code execution in Marimo ≤0.20.4 allows attackers to execute arbitrary system commands via the `/

CVE-2023-5815 HIGH POC
8.1 Nov 22

The News & Blog Designer Pack - WordPress Blog Plugin - (Blog Post Grid, Blog Post Slider, Blog Post Carousel, Blog Post

CVE-2026-66384 MEDIUM POC
5.3 Aug 12

Path traversal in JFrog Artifactory (CWE-22) enables an authenticated low-privilege user to write data outside the inten

CVE-2014-9357 CRITICAL
10.0 Dec 16

Docker 1.3.2 allows remote attackers to execute arbitrary code with root privileges via a crafted (1) image or (2) build

CVE-2026-52806 CRITICAL POC
9.9 Jun 23

Remote code execution in Gogs through 0.14.2 allows authenticated users (and unauthenticated attackers on default-config

CVE-2025-14707 HIGH POC
8.9 Dec 15

Unauthenticated remote command injection in SGWBOX N3 firmware 2.0.25 lets attackers execute arbitrary operating-system

CVE-2026-56274 HIGH POC
8.7 Jun 23

Remote code execution in Flowise before 3.1.2 allows any authenticated user (or API caller with chatflow view/update per

CVE-2026-34156 CRITICAL POC
9.9 Mar 30

Remote code execution in NocoBase Workflow Script Node (npm @nocobase/plugin-workflow-javascript) allows authenticated l

CVE-2019-15752 HIGH POC
7.8 Aug 28

Docker Desktop Community Edition before 2.1.0.1 allows local users to gain privileges by placing a Trojan horse docker-c

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy