ZeroHour

CVE-2026-59172

niche

Arbitrary Code Execution in Joker Linter via Project-Local .jokerd Files

CVSS 3.1
7.8 high
EPSS
Published
()
Modified
AI analysis

Joker, a Clojure/ClojureScript linter written in Go, allowed arbitrary code execution because versions before 1.8.2 searched for a `.jokerd/` directory by walking up from the file being linted and executed any `linter.*` files found there. An attacker who controls a repository can therefore plant malicious `linter.clj`/`linter.cljc`/`linter.cljs`/`linter.joke` files that run with the privileges of the user or CI runner as soon as `joker --lint` is run on any file in that checkout. The flaw is most likely to be triggered by editor integrations or automated CI jobs that lint checked-out source code without review. Anyone running Joker versions before 1.8.2 against untrusted repositories is affected, while linting only one's own trusted projects carries little risk. No public proof-of-concept is known, the issue is not in the CISA KEV catalog, and there are no reports of exploitation in the wild.

What to do: Upgrade to Joker v1.8.2, which executes linter customization files only from the user's home `~/.jokerd` directory and no longer runs project-local `.jokerd/linter.*` files. Until upgraded, avoid running `joker --lint` on untrusted repositories, especially via editor integrations or unattended CI jobs, and remove or disable any project-local `.jokerd/linter.*` files before linting. Review recently cloned or CI-processed repositories for unexpected `.jokerd/linter.*` files.

Affected
Joker (open-source project) Joker Clojure linterAll versions before 1.8.2
Estimated exposure
nichelikely on the order of thousands of developer workstations and CI pipelines (no public install counts) — Joker is a niche open-source linter for the Clojure ecosystem with no published install or download counts, so exposure is bounded by the small subset of Clojure developers and CI systems that use it; the true number is unknown.

Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.

Description

Joker linter executed project-local .jokerd/linter.* files during linting ## Impact In Joker versions before 1.8.2, `joker --lint <file>` located a `.jokerd/` directory by walking up from the linted file and executed matching `linter.*` files from that directory before linting. Because these files are executable Joker/Clojure code, linting a file inside an untrusted repository could execute code supplied by that repository. This could be triggered by editor integrations or CI jobs that automatically run `joker --lint` on checked-out source code. ## Patches Fixed in Joker v1.8.2. Executable linter customization files are now loaded only from the user's home `.jokerd` directory (`~/.jokerd/linter.cljc`, `~/.jokerd/linter.clj`, `~/.jokerd/linter.cljs`, or `~/.jokerd/linter.joke`). Project-local `.jokerd/linter.*` files are no longer executed. ## Workarounds Users who cannot upgrade should avoid running `joker --lint` on untrusted repositories, especially through editor integrations or unattended CI. Removing or disabling project-local `.jokerd/linter.*` files before linting also avoids the code-execution path. ## Credits Reported by Younghun Ko of AhnLab (@koyokr).

Ecosystems
go
Weakness
CWE-829
Vector
CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
GHSA
GHSA-m835-3cm9-rggg (high)

In the news

No ingested article mentions this CVE yet.