Ownership proof for Coder IDs recorded in controller status (D11 B)
Mantenedores costumam responder em até 1 dia
@ThomasK33 já está trabalhando nisso.
Desde 14/10/2026.
Avaliação
Esta issue ainda não foi avaliada.
Descrição
Problem
Several controllers record a Coder resource ID in the status subresource and then treat that resource as their own. Examples: CoderMCPServer status.configID, CoderAIProvider status.providerID and status.keyID, CoderTemplateTest status.templateID and status.workspaceID, and the IDs in the CoderAIGatewayKey status.
A subject with write access to the status subresource can set such an ID to another Coder resource. The controller then updates that resource to the subject's spec and deletes it with the subject's object. For CoderMCPServer this is threat T19 in the #155 plan: any config in an organization that the control plane lists.
Today only an RBAC contract protects these fields. The docs Roles never grant the status subresource, and the docs warn that resources: ["*"] also grants subresources. The #155 activation (M9) adds an opt-in admission policy that denies codermcpservers/status writes from every subject except the operator ServiceAccount (#155 decision D11, option A).
Proposal (D11 option B)
Record ownership in a form that a status writer cannot forge, for every controller kind at once. One option: an HMAC of the object UID and the Coder resource ID with an operator-held key, checked before the controller acts on a recorded ID.
Open questions:
- Where the key lives, and how it rotates.
- The recovery path when the key is lost or rotated: re-adopt by the ownership markers that the controllers already write (for example the
CoderMCPServernonce), or require a spec edit. - Migration of objects that already hold an unsigned ID.
Why a follow-up
Option B adds key storage, rotation and a recovery path, and it belongs in all controllers at once, the #154 kinds included. The #155 plan chose option A for v1 and this issue as the follow-up.
Refs #155
Refs #154
Generated with xum • Model: anthropic:claude-opus-5-5 • Thinking: high • Cost: $211.58
- Linguagem predominante
- Go
- Estrelas
- 5
- Forks
- 3
- Merge médio
- 2h 49min
- PRs com merge (30d)
- 206
Preparar o ambiente
- Sem Dockerfile nem arquivo Docker Compose
- Sem modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de coder/coder-k8s
-
CoderWorkspacePool: count bound and used members only when their owner matches the pool's ownerAberta
Dificuldade 3/5 Meio dia Facilidade para iniciantes 62/100
Mantenedores costumam responder em até 1 dia
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 35/100
Mantenedores costumam responder em até 1 dia
-
Dificuldade 3/5 Meio dia Facilidade para iniciantes 45/100
Mantenedores costumam responder em até 1 dia
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 30/100
Mantenedores costumam responder em até 1 dia
-
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 8/100
Mantenedores costumam responder em até 1 dia
Todas as issues de coder/coder-k8s
Issues semelhantes
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 62/100
router-for-me/CLIProxyAPI#7209 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 62/100
Azure/azure-storage-azcopy#3674 ·
Mantenedores costumam responder em até 1 dia
-
date_time, url_encode, html_escape, to_unix_time, contains_all and contains_any panic when called without argumentsTalvez já em andamento @antcybersec assumiu hoje. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
projectdiscovery/dsl#372 ·
Mantenedores costumam responder em até 1 dia
-
blocked-needs-validation
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 62/100
projectcapsule/capsule#2265 ·
Mantenedores costumam responder em até 1 dia
-
Remove "Model catalog refresh unavailable" warning from OpenRouter agent runsTalvez já em andamento @superplanehq-integration assumiu hoje. Abertasuperplane
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
superplanehq/superplane#9164 ·
Mantenedores costumam responder em até 1 dia