Summary
The DownloadFile gRPC handler in the provisioner daemon server allows an authenticated provisioner daemon to download cached Terraform module archive files belonging to any organization, bypassing multi-tenant isolation.
Vulnerability Details
When a provisioner daemon requests a file via the DownloadFile RPC, the handler retrieves the file from the database using system-level privileges (AsProvisionerd) and validates only that the file has CreatedBy set to the nil UUID and a MIME type of application/x-tar. This metadata check is intended to restrict downloads to cached Terraform module archives, but it applies uniformly to all such archives across all organizations. The handler does not verify that the requested file is associated with the provisioner's organization or with a job currently assigned to the provisioner.
All cached Terraform module archives are stored with identical metadata (CreatedBy = nil UUID, Mimetype = application/x-tar) regardless of organization, and the underlying files table has no organization scoping.
Impact
A provisioner daemon authenticated with an organization-scoped provisioner key could download cached Terraform module archives belonging to other organizations, provided it knows the file UUID. This could expose Terraform module source code, which may contain infrastructure topology details or embedded secrets.
Exploitation requires:
- A valid provisioner daemon authentication credential (e.g., an org-scoped provisioner key).
- Knowledge of a target file's UUID. File UUIDs are random (UUIDv4) and are not exposed through public API endpoints, making blind enumeration impractical.
Affected Component
coderd/provisionerdserver/provisionerdserver.go — the DownloadFile RPC handler on the ProvisionerDaemon gRPC service.
Remediation
Upgrade to a version of Coder that includes the fix for this issue. As a workaround, operators who do not use external provisioner daemons or multi-organization deployments are not affected.
Patched versions
This issue is fixed in the following releases:
Credits
We'd like to thank Anthropic's Security Team (ANT-2026-22440) for independently disclosing this issue!
Summary
The
DownloadFilegRPC handler in the provisioner daemon server allows an authenticated provisioner daemon to download cached Terraform module archive files belonging to any organization, bypassing multi-tenant isolation.Vulnerability Details
When a provisioner daemon requests a file via the
DownloadFileRPC, the handler retrieves the file from the database using system-level privileges (AsProvisionerd) and validates only that the file hasCreatedByset to the nil UUID and a MIME type ofapplication/x-tar. This metadata check is intended to restrict downloads to cached Terraform module archives, but it applies uniformly to all such archives across all organizations. The handler does not verify that the requested file is associated with the provisioner's organization or with a job currently assigned to the provisioner.All cached Terraform module archives are stored with identical metadata (
CreatedBy = nil UUID,Mimetype = application/x-tar) regardless of organization, and the underlyingfilestable has no organization scoping.Impact
A provisioner daemon authenticated with an organization-scoped provisioner key could download cached Terraform module archives belonging to other organizations, provided it knows the file UUID. This could expose Terraform module source code, which may contain infrastructure topology details or embedded secrets.
Exploitation requires:
Affected Component
coderd/provisionerdserver/provisionerdserver.go— theDownloadFileRPC handler on theProvisionerDaemongRPC service.Remediation
Upgrade to a version of Coder that includes the fix for this issue. As a workaround, operators who do not use external provisioner daemons or multi-organization deployments are not affected.
Patched versions
This issue is fixed in the following releases:
Credits
We'd like to thank Anthropic's Security Team (ANT-2026-22440) for independently disclosing this issue!