🛡️ CVE-2026-44972 — guarddog
Description
GuardDog: Unsanitized human-readable scan output allows terminal escape injection from malicious package content
# Summary
GuardDog includes attacker-controlled filenames, file locations, messages, and code snippets in its default human-readable output without escaping terminal control characters. A malicious package can therefore inject ANSI or OSC escape sequences into analyst terminals or CI logs.
# Description
The finding formatter stores file paths and snippets from scanned content:
```python
location = file_path + ":" + str(start_line)
finding = {
"location": location,
"code": code,
"message": result["extra"]["message"],
}
```
The human-readable reporter later prints these values directly:
```python
" * " + finding["message"] + " at " + finding["location"] + "\n " + _format_code_line_for_output(finding["code"])
```
No escaping is applied for control characters such as \x1b. A malicious package can therefore ship a filename like:
```text
evil\x1b[2J.py
```
or matched source lines containing terminal escapes, which survive into the final CLI output.
# Reproduction summary
1. Create a file whose name contains \x1b[2J.
2. Feed a semgrep-style result referencing that file into Analyzer._format_semgrep_response().
3. Render the result with HumanReadableReporter.print_scan_results().
4. The output string contains the raw escape bytes, which a terminal may interpret.
# Key code paths
guarddog/analyzer/analyzer.py:377-392guarddog/reporters/human_readable.py:36-42guarddog/reporters/human_readable.py:84-91
# Practical impact
This can be used to:
- clear or rewrite analyst terminal output
- inject misleading or spoofed log content in CI
- emit clickable OSC 8 hyperlinks or title changes in compatible terminals
# Prior public disclosure check
As of 2026-03-18, no matching public GitHub advisory, CVE, or public repo issue was found for this specific bug.
# Suggested fix
Escape or strip terminal control characters before rendering any attacker-controlled value in human-readable output. This should cover package names, file paths, messages, and code snippets.
How this vulnerability can be exploited
This issue can be reached with local access to the system, attack complexity is low, an attacker needs no privileges on the target. A user must be tricked into taking some action. The scope is changed, meaning a successful attack can affect components beyond the vulnerable one. Rated impact: confidentiality low, integrity low, availability none.
Weakness class
CVE-2026-44972 is classified as CWE-116: Improper Encoding or Escaping of Output. Output is emitted without encoding it for the context it lands in, so data is interpreted as markup or code.
Affected software
CVE-2026-44972 is recorded against 2 packages.
- guarddog (from 2.6.0)
- unknown
Timeline and source
Published on 11 May 2026 and last revised on 13 July 2026. No public exploit is currently recorded for this entry. Record sourced from NVD.
References
Details
CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N
Affected Packages
| Software | From version | Fixed in |
|---|---|---|
| guarddog | 2.6.0 | — |
| unknown | — | — |
References
Similar Threats
- High CVE-2026-44971
- High CVE-2026-22870
- High CVE-2026-22871
- Low CVE-2022-23530
- Low CVE-2022-23531
More CVE 2026 advisories
Browse all of CVE 2026 in the advisory index.
Vulnerability Monitoring
Track new vulnerabilities in guarddog
CVE-2026-44972 is rated CVSS 5.0 Medium. BotEraser monitors your WordPress installation and notifies you when software you use appears in our vulnerability database.
Set Up Free Alerts →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.