{"id":"CVE-2026-77459","kind":"vulnerability","aliases":["CVE-2026-77459","GHSA-fmxq-cgp8-87wp","GO-2026-6784"],"related":[],"title":"Argo CD: AppProject destination-namespace and resource restrictions bypassed by PreDelete/PostDelete resource hooks in github.com/argoproj/argo-cd","description":"Argo CD is a declarative, GitOps continuous delivery tool for Kubernetes. From 2.10.0 until 3.3.15, 3.4.10, 3.5.4, and 3.6.0-rc2, Argo CD creates PostDelete resource hooks without applying the AppProject destination and resource authorization checks used during ordinary synchronization. The omitted checks include cluster-scoped and namespaced resource allow/deny lists. A user who can write to an Application's Git repository can commit a delete hook targeting a forbidden namespace, server, group, kind, or resource name, and deletion of the Application causes the application-controller to create that resource with its destination-cluster credentials. The reachable impact is bounded by the controller's cluster access but can include cluster-scoped resources, disallowed namespaces, persistent hook objects, and secondary objects created by a hook Job. PreSync, Sync, PostSync, and SyncFail hooks continue to use the normal project checks. This issue is fixed in versions 3.3.15, 3.4.10, 3.5.4, and 3.6.0-rc2.","summary":"Argo CD skips AppProject destination and resource allow/deny checks when it creates PreDelete/PostDelete hook resources, so anyone who can commit to an Application's Git repo can get the application-controller to create forbidden resources in other namespaces or cluster-scoped objects using the controller's cluster credentials. The attacker gets resource creation bounded only by the controller's cluster access, including persistent hook objects and Jobs.","severity":"critical","cvss":9.9,"epss":0.0072,"exploited":false,"exploited_at":null,"products":[{"name":"github.com/argoproj/argo-cd","fixed":[],"affected":"all versions","ecosystem":"go"},{"name":"github.com/argoproj/argo-cd/v2","fixed":[],"affected":">= 2.10.0","ecosystem":"go"},{"name":"github.com/argoproj/argo-cd/v3","fixed":["3.3.15","3.4.10","3.5.4","3.6.0-rc2"],"affected":">= 3.6.0-rc1, < 3.6.0-rc2","ecosystem":"go"}],"ecosystems":["go"],"tags":["argo-cd","gitops","infrastructure","kubernetes","self-hosted"],"not_affected_if":["hooks-unused-or-pre-sync-only","no-untrusted-git-write-access","version-outside-affected-range"],"how_to_check":"Check the Argo CD version: argocd version or the argocd-application-controller image tag. Affected if go module v2 >= 2.10.0 and below the fixes, or v3 in 3.3.x below 3.3.15, 3.4.x below 3.4.10, 3.5.x below 3.5.4, or 3.6.0-rc1.","fix":"Upgrade Argo CD to 3.3.15, 3.4.10, 3.5.4, or 3.6.0-rc2 (or later in your release line).","status":"open","published_at":"2026-10-13T17:17:46+00:00","first_seen_at":"2026-10-23T19:13:08+00:00","triaged_at":"2026-10-23T19:50:16+00:00","updated_at":"2026-10-23T19:50:16+00:00","category":"infrastructure","confidence":0.8,"triage":{"at":"2026-10-23T19:50:16Z","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 (or later in your release line).\nunknown","summary":"Argo CD skips AppProject destination and resource allow/deny checks when it creates PreDelete/PostDelete hook resources, so anyone who can commit to an Application's Git repo can get the application-controller to create forbidden resources in other namespaces or cluster-scoped objects using the controller's cluster credentials. The attacker gets resource creation bounded only by the controller's cluster access, including persistent hook objects and Jobs.","category":"infrastructure","who_cares":["argo-cd","kubernetes","gitops","self-hosted"],"confidence":0.8,"analyst_note":"Confirm the exact fixed version for the go:github.com/argoproj/argo-cd (v1 module) line, which lists 'fixed ?', via https://pkg.go.dev/vuln/GO-2026-6784 or GHSA-fmxq-cgp8-87wp.","how_to_check":"Check the Argo CD version: argocd version or the argocd-application-controller image tag. Affected if go module v2 >= 2.10.0 and below the fixes, or v3 in 3.3.x below 3.3.15, 3.4.x below 3.4.10, 3.5.x below 3.5.4, or 3.6.0-rc1.\nunknown","needs_analyst":true,"not_affected_if":["version-outside-affected-range","hooks-unused-or-pre-sync-only","no-untrusted-git-write-access"],"severity_if_unknown":"critical"},"cost_usd":0.000534,"input_tokens":2546,"output_tokens":559,"severity_before":"critical"},"analyst_status":null,"analyst_note":null,"search":"'-2026':20A,28A,31A '-6784':29A '-77459':21A,32A '/argoproj/argo-cd':18A,35A '/argoproj/argo-cd/v2':38A '/argoproj/argo-cd/v3':41A '2.10.0':132C '3.3.15':134C,267C '3.4.10':135C,268C '3.5.4':136C,269C '3.6.0':138C,271C '87wp':26A 'access':113B,227C 'allow/deny':58B,169C 'anyon':67B 'appli':147C 'applic':73B,81B,178C,201C,205C 'application-control':80B,204C 'appproject':3A,54B,149C 'argo':1A,43B,51B,120C,140C 'argo-cd':42B 'attack':102B 'author':153C 'bound':106B,221C 'bypass':10A 'caus':202C 'cd':2A,44B,52B,121C,141C 'cgp8':25A 'check':59B,154C,161C,260C 'cluster':92B,99B,112B,164C,215C,226C,232C 'cluster-scop':91B,163C,231C 'commit':70B,183C 'continu':126C,254C 'control':82B,97B,110B,206C,224C 'creat':62B,84B,142C,208C,243C 'creation':105B 'credenti':100B,216C 'cve':19A,30A 'declar':124C 'delet':185C,198C 'deliveri':127C 'destin':5A,55B,150C,214C 'destination-clust':213C 'destination-namespac':4A 'disallow':235C 'fix':264C 'fmxq':24A 'forbidden':85B,189C 'get':78B,103B 'ghsa':23A 'ghsa-fmxq-cgp8-87wp':22A 'git':75B,180C 'github.com':17A,34A,37A,40A 'github.com/argoproj/argo-cd':16A,33A 'github.com/argoproj/argo-cd/v2':36A 'github.com/argoproj/argo-cd/v3':39A 'gitop':45B,125C 'go':27A 'group':192C 'hook':14A,64B,116B,145C,186C,238C,246C,253C 'host':50B 'impact':219C 'includ':114B,162C,230C 'infrastructur':46B 'issu':262C 'job':119B,247C 'kind':193C 'kubernet':47B,130C 'list':170C 'name':196C 'namespac':6A,89B,167C,190C,236C 'normal':258C 'object':94B,117B,239C,242C 'omit':160C 'ordinari':157C 'persist':115B,237C 'postdelet':143C 'postsync':250C 'predelete/postdelete':12A,63B 'presync':248C 'project':259C 'rc2':139C,272C 'reachabl':218C 'repo':76B 'repositori':181C 'resourc':8A,13A,57B,65B,86B,104B,144C,152C,168C,195C,210C,234C 'restrict':9A 'scope':93B,165C,233C 'secondari':241C 'self':49B 'self-host':48B 'server':191C 'skip':53B 'sync':249C 'syncfail':252C 'synchron':158C 'target':187C 'tool':128C 'use':95B,155C,256C 'user':172C 'version':266C 'without':146C 'write':175C","nicknames":[],"mitigations":[],"who_affected":null,"tier":null,"verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-13T17:17:46+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":"govuln","external_id":"GO-2026-6784","url":"https://pkg.go.dev/vuln/GO-2026-6784","severity":null,"published_at":"2026-10-19T21:08:35+00:00","modified_at":"2026-10-19T21:08:35+00:00","first_seen_at":"2026-10-23T19:13:08+00:00","fetched_at":"2026-10-23T19:13:08+00:00","note":null},{"source":"epss","external_id":"CVE-2026-77459","url":"https://api.first.org/data/v1/epss?cve=CVE-2026-77459","severity":null,"published_at":null,"modified_at":null,"first_seen_at":"2026-10-23T19:13:43+00:00","fetched_at":"2026-10-23T19:13:43+00:00","note":null},{"source":"nvd","external_id":"CVE-2026-77459","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-77459","severity":null,"published_at":"2026-10-13T17:17:46+00:00","modified_at":"2026-10-16T16:00:33+00:00","first_seen_at":"2026-10-23T19:35:23+00:00","fetched_at":"2026-10-23T19:35: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"}