Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
ReconVictim clones malicious repository
-
DeliverySymlink staged in worktree
-
ExploitVictim stash push/checkout/pop sequence
-
Installstash.pop() follows symlink past validate_path
-
C2Payload written to .git/hooks/post-checkout
-
ExecuteNext checkout runs hook as victim
-
ImpactArbitrary code execution
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V5 - File Handling Path canonicalization, traversal prevention
MITRE ATT&CK
2 techniques across 2 tactics: Discovery, Collection The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires the victim to use dulwich (>=0.22.5, <=1.2.7) to clone or operate on an attacker-crafted repository containing an intermediate directory symlink pointing outside the worktree (e.g. link → ../../.git/hooks) plus a stashed file under that symlinked path. The victim must then perform the specific stash workflow - checkout a branch, stash.push(), checkout back to the branch holding the symlink, and stash.pop() - because validate_path() only blocks INVALID_DOTNAMES and performs no filesystem symlink detection, and build_file_from_blob() has no O_NOFOLLOW protection. LIMITING FACTORS: local access/operation only (AV:L), mandatory multi-step user interaction (UI:P), the attacker cannot act without the victim processing an untrusted repository, and RCE is only realized when a subsequent git checkout triggers the planted post-checkout hook. Highest exposure is developer workstations and CI/automation that ingest untrusted repositories. |
| Impact | This is a genuine but conditional code-execution risk, not a drive-by remote compromise. The input provides only a CVSS 4.0 vector (CVSS:4.0/AV:L/AC:L/AT:P/PR:N/UI:P, score 7.3) and no CVSS 3.1 vector. Key signals: attack vector is LOCAL (AV:L), there is an attack requirement (AT:P) and required user interaction (UI:P), while vulnerable-system impact is HIGH across confidentiality, integrity and availability (VC:H/VI:H/VA:H) - consistent with arbitrary file write leading to RCE via a planted .git/hooks/post-checkout. PR:N technically means no pre-existing privileges on the victim's machine, but exploitation is gated by the victim voluntarily cloning an attacker-controlled repository and performing a specific stash push/checkout/pop sequence, so 'unauthenticated' here does not mean 'unattended remote.' No EPSS score, no CISA KEV entry, and no explicit POC/exploit-code flag were supplied, so there is no public exploitation-probability signal; the GHSA/VulnCheck advisories describe a detailed, reproducible attack recipe but no weaponized exploit artifact is referenced. Net: real priority for developer/CI environments that process untrusted repositories with dulwich, but the local vector plus multi-step user interaction keeps real-world mass-exploitation risk well below what the 7.3 and 'RCE' tag might suggest in isolation. |
| Exploit ScenarioDerived | An attacker publishes a malicious Git repository whose branches contain an intermediate directory symlink (e.g. link → ../../.git/hooks) and a stashed payload file at link/post-checkout. When a victim using dulwich clones the repo and runs the specific stash push/checkout/pop sequence, stash.pop() follows the symlink and writes the payload to .git/hooks/post-checkout, which executes on the next checkout. No weaponized public exploit is referenced in the input, but the advisory provides a full step-by-step reproduction; attack complexity is raised by the required local AV:L and victim-driven stash operations (AT:P/UI:P). |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 21, 2026
Arbitrary file write leading to potential code execution affects Dulwich 0.22.5 through 1.2.7 when a victim pops a stash in an attacker-crafted repository, because intermediate directory symlinks are followed and can redirect writes into .git/hooks/post-checkout. Exploitation requires local operation of the affected library plus a multi-step stash workflow and a subsequent checkout, so this is a conditional code-execution risk rather than a drive-by remote compromise; no public exploit code was identified at time of analysis. Dulwich 1.2.8 contains the vendor fix.
RemediationAI
Vendor-released patch: 1.2.8. Upgrade Dulwich to 1.2.8 or later; the fix is referenced by commit 40a542cb02f9ac39a9eeac1193472903098698f9 and the GitHub advisory at https://github.com/jelmer/dulwich/security/advisories/GHSA-cm62-gvxx-vmxx. If upgrade cannot be applied immediately, avoid stash.pop() on repositories from untrusted sources and inspect clone worktrees for intermediate directory symlinks (for example with find . -type l) before stash operations. Restrict write access to .git/hooks or run repository operations in a sandbox/container confined to the worktree; trade-offs are that disabling or making hook directories read-only breaks legitimate Git hooks, and sandboxing may interfere with build or tooling integrations.
Affected VersionsENISA
Affected Packages
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
Dulwich is a pure-Python implementation of Git. In stash.py pop(), the code checks parent directory existence with os.path.exists(), which follows symlinks; validate_path() only screens path component names against INVALID_DOTNAMES and does not inspect the filesystem, and build_file_from_blob() lacks O_NOFOLLOW protection. This is CWE-22 path traversal: an intermediate symlink such as link -> ../../.git/hooks causes a stashed path like link/post-checkout to be written outside the worktree. The reported CPE cpe:2.3:a:jelmer:dulwich:*:*:*:*:*:*:*:* identifies the affected package; the advisory documents branches main (symlink) and feature (payload), enabling post-checkout hook execution on the next checkout.
Know when Dulwich 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
CVSS:4.0/AV:L/AC:L/AT:P/PR:N/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
Local, victim-driven stash workflow against an untrusted repo justifies AV:L and AC:H with UI:R; no victim privileges needed (PR:N); symlink-based arbitrary write yields full C/I/A via hook RCE.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
Lifecycle Timeline
2DescriptionCVE.org
Dulwich from 0.22.5 before 1.2.8 contains a path traversal vulnerability in stash.py pop() that allows attackers to write arbitrary files outside the worktree through intermediate directory symlinks. Attackers can craft a malicious repository whose popped stash writes a payload into .git/hooks/post-checkout, achieving code execution on the next checkout.
Blast Radius
ecosystem impact- 1 pypi packages depend on dulwich (1 direct, 0 indirect)
Ecosystem-wide dependent count for version 0.22.5.
Technical POC Analysis
CWE-22 (Path Traversal), with the advisory also tagging CWE-59 (Link Following).
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
A high-severity flaw (CVE-2026-114098) in the Dulwich Git library, versions 0.22.5 through 1.2.7, allows a maliciously crafted repository to redirect file writes during a stash-pop and subsequent checkout, potentially leading to code execution. Because Dulwich is embedded in Python-based developer tooling and automation, exposure concentrates on engineering workstations and CI runners rather than customer-facing systems, making this a developer-environment and supply-chain integrity risk. Leadership should care because a single crafted repository handled by an engineer or pipeline could compromise build trust with limited interaction.
Apply vendor patch (upgrade to Dulwich 1.2.8); until upgraded, avoid popping stashes from untrusted repositories and run affected Git operations in isolated, disposable environments without access to credentials or active hooks.
Threat Intelligence Overview
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Path traversal exploits occur when applications use user-controlled input to construct file system paths without proper validation.
Remote Code Execution represents the critical moment when an attacker successfully runs arbitrary code on a target system without physical access.
Related Vulnerabilities in Dulwich Path Traversal and DoS Vulnerabilities
View all 5The build_index_from_tree function in index.py in Dulwich before 0.9.9 allows remote attackers to execute arbitrary code
Arbitrary code execution in Dulwich (pure-Python Git implementation) versions 0.23.2 through 1.2.4 allows a malicious up
Dulwich before 0.18.5, when an SSH subprocess is used, allows remote attackers to execute arbitrary commands via an ssh
Buffer overflow in the C implementation of the apply_delta function in _pack.c in Dulwich before 0.9.9 allows remote att
EUVD-2026-106901
GHSA-mw9m-763w-f8m9
NVD
CVE.org
EPSS
Exploit-DB