Skip to content

threat-model.md's A1 entry may overstate what TPM-only deployments guarantee against a rogue operator #581

Description

@kingztech2019

docs/spec/threat-model.md, adversary A1 (rogue operator / privileged insider):

Cannot read TEE-encrypted memory (SEV-SNP, TDX) or TPM-sealed secrets

This groups SEV-SNP/TDX and TPM together as if they give the same protection against A1. I don't think they do, and I want to check before assuming the doc is just being loose with language.

The distinction: SEV-SNP and TDX encrypt guest memory while the VM is running, so an operator with root on the host genuinely cannot read or modify what's happening inside, for the whole time it's running. TPM is different: it measures the boot state and can seal a secret so it only unseals when PCRs match a known-good boot, but that's a boot-time / at-rest guarantee. It doesn't encrypt or otherwise protect a running process's memory from a host with root access.

What that would mean for a tpm-only deployment (no SEV-SNP/TDX underneath — i.e. bare-metal TPM, not the Azure vTPM-behind-SEV-SNP case LIMITATIONS.md already documents separately): the TPM can attest that the gateway booted with the right measured components, but once it's running, a rogue operator with root on that host may still be able to reach into the process and change what's happening — including, concretely, flipping a Cedar DENY to an ALLOW — without the TPM catching it, because that's not what TPM's guarantee covers.

This is different from the already-documented TPM limitation (#453, the missing AK certificate chain to a pinnable root). That one is about verifying a TPM quote's provenance. This is about whether TPM alone protects the running decision the way SEV-SNP/TDX do, which is closer to what #124's "a deny inside the enclave cannot be bypassed by the host" is asking for.

What I'm not certain of: I don't have TPM-only hardware (no SEV-SNP/TDX underneath) to test this against, so I can't confirm whether a real attack along these lines is actually possible on this codebase specifically, or whether something else in the design (a measurement re-check, a runtime integrity check I haven't found) already closes this. Flagging it as a question against the docs' current wording rather than a confirmed finding.

If this is already understood and just imprecisely worded, happy to send a doc-wording PR. If it's a real gap, it's probably worth being explicit in STATUS.md's tpm row and in the threat model about which of the two guarantees (sealed at boot vs protected while running) a tpm-only deployment actually gets.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentationneeds-review:MEDIUMContributor check flagged MEDIUM risk

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions