CVE-2026-123369tmatens/compose-lint >= 0.2.0,
NVD
Vulnerability Summary
### Impact
The GitHub Actions runner treats certain text in a step's output as commands. The legacy form, `##[command]`, is recognized anywhere in a line. compose-lint's text report prints service names, environment keys and lines of the Compose file, and it does not neutralize `##[`. Inside the compose-lint Action, a Compose file from a pull request can therefore:
- create fake error or warning annotations on the pull request (`##[error]`, `##[warning]`)
- fold the rest of the log, including the real verdict, out of sight (`##[group]`)
- blank out chosen strings for the rest of the log (`##[add-mask]`)
GitHub has postponed removing the deprecated `set-output` log command, so the runner still honors it. A test run of the Action on a GitHub-hosted runner confirmed that a `::set-output` line from a Compose file is processed. Whether it can override the Action's own `sarif-written` output, which decides whether the SARIF upload step runs, has not been tested.
The exit code and the pass/fail result are not affected. Azure Pipelines parses the same `##[` syntax, so the pip package is listed for anyone printing the text report in other CI systems.
Found during an internal pre-1.0 security review.
### Patches
Fixed in 0.31.0. The Action stops the runner from processing workflow commands while compose-lint's output is printed, using a random `stop-commands` token. The text report also escapes `##[`, and `::` at the start of a line, in anything taken from the Compose file.
### Workarounds
- In your own workflow, wrap the compose-lint step in `::stop-commands::<random token>` and `::<random token>::`.
- Use `--format json` or `--format sarif` rather than the text report when linting untrusted pull requests.
### Reproduction
```yaml
services:
web:
image: "nginx:1.25"
environment:
"##[error]DB_PASSWORD": placeholder
"##[group]svc":
image: "nginx:1.25"
privileged: true
```
Run through the Action, this produces a fake error annotation and folds the remaining log lines, including the FAIL verdict, into a collapsed group.
The GitHub Actions runner treats certain text in a step's output as commands. The legacy form, `##[command]`, is recognized anywhere in a line. compose-lint's text report prints service names, environment keys and lines of the Compose file, and it does not neutralize `##[`. Inside the compose-lint Action, a Compose file from a pull request can therefore:
- create fake error or warning annotations on the pull request (`##[error]`, `##[warning]`)
- fold the rest of the log, including the real verdict, out of sight (`##[group]`)
- blank out chosen strings for the rest of the log (`##[add-mask]`)
GitHub has postponed removing the deprecated `set-output` log command, so the runner still honors it. A test run of the Action on a GitHub-hosted runner confirmed that a `::set-output` line from a Compose file is processed. Whether it can override the Action's own `sarif-written` output, which decides whether the SARIF upload step runs, has not been tested.
The exit code and the pass/fail result are not affected. Azure Pipelines parses the same `##[` syntax, so the pip package is listed for anyone printing the text report in other CI systems.
Found during an internal pre-1.0 security review.
### Patches
Fixed in 0.31.0. The Action stops the runner from processing workflow commands while compose-lint's output is printed, using a random `stop-commands` token. The text report also escapes `##[`, and `::` at the start of a line, in anything taken from the Compose file.
### Workarounds
- In your own workflow, wrap the compose-lint step in `::stop-commands::<random token>` and `::<random token>::`.
- Use `--format json` or `--format sarif` rather than the text report when linting untrusted pull requests.
### Reproduction
```yaml
services:
web:
image: "nginx:1.25"
environment:
"##[error]DB_PASSWORD": placeholder
"##[group]svc":
image: "nginx:1.25"
privileged: true
```
Run through the Action, this produces a fake error annotation and folds the remaining log lines, including the FAIL verdict, into a collapsed group.
CVSS v4.0 Base Metrics — Score 5.3
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:L/VA:N/SC:N/SI:L/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:XAttack VectorNetwork
Attack ComplexityLow
Attack RequirementsNone
Privileges RequiredNone
User InteractionPassive
Confidentiality (Vulnerable System)None
Integrity (Vulnerable System)Low
Availability (Vulnerable System)None
Confidentiality (Subsequent System)None
Integrity (Subsequent System)Low
Availability (Subsequent System)None
Show CVSS v3.x metrics (score 4.3)
CVSS v3.1 Base Metrics — Score 4.3
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:L/A:NAttack VectorNetwork
Attack ComplexityLow
Privileges RequiredNone
User InteractionRequired
ScopeUnchanged
ConfidentialityNone
IntegrityLow
AvailabilityNone
Affected & Patched Versions
- tmatens/compose-lint >= 0.2.0, <= 0.30.0
- compose-lint <= 0.30.0
No patched version published yet
Until a fix ships, reduce exposure:
- Restrict access to the affected service or interface to trusted networks.
- Disable the affected feature if you do not need it.
- Watch the vendor advisory for a firmware or software update.
What to do
Fix it during your normal patch cycle. No exploitation is confirmed yet.
- Check whether you run tmatens/compose-lint >= 0.2.0, and which version.
- No patched version is listed yet. Limit access to the affected service to trusted networks, and disable the feature if you can.
- Subscribe to the vendor advisory so you learn when a fix ships.
Timeline
- Nov 9, 2026Published
- Nov 10, 2026Record last modified
Score, severity and exploitation changes are tracked from the day Watchtower started logging them.
Get notified about new tmatens/compose-lint >= 0.2.0, CVEsYou are reading CVE-2026-123369. Get an email when KEV listings, exploits or new CVEs match your stack.
Set up CVE alertsExternal References
- Vendor Advisoryhttps://github.com/tmatens/compose-lint/security/advisories/GHSA-6f4g-xm8v-pgv6
- CVE Recordhttps://nvd.nist.gov/vuln/detail/CVE-2026-123369
- Patchhttps://github.com/tmatens/compose-lint/pull/918
- Patchhttps://github.com/tmatens/compose-lint/commit/672bd11145621f787c295fb11f3a859cdec1b38d
- Referencehttps://github.com/tmatens/compose-lint/releases/tag/v0.31.0
- Referencehttps://github.com/advisories/GHSA-6f4g-xm8v-pgv6
Data last checked: Nov 10, 2026 17:00 UTC