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

Source: https://junglewise.ai/threats/cve-2026-123369-compose-lint-is-a-docker-compose-security-linter-that-identifies  
Publisher: Junglewise Threat Intelligence, https://junglewise.ai/threats  
Published: 2026-11-09. Updated: 2026-11-09  
License: CC BY 4.0 with a link back

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)](https://junglewise.ai/threats/technologies/actions-tmatens-compose-lint), [compose-lint (PyPI)](https://junglewise.ai/threats/technologies/pypi-compose-lint), [Tmatens Compose-Lint](https://junglewise.ai/threats/technologies/tmatens-compose-lint). Vendors: [GitHub Actions](https://junglewise.ai/threats/vendors/actions), [PyPI](https://junglewise.ai/threats/vendors/pypi), [Tmatens](https://junglewise.ai/threats/vendors/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

  ```sh
  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

- [https://github.com/tmatens/compose-lint/commit/672bd11145621f787c295fb11f3a859cdec1b38d](https://github.com/tmatens/compose-lint/commit/672bd11145621f787c295fb11f3a859cdec1b38d)
- [https://github.com/tmatens/compose-lint/pull/918](https://github.com/tmatens/compose-lint/pull/918)

## Related threats

- [compose-lint GitHub Action workflow command injection via symlink path](https://junglewise.ai/threats/cve-2026-125125-compose-lint-is-a-docker-compose-security-linter-that-identifies)
- [compose-lint insufficient CI command sanitization](https://junglewise.ai/threats/cve-2026-125124-compose-lint-is-a-docker-compose-security-linter-that-identifies)
- [compose-lint command injection via unsanitized stderr output](https://junglewise.ai/threats/cve-2026-125123-compose-lint-is-a-docker-compose-security-linter-that-identifies)
- [compose-lint CI command injection in JSON and SARIF output](https://junglewise.ai/threats/cve-2026-125122-compose-lint-is-a-docker-compose-security-linter-that-identifies)
- [compose-lint workflow command injection via Unicode whitespace](https://junglewise.ai/threats/cve-2026-125121-compose-lint-is-a-docker-compose-security-linter-that-identifies)
