🛡️ CVE-2026-22871 — guarddog
Description
GuardDog Path Traversal Vulnerability Leads to Arbitrary File Overwrite and RCE
Summary
A path traversal vulnerability exists in GuardDog's safe_extract() function that allows malicious PyPI packages to write arbitrary files outside the intended extraction directory, leading to Arbitrary File Overwrite and Remote Code Execution on systems running GuardDog.
CWE: CWE-22 (Improper Limitation of a Pathname to a Restricted Directory)
Details
Vulnerable Code
File: guarddog/utils/archives.py
```python
elif zipfile.is_zipfile(source_archive):
with zipfile.ZipFile(source_archive, "r") as zip:
for file in zip.namelist():
# Note: zip.extract cleans up any malicious file name
# such as directory traversal attempts This is not the
# case of zipfile.extractall
zip.extract(file, path=os.path.join(target_directory, file)) # ❌ VULNERABLE
```
Root Cause
The comment about zip.extract() fooled me at first :) then I noticed the os.path.join() call.
The vulnerability stems from incorrect usage of Python's zipfile.ZipFile.extract() API:
- The
pathparameter should be the target directory, not a full file path extract()automatically appends the member name to the path- By passing
os.path.join(target_directory, file), GuardDog causes the filename to be appended twice - This breaks zipfile's built-in path traversal sanitization
Attack Vector
1. Attacker creates malicious wheel with path traversal filenames
2. Uploads to PyPI or distributes directly
3. Package scan: guarddog pypi scan malicious-pkg
4. GuardDog downloads and extracts the package
5. Malicious files written to arbitrary locations
6. Code execution could be achieved
Impact
Impact depends on how GuardDog is running and under which environment.
Critical Scenarios
1. Immediate Code Execution
- Write to
~/.bashrc→ executes on next shell - Write to
~/.profile→ executes on login
2. Persistent Backdoors
- Write to
~/.ssh/authorized_keys→ SSH access - Write to
/etc/cron.d/malicious→ scheduled execution (if root) - Write to systemd user services → persistent execution
and more...
Credits
Reported by: Charbel (dwbruijn)
How this vulnerability can be exploited
This issue can be reached over the network, attack complexity is low, an attacker needs no privileges on the target. A user must be tricked into taking some action. Rated impact: confidentiality high, integrity high, availability high.
Weakness class
CVE-2026-22871 is classified as CWE-22: Path Traversal. A file path built from user input is not confined to the intended directory, letting an attacker reach files elsewhere on the filesystem.
Affected software
CVE-2026-22871 is recorded against 1 package.
- guarddog (fixed in 2.7.1)
Timeline and source
Published on 13 January 2026 and last revised on 7 July 2026. No public exploit is currently recorded for this entry. A vendor advisory or fix has been published. Record sourced from OSV.
References
github.com (Web)
nvd.nist.gov (Advisory)
github.com (Web)
github.com (Package)
Details
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
Affected Packages
| Software | From version | Fixed in |
|---|---|---|
| guarddog | — | 2.7.1 |
References
Similar Threats
- High CVE-2026-44971
- Medium CVE-2026-44972
- High CVE-2026-22870
- Low CVE-2022-23530
- Low CVE-2022-23531
More CVE 2026 advisories
Browse all of CVE 2026 in the advisory index.
Site Security Check
Is guarddog part of your stack?
CVE-2026-22871 is rated CVSS 8.0 High. BotEraser scans your installation against known CVE records and tells you whether this vulnerability applies to the versions you actually run.
Scan My Site Free →No credit card required · Results in minutes
ⓘ Data Notice: The information presented above has been compiled from publicly available internet sources. Boteraser aggregates this data solely for informational purposes and does not independently classify, evaluate, or endorse any findings about the vulnerabilities listed. The accuracy and completeness of this information is the sole responsibility of the original publishers. Boteraser and its operators accept no liability for any decisions made based on this data.