{"id":"CVE-2026-123373","kind":"vulnerability","aliases":["CVE-2026-123373"],"related":[],"title":"compose-lint: symlinks and parser errors leak files outside the project","description":"compose-lint is a Docker Compose security linter that identifies dangerous misconfigurations before deployment. From 0.2.0 until 0.25.0, compose-lint follows a project-controlled symbolic link used as the Compose file outside the project. The same issue affects compose.override.yml and a COMPOSE_FILE entry from 0.22.0, and an env_file target from 0.23.0. If an external Compose-related target fails YAML parsing, the error quotes an attacker-uncontrolled line into standard error, JSON errors, and SARIF notifications, while an external env_file can expose credential-like key names through CL-0020 and CL-0021 findings. The attacker selects the target path but not the exact parser-failure line, values from env_file are not printed, and the pass or fail result is unchanged. This issue is fixed in version 0.25.0.","summary":"compose-lint, a Docker Compose security linter, follows a project-controlled symbolic link to read Compose files outside the project directory. On a parse failure it can echo an external file line and expose credential-like key names from env_files in its findings.","severity":"low","cvss":2.3,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["ci","compose-lint","docker-compose","package"],"not_affected_if":["trusted-repos-only","version-0.25.0-or-later"],"how_to_check":"- Check the installed compose-lint version with `compose-lint --version` or the package manifest; versions from `0.2.0` through `0.24.x` are affected.\n- Look for projects that run compose-lint on repositories you do not fully control, since the symlink and env_file paths come from the scanned project.","fix":"- compose-lint: upgrade to `0.25.0`","status":"open","published_at":"2026-11-09T18:17:26+00:00","first_seen_at":"2026-11-09T18:27:56+00:00","triaged_at":"2026-11-09T18:29:25+00:00","updated_at":"2026-11-09T18:29:25+00:00","category":"package","confidence":0.8,"triage":{"at":"2026-11-09T18:29:25Z","model":"claude-haiku-5-5","output":{"fix":"- compose-lint: upgrade to `0.25.0`","reach":"local","title":"compose-lint: symlinks and parser errors leak files outside the project","impact":"low","summary":"compose-lint, a Docker Compose security linter, follows a project-controlled symbolic link to read Compose files outside the project directory. On a parse failure it can echo an external file line and expose credential-like key names from env_files in its findings.","audience":"developers","category":"package","nicknames":[],"who_cares":["compose-lint","docker-compose","ci"],"confidence":0.8,"fix_status":"available","needs_auth":"no","worst_case":"external files read and credential-like key names printed in output","analyst_note":"","how_to_check":"- Check the installed compose-lint version with `compose-lint --version` or the package manifest; versions from `0.2.0` through `0.24.x` are affected.\n- Look for projects that run compose-lint on repositories you do not fully control, since the symlink and env_file paths come from the scanned project.","plain_action":"","product_name":"","needs_analyst":false,"not_affected_if":["version-0.25.0-or-later","trusted-repos-only"],"who_is_affected":"Teams that run compose-lint on Compose projects, especially on code from untrusted sources such as pull requests or third-party repositories. Exposure requires a symlink or env_file pointing outside the project, and the impact is limited to file contents echoed in linter output. Teams that only lint their own trusted projects with no external targets have a lower risk.","user_interaction":"yes","product_ecosystem":"","needs_special_setup":"yes","severity_if_unknown":"low"},"cost_usd":0.000751,"input_tokens":4769,"output_tokens":549,"severity_before":"low"},"analyst_status":null,"analyst_note":null,"search":"'-0020':170C '-0021':173C '-123373':15A,18A '-2026':14A,17A '0.2.0':90C '0.22.0':122C '0.23.0':129C '0.25.0':92C,210C 'affect':114C 'attack':145C,176C 'attacker-uncontrol':144C 'ci':19B 'cl':169C,172C 'compos':2A,21B,25B,28B,32B,44B,75C,80C,94C,106C,118C,134C 'compose-lint':1A,20B,27B,74C,93C 'compose-rel':133C 'compose.override.yml':115C 'control':39B,100C 'credenti':64B,164C 'credential-lik':63B,163C 'cve':13A,16A 'danger':85C 'deploy':88C 'directori':49B 'docker':24B,31B,79C 'docker-compos':23B 'echo':56B 'entri':120C 'env':69B,125C,159C,191C 'error':7A,141C,150C,152C 'exact':184C 'expos':62B,162C 'extern':58B,132C,158C 'fail':137C,200C 'failur':53B,187C 'file':9A,45B,59B,70B,107C,119C,126C,160C,192C 'find':73B,174C 'fix':207C 'follow':35B,96C 'identifi':84C 'issu':113C,205C 'json':151C 'key':66B,166C 'leak':8A 'like':65B,165C 'line':60B,147C,188C 'link':41B,102C 'lint':3A,22B,29B,76C,95C 'linter':34B,82C 'misconfigur':86C 'name':67B,167C 'notif':155C 'outsid':10A,46B,108C 'packag':26B 'pars':52B,139C 'parser':6A,186C 'parser-failur':185C 'pass':198C 'path':180C 'print':195C 'project':12A,38B,48B,99C,110C 'project-control':37B,98C 'quot':142C 'read':43B 'relat':135C 'result':201C 'sarif':154C 'secur':33B,81C 'select':177C 'standard':149C 'symbol':40B,101C 'symlink':4A 'target':127C,136C,179C 'unchang':203C 'uncontrol':146C 'use':103C 'valu':189C 'version':209C 'yaml':138C","nicknames":[],"mitigations":[],"who_affected":"Teams that run compose-lint on Compose projects, especially on code from untrusted sources such as pull requests or third-party repositories. Exposure requires a symlink or env_file pointing outside the project, and the impact is limited to file contents echoed in linter output. Teams that only lint their own trusted projects with no external targets have a lower risk.","tier":"C","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"developers","plain_action":null,"pkeys":[],"ptokens":[],"labels":["ci","composelint","dockercompose","low","package"],"campaign_type":null,"search_a":"'-123373':15A,18A '-2026':14A,17A 'compos':2A 'compose-lint':1A 'cve':13A,16A 'error':7A 'file':9A 'leak':8A 'lint':3A 'outsid':10A 'parser':6A 'project':12A 'symlink':4A","search_b":"'ci':19B 'compos':21B,25B,28B,32B,44B 'compose-lint':20B,27B 'control':39B 'credenti':64B 'credential-lik':63B 'directori':49B 'docker':24B,31B 'docker-compos':23B 'echo':56B 'env':69B 'expos':62B 'extern':58B 'failur':53B 'file':45B,59B,70B 'find':73B 'follow':35B 'key':66B 'like':65B 'line':60B 'link':41B 'lint':22B,29B 'linter':34B 'name':67B 'outsid':46B 'packag':26B 'pars':52B 'project':38B,48B 'project-control':37B 'read':43B 'secur':33B 'symbol':40B","search_c":"'-0020':170C '-0021':173C '0.2.0':90C '0.22.0':122C '0.23.0':129C '0.25.0':92C,210C 'affect':114C 'attack':145C,176C 'attacker-uncontrol':144C 'cl':169C,172C 'compos':75C,80C,94C,106C,118C,134C 'compose-lint':74C,93C 'compose-rel':133C 'compose.override.yml':115C 'control':100C 'credenti':164C 'credential-lik':163C 'danger':85C 'deploy':88C 'docker':79C 'entri':120C 'env':125C,159C,191C 'error':141C,150C,152C 'exact':184C 'expos':162C 'extern':132C,158C 'fail':137C,200C 'failur':187C 'file':107C,119C,126C,160C,192C 'find':174C 'fix':207C 'follow':96C 'identifi':84C 'issu':113C,205C 'json':151C 'key':166C 'like':165C 'line':147C,188C 'link':102C 'lint':76C,95C 'linter':82C 'misconfigur':86C 'name':167C 'notif':155C 'outsid':108C 'pars':139C 'parser':186C 'parser-failur':185C 'pass':198C 'path':180C 'print':195C 'project':99C,110C 'project-control':98C 'quot':142C 'relat':135C 'result':201C 'sarif':154C 'secur':81C 'select':177C 'standard':149C 'symbol':101C 'target':127C,136C,179C 'unchang':203C 'uncontrol':146C 'use':103C 'valu':189C 'version':209C 'yaml':138C","cause_entry":null,"cause_path":null,"disclosures_checked_at":null,"first_public_at":"2026-09-28T16:12:12+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:L/VI:N/VA:N/SC:N/SI:N/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-123373","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-123373","severity":null,"published_at":"2026-11-09T18:17:26+00:00","modified_at":"2026-11-09T18:17:26+00:00","first_seen_at":"2026-11-09T18:27:56+00:00","fetched_at":"2026-11-09T18:27:56+00:00","note":null}],"documents":[{"id":108807,"url":"https://github.com/tmatens/compose-lint/commit/364814329417dbbc34d1ad2f3981f8a7a023799e","title":"Patch: github.com","kind":"other","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":108808,"url":"https://github.com/tmatens/compose-lint/releases/tag/v0.25.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":108809,"url":"https://github.com/tmatens/compose-lint/security/advisories/GHSA-whr6-fgpq-fpv9","title":"Vendor advisory: github.com","kind":"vendor","source":"nvd","publisher":"vendor","text":null,"published_at":"2026-09-28T16:12:12+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"}