proxy/dstack_proxy.py GetKey filter only requires the path to start with /tee-daemon/; it does not bind the path to the requesting project. A tenant with broker access could request:
GetKey {"path":"/tee-daemon/projects/<other>/..."}
and derive another project's key (cross-tenant key derivation).
Current check (insufficient)
KEY_PATH_PREFIX = "/tee-daemon/"
...
if method == "GetKey":
path = body.get("path", "")
if not path.startswith(KEY_PATH_PREFIX):
... deny
Proposed direction
Scope GetKey to the requesting project (only allow /tee-daemon/projects/<this-project>/...). This needs the broker to know the caller's project identity — e.g. a per-project broker socket, or caller attribution.
Cross-reference: #3, #4.
proxy/dstack_proxy.pyGetKeyfilter only requires the path to start with/tee-daemon/; it does not bind the path to the requesting project. A tenant with broker access could request:GetKey {"path":"/tee-daemon/projects/<other>/..."}and derive another project's key (cross-tenant key derivation).
Current check (insufficient)
Proposed direction
Scope
GetKeyto the requesting project (only allow/tee-daemon/projects/<this-project>/...). This needs the broker to know the caller's project identity — e.g. a per-project broker socket, or caller attribution.Cross-reference: #3, #4.