{"id":"CVE-2026-125123","kind":"vulnerability","aliases":["CVE-2026-125123"],"related":[],"title":"compose-lint: unsanitized stderr lets pull request paths inject GitHub Actions commands","description":"compose-lint is a Docker Compose security linter that identifies dangerous misconfigurations before deployment. In version 0.31.0, compose-lint's argument parser writes rejected repository paths to stderr without the output sanitizer when a path is passed without a preceding -- separator. A pull request can supply a path containing workflow-command syntax; a carriage return can position that command at the start of a new line recognized by the GitHub Actions runner, allowing the package, Docker image, or a pre-commit hook with misconfigured args to issue the command in the job log. The default pre-commit configuration includes -- and is not affected, the GitHub Action is not affected, and the lint pass or fail result is unchanged. This issue is fixed in version 0.32.0.","summary":"compose-lint 0.31.0 writes rejected repository paths to stderr without sanitizing them when no -- separator precedes the path. A crafted pull request path containing a carriage return and workflow-command syntax can make the GitHub Actions runner execute that command in the job log.","severity":"low","cvss":2.3,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["compose-lint","docker-compose","github-actions","package","pre-commit"],"not_affected_if":["default-pre-commit-config","github-action","version-below-0.31.0-or-0.32.0"],"how_to_check":"- Check the installed compose-lint version, for example `compose-lint --version`, and look for `0.31.0`.\n- Search CI configs for compose-lint invocations that pass paths without a preceding `--`.\n- The default pre-commit configuration includes `--` and the GitHub Action is not affected, per the sources.","fix":"- compose-lint: move to `0.32.0`.","status":"open","published_at":"2026-11-10T17:17:26+00:00","first_seen_at":"2026-11-10T17:22:41+00:00","triaged_at":"2026-11-10T17:25:49+00:00","updated_at":"2026-11-10T17:25:49+00:00","category":"package","confidence":0.7,"triage":{"at":"2026-11-10T17:25:49Z","model":"claude-haiku-5-5","output":{"fix":"- compose-lint: move to `0.32.0`.","reach":"network","title":"compose-lint: unsanitized stderr lets pull request paths inject GitHub Actions commands","impact":"low","summary":"compose-lint 0.31.0 writes rejected repository paths to stderr without sanitizing them when no -- separator precedes the path. A crafted pull request path containing a carriage return and workflow-command syntax can make the GitHub Actions runner execute that command in the job log.","audience":"developers","category":"package","nicknames":[],"who_cares":["compose-lint","github-actions","docker-compose","pre-commit"],"confidence":0.7,"fix_status":"available","needs_auth":"no","worst_case":"workflow commands execute in the CI job log","analyst_note":"","how_to_check":"- Check the installed compose-lint version, for example `compose-lint --version`, and look for `0.31.0`.\n- Search CI configs for compose-lint invocations that pass paths without a preceding `--`.\n- The default pre-commit configuration includes `--` and the GitHub Action is not affected, per the sources.","plain_action":"","product_name":"","needs_analyst":false,"not_affected_if":["default-pre-commit-config","github-action","version-below-0.31.0-or-0.32.0"],"who_is_affected":"Teams running compose-lint 0.31.0 directly, via a package, Docker image, or pre-commit hook with arguments that omit the -- separator, where pull request content reaches the linter's output. The sources say the default pre-commit configuration and the GitHub Action are not affected, and the lint pass or fail result does not change.","user_interaction":"no","product_ecosystem":"","needs_special_setup":"yes","severity_if_unknown":"low"},"cost_usd":0.000769,"input_tokens":4734,"output_tokens":591,"severity_before":"low"},"analyst_status":null,"analyst_note":null,"search":"'-125123':16A,19A '-2026':15A,18A '0.31.0':36B,96C '0.32.0':208C 'action':12A,28B,70B,152C,189C 'affect':186C,192C 'allow':154C 'arg':167C 'argument':101C 'carriag':59B,135C 'command':13A,64B,74B,132C,140C,171C 'commit':32B,163C,180C 'compos':2A,21B,25B,34B,80C,85C,98C 'compose-lint':1A,20B,33B,79C,97C 'configur':181C 'contain':57B,129C 'craft':53B 'cve':14A,17A 'danger':90C 'default':177C 'deploy':93C 'docker':24B,84C,157C 'docker-compos':23B 'execut':72B 'fail':198C 'fix':205C 'github':11A,27B,69B,151C,188C 'github-act':26B 'hook':164C 'identifi':89C 'imag':158C 'includ':182C 'inject':10A 'issu':169C,203C 'job':77B,174C 'let':6A 'line':147C 'lint':3A,22B,35B,81C,99C,195C 'linter':87C 'log':78B,175C 'make':67B 'misconfigur':91C,166C 'new':146C 'output':111C 'packag':29B,156C 'parser':102C 'pass':117C,196C 'path':9A,40B,51B,56B,106C,115C,128C 'posit':138C 'pre':31B,162C,179C 'pre-commit':30B,161C,178C 'preced':49B,120C 'pull':7A,54B,123C 'recogn':148C 'reject':38B,104C 'repositori':39B,105C 'request':8A,55B,124C 'result':199C 'return':60B,136C 'runner':71B,153C 'sanit':44B,112C 'secur':86C 'separ':48B,121C 'start':143C 'stderr':5A,42B,108C 'suppli':126C 'syntax':65B,133C 'unchang':201C 'unsanit':4A 'version':95C,207C 'without':43B,109C,118C 'workflow':63B,131C 'workflow-command':62B,130C 'write':37B,103C","nicknames":[],"mitigations":[],"who_affected":"Teams running compose-lint 0.31.0 directly, via a package, Docker image, or pre-commit hook with arguments that omit the -- separator, where pull request content reaches the linter's output. The sources say the default pre-commit configuration and the GitHub Action are not affected, and the lint pass or fail result does not change.","tier":"C","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"developers","plain_action":null,"pkeys":[],"ptokens":[],"labels":["composelint","dockercompose","githubactions","low","package","precommit"],"campaign_type":null,"search_a":"'-125123':16A,19A '-2026':15A,18A 'action':12A 'command':13A 'compos':2A 'compose-lint':1A 'cve':14A,17A 'github':11A 'inject':10A 'let':6A 'lint':3A 'path':9A 'pull':7A 'request':8A 'stderr':5A 'unsanit':4A","search_b":"'0.31.0':36B 'action':28B,70B 'carriag':59B 'command':64B,74B 'commit':32B 'compos':21B,25B,34B 'compose-lint':20B,33B 'contain':57B 'craft':53B 'docker':24B 'docker-compos':23B 'execut':72B 'github':27B,69B 'github-act':26B 'job':77B 'lint':22B,35B 'log':78B 'make':67B 'packag':29B 'path':40B,51B,56B 'pre':31B 'pre-commit':30B 'preced':49B 'pull':54B 'reject':38B 'repositori':39B 'request':55B 'return':60B 'runner':71B 'sanit':44B 'separ':48B 'stderr':42B 'syntax':65B 'without':43B 'workflow':63B 'workflow-command':62B 'write':37B","search_c":"'0.31.0':96C '0.32.0':208C 'action':152C,189C 'affect':186C,192C 'allow':154C 'arg':167C 'argument':101C 'carriag':135C 'command':132C,140C,171C 'commit':163C,180C 'compos':80C,85C,98C 'compose-lint':79C,97C 'configur':181C 'contain':129C 'danger':90C 'default':177C 'deploy':93C 'docker':84C,157C 'fail':198C 'fix':205C 'github':151C,188C 'hook':164C 'identifi':89C 'imag':158C 'includ':182C 'issu':169C,203C 'job':174C 'line':147C 'lint':81C,99C,195C 'linter':87C 'log':175C 'misconfigur':91C,166C 'new':146C 'output':111C 'packag':156C 'parser':102C 'pass':117C,196C 'path':106C,115C,128C 'posit':138C 'pre':162C,179C 'pre-commit':161C,178C 'preced':120C 'pull':123C 'recogn':148C 'reject':104C 'repositori':105C 'request':124C 'result':199C 'return':136C 'runner':153C 'sanit':112C 'secur':86C 'separ':121C 'start':143C 'stderr':108C 'suppli':126C 'syntax':133C 'unchang':201C 'version':95C,207C 'without':109C,118C 'workflow':131C 'workflow-command':130C 'write':103C","cause_entry":null,"cause_path":null,"disclosures_checked_at":null,"first_public_at":"2026-11-10T01:27:13+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:P/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","cvss_by":"security-advisories@github.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-125123","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-125123","severity":null,"published_at":"2026-11-10T17:17:26+00:00","modified_at":"2026-11-10T17:17:26+00:00","first_seen_at":"2026-11-10T17:22:41+00:00","fetched_at":"2026-11-10T17:22:41+00:00","note":null}],"documents":[{"id":116493,"url":"https://github.com/tmatens/compose-lint/commit/542e63126f795564a65c63887ea0dc558a500688","title":"Patch: github.com","kind":"other","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":108802,"url":"https://github.com/tmatens/compose-lint/releases/tag/v0.32.0","title":"Release notes: github.com","kind":"release","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Release notes: github.com"},{"id":116501,"url":"https://github.com/tmatens/compose-lint/security/advisories/GHSA-8v59-qmwv-4p6q","title":"Vendor advisory: github.com","kind":"vendor","source":"nvd","publisher":"vendor","text":null,"published_at":"2026-11-10T01:27:13+00:00","relation":"advisory","confidence":null,"note":"Vendor advisory: github.com"}],"disclosures":[],"exploit_sources":[],"notice":"Free to read, with fair use of about 60 pages a minute. For higher limits or API access: sales@infrastack.ai"}