{"id":"CVE-2026-123369","aliases":["GHSA-6f4g-xm8v-pgv6"],"title":"compose-lint: Compose file text can issue GitHub Actions workflow commands through the compose-lint Action","titleSource":"GitHub_M","descriptionSource":"OSV","declaredSeverity":"MODERATE","description":"### Impact\n\nThe 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:\n\n- create fake error or warning annotations on the pull request (`##[error]`, `##[warning]`)\n- fold the rest of the log, including the real verdict, out of sight (`##[group]`)\n- blank out chosen strings for the rest of the log (`##[add-mask]`)\n\nGitHub 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.\n\nThe 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.\n\nFound during an internal pre-1.0 security review.\n\n### Patches\n\nFixed 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.\n\n### Workarounds\n\n- In your own workflow, wrap the compose-lint step in `::stop-commands::<random token>` and `::<random token>::`.\n- Use `--format json` or `--format sarif` rather than the text report when linting untrusted pull requests.\n\n### Reproduction\n\n```yaml\nservices:\n  web:\n    image: \"nginx:1.25\"\n    environment:\n      \"##[error]DB_PASSWORD\": placeholder\n  \"##[group]svc\":\n    image: \"nginx:1.25\"\n    privileged: true\n```\n\nRun through the Action, this produces a fake error annotation and folds the remaining log lines, including the FAIL verdict, into a collapsed group.","severity":"medium","score":5.3,"published":"2026-11-09T17:32:25.031Z","modified":"2026-11-11T02:57:10.295Z","withdrawn":false,"knownExploited":false,"affected":[{"ecosystem":"GitHub Actions","name":"tmatens/compose-lint","sources":[{"name":"OSV · GHSA-6f4g-xm8v-pgv6","url":"https://osv.dev/vulnerability/GHSA-6f4g-xm8v-pgv6"}],"ranges":[{"events":[{"introduced":"0.2.0"},{"fixed":"0.31.0"}],"type":"ECOSYSTEM"},{"events":[{"introduced":"60c091c7cc8f86c6b0c5954031097364fea0a201"},{"fixed":"a6a7a76736de1c72abfa96c41ff8af556ffdc55f"}],"type":"GIT","repo":"https://github.com/tmatens/compose-lint"}],"versions":["v0.30.0","v0.29.0","v0.28.0","v0.27.0","v0.26.0","v0.25.0","v0.24.0","v0.23.0","v0.22.0","v0.21.0","v0.20.0","v0.19.0","v0.18.0","v0.17.0","v0.16.0","v0.15.2","v0.15.1","v0.15.0","v0.14.1","v0.14.0","v0.13.0","v0.12.2","v0.12.1","v0.12.0","v0.11.0","v0.10.0","v0.9.0","v0.8.0","v0.7.1","v0.7.0","v0.6.0","v0.5.2","v0.5.1","v0.5.0","v0.4.1","v0.4.0","v0.3.7","v0.3.6","v0.3.4","v0.3.3","v0.3.2","v0.3.1","v0.3.0","v0.2.0"],"fixed":["0.31.0","a6a7a76736de1c72abfa96c41ff8af556ffdc55f"]},{"ecosystem":"PyPI","name":"compose-lint","sources":[{"name":"OSV · GHSA-6f4g-xm8v-pgv6","url":"https://osv.dev/vulnerability/GHSA-6f4g-xm8v-pgv6"}],"ranges":[{"events":[{"introduced":"0"},{"fixed":"0.31.0"}],"type":"ECOSYSTEM"}],"versions":["0.10.0","0.11.0","0.12.0","0.12.1","0.12.2","0.13.0","0.14.0","0.14.1","0.15.0","0.15.1","0.15.2","0.16.0","0.17.0","0.18.0","0.19.0","0.2.0","0.20.0","0.21.0","0.22.0","0.23.0","0.24.0","0.25.0","0.26.0","0.27.0","0.28.0","0.29.0","0.3.0","0.3.2","0.3.3","0.3.4","0.3.5","0.3.6","0.3.7","0.30.0","0.4.0","0.4.1","0.5.0","0.5.1","0.5.2","0.6.0","0.7.0","0.7.1","0.8.0","0.9.0"],"fixed":["0.31.0"]}],"sourceAffected":[],"references":["https://github.com/tmatens/compose-lint/security/advisories/GHSA-6f4g-xm8v-pgv6","https://github.com/tmatens/compose-lint/pull/918","https://github.com/tmatens/compose-lint/commit/672bd11145621f787c295fb11f3a859cdec1b38d","https://github.com/tmatens/compose-lint/releases/tag/v0.31.0","https://nvd.nist.gov/vuln/detail/CVE-2026-123369","https://github.com/tmatens/compose-lint"],"sources":[{"name":"CVE","id":"CVE-2026-123369","modified":"2026-11-09T22:55:25.407Z","url":"https://www.cve.org/CVERecord?id=CVE-2026-123369"},{"name":"OSV","id":"GHSA-6f4g-xm8v-pgv6","modified":"2026-11-11T02:57:10.295103665Z","url":"https://osv.dev/vulnerability/GHSA-6f4g-xm8v-pgv6"}],"assessments":[{"source":"GitHub_M","vector":"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","score":5.3},{"source":"OSV","vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:L/A:N","score":4.3},{"source":"OSV","vector":"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:X","score":5.3}],"cve":{"records":[{"id":"CVE-2026-123369","source":"GitHub_M","state":"PUBLISHED","reasons":[],"replacements":[],"disputed":false,"unsupportedWhenAssigned":false,"reserved":"2026-11-05T20:43:10.420Z","published":"2026-11-09T17:32:25.031Z","modified":"2026-11-09T22:55:25.407Z"}],"publishers":[{"name":"GitHub_M","role":"CNA","organizationId":"a0819718-46f1-4df5-94e2-005712e83aaa","modified":"2026-11-09T17:32:25.031Z"},{"name":"CISA-ADP","role":"ADP","organizationId":"134c704f-9b21-4f2e-91b3-4a467353bcc0","modified":"2026-11-09T22:55:25.407Z"}],"references":[{"url":"https://github.com/tmatens/compose-lint/security/advisories/GHSA-6f4g-xm8v-pgv6","tags":["x_refsource_CONFIRM"],"source":"GitHub_M"},{"url":"https://github.com/tmatens/compose-lint/pull/918","tags":["x_refsource_MISC"],"source":"GitHub_M"},{"url":"https://github.com/tmatens/compose-lint/commit/672bd11145621f787c295fb11f3a859cdec1b38d","tags":["x_refsource_MISC"],"source":"GitHub_M"},{"url":"https://github.com/tmatens/compose-lint/releases/tag/v0.31.0","tags":["x_refsource_MISC"],"source":"GitHub_M"}],"weaknesses":[{"id":"CWE-117","description":"CWE-117: Improper Output Neutralization for Logs","source":"GitHub_M"},{"id":"CWE-150","description":"CWE-150: Improper Neutralization of Escape, Meta, or Control Sequences","source":"GitHub_M"}],"applicability":[],"prioritization":[{"source":"CISA-ADP","type":"SSVC","role":"CISA Coordinator","timestamp":"2026-11-09T22:52:06.368275Z","decisions":[{"name":"Exploitation","value":"none"},{"name":"Automatable","value":"no"},{"name":"Technical Impact","value":"partial"}]}]},"products":[{"vendor":"tmatens","name":"compose-lint","platforms":[],"versions":[{"version":"< 0.31.0","status":"affected"}],"cpes":[],"source":"GitHub_M","url":"https://www.cve.org/CVERecord?id=CVE-2026-123369"}],"remediation":[],"observedAt":"2026-11-11T08:15:09.446Z","kev":{"status":"not-listed","checkedAt":"2026-11-15T03:00:33.317Z"},"coverage":[{"source":"NVD","status":"available","checkedAt":"2026-11-09T18:50:32.337Z","attemptedAt":"2026-11-09T18:50:32.337Z"},{"source":"GHSA","status":"no-result","checkedAt":"2026-11-09T18:50:31.763Z","attemptedAt":"2026-11-09T18:50:31.763Z"},{"source":"EUVD","status":"available","checkedAt":"2026-11-09T18:50:32.337Z","attemptedAt":"2026-11-09T18:50:32.337Z"},{"source":"EPSS","status":"no-result","checkedAt":"2026-11-09T18:50:31.468Z","attemptedAt":"2026-11-09T18:50:31.468Z"}],"evidence":[{"source":"ENISA EUVD","id":"EUVD-2026-120126","url":"https://euvd.enisa.europa.eu/vulnerability/EUVD-2026-120126","modified":"Nov 9, 2026, 5:32:25 PM","score":5.3,"vector":"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","checkedAt":"2026-11-09T18:50:32.337Z"},{"source":"NVD","id":"CVE-2026-123369","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-123369","modified":"2026-11-09T18:17:25.843","score":5.3,"vector":"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:X","checkedAt":"2026-11-09T18:50:32.337Z"}],"aiSummary":{"text":"Compose-lint versions before 0.31.0 are affected by a vulnerability that allows a Compose file to issue GitHub Actions workflow commands, potentially creating fake error or warning annotations or hiding log lines. The exit code and pass/fail result are not affected.","model":"@cf/meta/llama-3.3-70b-instruct-fp8-fast","generatedAt":"2026-11-10T17:06:20.721Z","sources":[{"name":"CVE","url":"https://www.cve.org/CVERecord?id=CVE-2026-123369"},{"name":"OSV","url":"https://osv.dev/vulnerability/GHSA-6f4g-xm8v-pgv6"}]}}