CVE-2026-123369: compose-lint command injection in GitHub Actions and Azure Pipelines output

CVE-2026-123369 · Severity: medium · CVSS 4.3 · Published 2026-11-09

compose-lint is a Docker Compose security linter that reports configuration issues in CI/CD pipelines. Prior to version 0.31.0, the tool fails to neutralize special workflow command syntax when printing attacker-controlled text from Compose files, allowing attackers to forge false annotations, hide logs, mask text, or trigger commands in GitHub Actions and Azure Pipelines workflows reviewing pull requests.

Technologies: tmatens/compose-lint (GitHub Actions), compose-lint (PyPI), Tmatens Compose-Lint. Vendors: GitHub Actions, PyPI, Tmatens.

Quick answers

Is CVE-2026-123369 exploited in the wild?
No. Junglewise Threat Intelligence has no report of CVE-2026-123369 being exploited in the wild.
How severe is CVE-2026-123369?
Medium severity, with a CVSS score of 4.3, published 9 November 2026.
Which products and versions are affected?
tmatens/compose-lint (GitHub Actions) >= 0.2.0, <= 0.30.0, ECOSYSTEM:introduced=0.2.0,fixed=0.31.0|GIT:introduced=60c091c7cc8f86c6b0c5954031097364fea0a201,fixed=a6a7a76736de1c72abfa96c41ff8af556ffdc55f; compose-lint (PyPI) <= 0.30.0, ECOSYSTEM:introduced=0,fixed=0.31.0; Tmatens Compose-Lint prior to 0.31.0.
Is there a fix for CVE-2026-123369?
Yes. tmatens/compose-lint (GitHub Actions): upgrade to 0.31.0 or later; compose-lint (PyPI): upgrade to 0.31.0 or later. Until then: The fix involves bracketing compose-lint output with a random stop-commands token (GitHub's documented control for printing untrusted text) and escaping both `##[` and line-leading `::` sequences as visible Unicode escapes to prevent workflow command interpretation.</anigation> <parameter name="timeline">[{"kind":"disclosed","at":"2026-11-09"},{"kind":"patched","at":"2026-09-26"}] Junglewise finds every place you run it, drafts the upgrade and applies it once you approve.
How is CVE-2026-123369 attacked?
It is attacked over the network, in a software library.
Am I affected by CVE-2026-123369?
Check whether you run tmatens/compose-lint (GitHub Actions), compose-lint (PyPI) or Tmatens Compose-Lint at an affected version. Junglewise does that check for you around the clock: connect your code, cloud and domains, and it matches new vulnerabilities like this one against what you actually run and tells you when one reaches you.

How to fix

  • tmatens/compose-lint (GitHub Actions): upgrade to 0.31.0 or later
  • compose-lint (PyPI): upgrade to 0.31.0 or later
    pip install "compose-lint>=0.31.0"

The fix involves bracketing compose-lint output with a random stop-commands token (GitHub's documented control for printing untrusted text) and escaping both `##[` and line-leading `::` sequences as visible Unicode escapes to prevent workflow command interpretation.</anigation> <parameter name="timeline">[{"kind":"disclosed","at":"2026-11-09"},{"kind":"patched","at":"2026-09-26"}]

Technical details

The vulnerability is a workflow command injection flaw in which attacker-controlled data from Compose files (service names, environment keys, file lines) is printed without sanitization, allowing GitHub Actions `##[cmd]` sequences anywhere in a line and `::cmd::` at the start of a line to be interpreted as runner commands. An attacker controlling a Compose file in a pull request can exploit this to manipulate CI workflow behavior and output during review.

Affected products

  • tmatens compose-lint prior to 0.31.0

Identifiers

  • CVE-2026-123369
  • GHSA-6f4g-xm8v-pgv6

References

This page as Markdown. Free to reuse under CC BY 4.0 with a link back.