# CVE-2026-125121: compose-lint workflow command injection via Unicode whitespace

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

CVE-2026-125121 · Severity: medium · CVSS 4 · Published 2026-11-10

compose-lint is a Docker Compose security linter used to validate container configurations before deployment. In version 0.31.0, untrusted Compose file content can inject GitHub Actions workflow commands, allowing an attacker to create fake error annotations, hide logs, or mask output within CI/CD pipelines. This affects users running the tool directly in CI (npm package, pre-commit, Docker image), though the official GitHub Action is protected.

Technologies: [compose-lint (PyPI)](https://junglewise.ai/threats/technologies/pypi-compose-lint), [Tmatens Compose-Lint](https://junglewise.ai/threats/technologies/tmatens-compose-lint). Vendors: [PyPI](https://junglewise.ai/threats/vendors/pypi), [Tmatens](https://junglewise.ai/threats/vendors/tmatens).

## Quick answers

**Is CVE-2026-125121 exploited in the wild?** No. Junglewise Threat Intelligence has no report of CVE-2026-125121 being exploited in the wild.

**How severe is CVE-2026-125121?** Medium severity, with a CVSS score of 4, published 10 November 2026.

**Which products and versions are affected?** compose-lint (PyPI) >= 0.31.0, < 0.32.0, ECOSYSTEM:introduced=0.31.0,fixed=0.32.0; Tmatens Compose-Lint 0.31.0 and earlier.

**Is there a fix for CVE-2026-125121?** Yes. compose-lint (PyPI): upgrade to 0.32.0 or later. Until then: Use --format json or --format sarif instead of the default text report when linting untrusted pull requests. Alternatively, wrap the compose-lint step with GitHub Actions stop-commands tokens to disable workflow command processing during output.</anigation>
<parameter name="timeline">[{"kind":"disclosed","at":"2026-09-27","note":"CVE-2026-123369 published to GitHub Advisory Database"},{"kind":"patched","at":"2026-09-27","note":"Fixed in version 0.31.0"},{"kind":"other","at":"2026-11-09","note":"CVE-2026-125121 assigned (separate reporting of related flaw)"},{"kind":"advisory","at":"2026-11-10","note":"Published to NVD"}] Junglewise finds every place you run it, drafts the upgrade and applies it once you approve.

**How is CVE-2026-125121 attacked?** It is attacked over the network, in a software library.

**Am I affected by CVE-2026-125121?** Check whether you run 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

- compose-lint (PyPI): upgrade to 0.32.0 or later

  ```sh
  pip install "compose-lint>=0.32.0"
  ```


Use --format json or --format sarif instead of the default text report when linting untrusted pull requests. Alternatively, wrap the compose-lint step with GitHub Actions stop-commands tokens to disable workflow command processing during output.</anigation>
<parameter name="timeline">[{"kind":"disclosed","at":"2026-09-27","note":"CVE-2026-123369 published to GitHub Advisory Database"},{"kind":"patched","at":"2026-09-27","note":"Fixed in version 0.31.0"},{"kind":"other","at":"2026-11-09","note":"CVE-2026-125121 assigned (separate reporting of related flaw)"},{"kind":"advisory","at":"2026-11-10","note":"Published to NVD"}]

## Technical details

The vulnerability is a command injection flaw in output escaping: compose-lint only escapes GitHub Actions command syntax (##[, ::) after ASCII spaces and tabs, but the GitHub runner strips all leading Unicode whitespace before parsing. An attacker can embed Unicode whitespace followed by :: or ##[ in Compose file values (service names, environment variables) to inject workflow commands into the text report, fix guidance, diff output, or stderr. Exploitation requires the tool to run in a CI environment that processes workflow commands and requires untrusted Compose file input; version 0.32.0 fixes the escaping logic.

## Affected products

- tmatens compose-lint 0.31.0 and earlier

## Identifiers

- CVE-2026-125121
- GHSA-r7j4-crjv-h467

## References

- [https://github.com/tmatens/compose-lint/commit/542e63126f795564a65c63887ea0dc558a500688](https://github.com/tmatens/compose-lint/commit/542e63126f795564a65c63887ea0dc558a500688)

## 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 information disclosure via incomplete .env remediation at finding limit](https://junglewise.ai/threats/cve-2026-123796-compose-lint-is-a-docker-compose-security-linter-that-identifies)
