{"id":"CVE-2026-113672","kind":"vulnerability","aliases":["CVE-2026-113672"],"related":[],"title":"Argo CD: Jsonnet imports read any file on the repo-server","description":"Argo CD is a declarative, GitOps continuous delivery tool for Kubernetes. From 0.9.0 until 3.3.15, 3.4.10, 3.5.4, and 3.6.0-rc2, the repo-server evaluates .jsonnet files with an importer that does not confine import, importstr, or importbin to the repository root. Absolute paths, parent-directory traversal, and repository symlinks can open any file readable by the repo-server, including /proc/self/environ, projected service-account tokens, mounted private keys, and repository credentials. Although generated Secrets are redacted, placing imported contents in a ConfigMap returns the data to the caller. Using importstr on a non-terminating device such as /dev/zero can exhaust repo-server memory. An attacker can commit a .jsonnet file to a Git repository used by an Application or upload the file through POST /api/v1/applications/manifestsWithFiles, also exposed by argocd app diff --local --server-side-generate. Directory applications evaluate every .jsonnet file in the application directory. The upload path requires only Application get permission on an existing directory Application, without Application update or sync permission or repository write access. This issue is fixed in versions 3.3.15, 3.4.10, 3.5.4, and 3.6.0-rc2.","summary":"Argo CD's repo-server evaluates Jsonnet imports without confining them to the repository, so a crafted .jsonnet file can read any file the repo-server can access, such as service-account tokens, private keys and repository credentials. Placing the read contents in a ConfigMap returns them to the attacker, and importing /dev/zero can exhaust repo-server memory.","severity":"critical","cvss":9.9,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["argo-cd","gitops","infrastructure","kubernetes","self-hosted"],"not_affected_if":["managed-hosting","version-outside-affected-range"],"how_to_check":"Check the Argo CD version: argocd version or the argocd-server image tag, and compare with the fixed versions.\nList Applications with directory sources that can receive Jsonnet, and check who has Application get permission.","fix":"Upgrade Argo CD to 3.3.15, 3.4.10, 3.5.4 or 3.6.0-rc2 (match your release line).\nUntil upgraded, restrict Application get permission to trusted users and limit who can commit to Git repositories used by Applications.","status":"open","published_at":"2026-10-20T18:17:20+00:00","first_seen_at":"2026-10-23T21:57:21+00:00","triaged_at":"2026-10-23T22:39:23+00:00","updated_at":"2026-10-23T22:39:23+00:00","category":"infrastructure","confidence":0.8,"triage":{"at":"2026-10-23T22:39:23Z","model":"claude-haiku-5-5","output":{"fix":"Upgrade Argo CD to 3.3.15, 3.4.10, 3.5.4 or 3.6.0-rc2 (match your release line).\nUntil upgraded, restrict Application get permission to trusted users and limit who can commit to Git repositories used by Applications.","reach":"internet","title":"Argo CD: Jsonnet imports read any file on the repo-server","impact":"high","summary":"Argo CD's repo-server evaluates Jsonnet imports without confining them to the repository, so a crafted .jsonnet file can read any file the repo-server can access, such as service-account tokens, private keys and repository credentials. Placing the read contents in a ConfigMap returns them to the attacker, and importing /dev/zero can exhaust repo-server memory.","category":"infrastructure","who_cares":["argo-cd","kubernetes","gitops","self-hosted"],"confidence":0.8,"needs_auth":"yes","worst_case":"Attacker reads repo-server secrets and service-account tokens, possibly taking over the cluster","analyst_note":"Confirm the exact affected version ranges and whether a Kubernetes cluster-level exposure check exists; the NVD entry does not list a workaround.","how_to_check":"Check the Argo CD version: argocd version or the argocd-server image tag, and compare with the fixed versions.\nList Applications with directory sources that can receive Jsonnet, and check who has Application get permission.\nunknown","needs_analyst":true,"not_affected_if":["managed-hosting","version-outside-affected-range"],"user_interaction":"no","needs_special_setup":"no","severity_if_unknown":"critical"},"cost_usd":0.00061,"input_tokens":3258,"output_tokens":569,"severity_before":"critical"},"analyst_status":null,"analyst_note":null,"search":"'-113672':15A,18A '-2026':14A,17A '/api/v1/applications/manifestswithfiles':219C '/dev/zero':83B,191C '/proc/self/environ':152C '0.9.0':102C '3.3.15':104C,270C '3.4.10':105C,271C '3.5.4':106C,272C '3.6.0':108C,274C 'absolut':132C 'access':57B,263C 'account':62B,156C 'also':220C 'although':164C 'app':224C 'applic':212C,232C,239C,246C,253C,255C 'argo':1A,20B,28B,90C 'argo-cd':19B 'argocd':223C 'attack':80B,199C 'caller':180C 'cd':2A,21B,29B,91C 'commit':201C 'configmap':75B,174C 'confin':38B,123C 'content':72B,171C 'continu':96C 'craft':45B 'credenti':68B,163C 'cve':13A,16A 'data':177C 'declar':94C 'deliveri':97C 'devic':188C 'diff':225C 'directori':136C,231C,240C,252C 'evalu':34B,114C,233C 'everi':234C 'exhaust':85B,193C 'exist':251C 'expos':221C 'file':7A,47B,51B,116C,144C,204C,216C,236C 'fix':267C 'generat':165C,230C 'get':247C 'git':207C 'gitop':22B,95C 'host':27B 'import':4A,36B,82B,119C,124C,170C 'importbin':127C 'importstr':125C,182C 'includ':151C 'infrastructur':23B 'issu':265C 'jsonnet':3A,35B,46B,115C,203C,235C 'key':65B,160C 'kubernet':24B,100C 'local':226C 'memori':89B,197C 'mount':158C 'non':186C 'non-termin':185C 'open':142C 'parent':135C 'parent-directori':134C 'path':133C,243C 'permiss':248C,259C 'place':69B,169C 'post':218C 'privat':64B,159C 'project':153C 'rc2':109C,275C 'read':5A,49B,71B 'readabl':145C 'redact':168C 'repo':11A,32B,54B,87B,112C,149C,195C 'repo-serv':10A,31B,53B,86B,111C,148C,194C 'repositori':42B,67B,130C,139C,162C,208C,261C 'requir':244C 'return':76B,175C 'root':131C 'secret':166C 'self':26B 'self-host':25B 'server':12A,33B,55B,88B,113C,150C,196C,228C 'server-side-gener':227C 'servic':61B,155C 'service-account':60B,154C 'side':229C 'symlink':140C 'sync':258C 'termin':187C 'token':63B,157C 'tool':98C 'travers':137C 'updat':256C 'upload':214C,242C 'use':181C,209C 'version':269C 'without':37B,254C 'write':262C","nicknames":[],"mitigations":[],"who_affected":null,"tier":"B","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-20T18:17:20+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H","cvss_by":"security-advisories@github.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-113672","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-113672","severity":null,"published_at":"2026-10-20T18:17:20+00:00","modified_at":"2026-10-20T19:59:00+00:00","first_seen_at":"2026-10-23T21:57:21+00:00","fetched_at":"2026-10-23T22:28:58+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"}