CVE-2026-59172: Joker Linter Project-Local Code Execution
Running 'joker --lint' on an untrusted repository automatically executes any .jokerd/linter.* file found in the project tree, letting an attacker ship arbitrary Joker code that runs on the…

The problem
Joker versions before 1.8.2 search for a .jokerd/ directory by walking up from the linted file and execute any matching linter.* file they find before performing the actual lint pass.
Because Joker linter files are full executable Clojure/Joker code, a malicious repository can include a .jokerd/linter.joke (or .clj, .cljs, .cljc) that runs automatically whenever a developer or CI job calls 'joker --lint' on any file in the repo. Editor integrations (Emacs flycheck-joker, VS Code, Sublime) that invoke joker --lint on save are especially exposed, since exploitation requires no user interaction beyond opening the repo.
Proof of concept
A working proof-of-concept for CVE-2026-59172 in github.com/candid82/joker, with the exact payload below.
; Place this file at: <repo-root>/.jokerd/linter.joke
; It executes automatically when `joker --lint <any-file-in-repo>` is run
; on Joker < 1.8.2.
(joker.os/sh "bash" "-c" "id > /tmp/joker-pwned.txt")Before 1.8.2, the linter startup code walked the filesystem from the linted file upward, found the first .jokerd/ directory, and called load-file on whichever linter.* variant was present. The file was evaluated in the full Joker runtime, so any standard library function including joker.os/sh was available.
The patch restricts linter file loading to the user's own home directory (~/.jokerd/). Project-local .jokerd/linter.* files are now ignored entirely. The root CWE is CWE-829 (Inclusion of Functionality from Untrusted Control Sphere): the program imported and executed code whose location was controlled by an untrusted third party (the repository being linted).
The fix
Upgrade to Joker v1.8.2 or later. The fix loads linter customization files only from ~/.jokerd/ and never from project-local .jokerd/ directories. Users who cannot upgrade immediately should avoid running 'joker --lint' on untrusted repos and disable editor integrations that call it automatically on file open or save.
Reported by Younghun Ko (AhnLab).
Related research
- high · 8.8Komari: Management Interface CSRF Leading to Remote Code Execution
- high · 8.5CVE-2026-59185CVE-2026-59185: Identrail Cross-Tenant IDOR via Unverified GitHub App installation_id
- highCVE-2026-84445CVE-2026-84445: gRPC-Go xDS Server Denial of Service via Missing :authority Header
- high · 8.6CVE-2026-72789CVE-2026-72789: SiYuan Encrypted Notebook Publish Access Bypass