{"id":"CVE-2026-59172","kind":"vulnerability","aliases":["CVE-2026-59172"],"related":[],"title":"Joker linter runs repository-supplied code when linting untrusted files","description":"Joker is a small Clojure interpreter, linter and formatter written in Go. Prior to 1.8.2, `joker --lint <file>` walks upward from the linted file to locate a `.jokerd/` directory and executes matching `linter.*` files before linting. Those files contain executable Joker/Clojure code, so linting a file inside an untrusted repository can execute repository-supplied code with the linter user's privileges. Editor integrations and CI jobs that automatically lint checked-out source can trigger this behavior. The patch stops executing project-local linter customizations and loads executable customization only from the user's home directory. This issue is fixed in version 1.8.2.","summary":"Joker's `--lint` mode searches parent directories for a `.jokerd/` folder and runs any `linter.*` files it finds before linting. A malicious repository can ship such files, so linting a checked-out file runs the attacker's code with the linter user's privileges.","severity":"high","cvss":7.8,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["ci","clojure","editor-integration","go","joker","package"],"not_affected_if":["joker-not-installed","lints-trusted-code-only"],"how_to_check":"- Run `joker --version` and confirm it reports a version below `1.8.2`.\n- Check whether editor integrations or CI jobs run `joker --lint` on checked-out source from untrusted repositories.","fix":"- Upgrade Joker to `1.8.2` or later, which loads executable customization only from the user's home directory.\n- Until upgraded, avoid running `joker --lint` on files from untrusted repositories.","status":"open","published_at":"2026-10-28T14:17:04+00:00","first_seen_at":"2026-10-28T14:33:23+00:00","triaged_at":"2026-10-28T14:34:26+00:00","updated_at":"2026-10-28T14:34:26+00:00","category":"package","confidence":0.8,"triage":{"at":"2026-10-28T14:34:26Z","model":"claude-haiku-5-5","output":{"fix":"- Upgrade Joker to `1.8.2` or later, which loads executable customization only from the user's home directory.\n- Until upgraded, avoid running `joker --lint` on files from untrusted repositories.","reach":"local","title":"Joker linter runs repository-supplied code when linting untrusted files","impact":"high","summary":"Joker's `--lint` mode searches parent directories for a `.jokerd/` folder and runs any `linter.*` files it finds before linting. A malicious repository can ship such files, so linting a checked-out file runs the attacker's code with the linter user's privileges.","category":"package","nicknames":[],"who_cares":["clojure","joker","go","ci","editor-integration"],"confidence":0.8,"needs_auth":"no","worst_case":"Attacker code runs with the linter user's privileges on the developer or CI machine.","analyst_note":"","how_to_check":"- Run `joker --version` and confirm it reports a version below `1.8.2`.\n- Check whether editor integrations or CI jobs run `joker --lint` on checked-out source from untrusted repositories.","needs_analyst":false,"not_affected_if":["joker-not-installed","lints-trusted-code-only"],"who_is_affected":"Teams that run Joker's linter on source code they did not write, such as editor integrations linting files on open or CI jobs linting pull request checkouts. Exposure depends on the linter running against untrusted trees; projects that only lint their own trusted code have less exposure. Users who never run Joker can skip it.","user_interaction":"yes","needs_special_setup":"no","severity_if_unknown":"high"},"cost_usd":0.000621,"input_tokens":3420,"output_tokens":558,"severity_before":"high"},"analyst_status":null,"analyst_note":null,"search":"'-2026':13A,16A '-59172':14A,17A '1.8.2':85C,174C 'attack':62B 'automat':138C 'behavior':147C 'check':57B,141C 'checked-out':56B,140C 'ci':18B,135C 'clojur':19B,75C 'code':7A,64B,111C,125C 'contain':108C 'custom':156C,160C 'cve':12A,15A 'directori':32B,98C,167C 'editor':21B,132C 'editor-integr':20B 'execut':100C,109C,121C,151C,159C 'file':11A,41B,52B,59B,93C,103C,107C,115C 'find':43B 'fix':171C 'folder':36B 'formatt':79C 'go':23B,82C 'home':166C 'insid':116C 'integr':22B,133C 'interpret':76C 'issu':169C 'job':136C 'joker':1A,24B,26B,71C,86C 'joker/clojure':110C 'jokerd':35B,97C 'lint':9A,28B,45B,54B,87C,92C,105C,113C,139C 'linter':2A,40B,67B,77C,102C,128C,155C 'load':158C 'local':154C 'locat':95C 'malici':47B 'match':101C 'mode':29B 'packag':25B 'parent':31B 'patch':149C 'prior':83C 'privileg':70B,131C 'project':153C 'project-loc':152C 'repositori':5A,48B,119C,123C 'repository-suppli':4A,122C 'run':3A,38B,60B 'search':30B 'ship':50B 'small':74C 'sourc':143C 'stop':150C 'suppli':6A,124C 'trigger':145C 'untrust':10A,118C 'upward':89C 'user':68B,129C,164C 'version':173C 'walk':88C 'written':80C","nicknames":[],"mitigations":[],"who_affected":"Teams that run Joker's linter on source code they did not write, such as editor integrations linting files on open or CI jobs linting pull request checkouts. Exposure depends on the linter running against untrusted trees; projects that only lint their own trusted code have less exposure. Users who never run Joker can skip it.","tier":"B","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-28T14:17:04+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H","cvss_by":"security-advisories@github.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-59172","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-59172","severity":null,"published_at":"2026-10-28T14:17:04+00:00","modified_at":"2026-10-28T14:17:04+00:00","first_seen_at":"2026-10-28T14:33:23+00:00","fetched_at":"2026-10-28T14:33:23+00:00","note":null}],"documents":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}