🛡️ CVE-2026-44972 — guarddog

🟡 CVSS 5.0 — Medium ✅ No Known Exploit CWE-116 NVD
5.0
CVSS Score
0 Low4 Medium7 High9 Critical10

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-392
  • guarddog/reporters/human_readable.py:36-42
  • guarddog/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

github.com (Web)
nvd.nist.gov (Advisory)
github.com (Package)

Details

Severity Medium
CVSS Score 5.0
CVSS Vector CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N
CWE CWE-116
Public Exploit ✅ No
Source NVD
Published 2026-05-11
Updated 2026-08-12
Modified 2026-07-13
Fix URL N/A

Affected Packages

Software From version Fixed in
guarddog 2.6.0
unknown

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.