Build rules¶
All 55 built-in source-analysis rules untrust buildscan runs over the files of a built artifact. tee rules target confidential-computing patterns; generic rules apply to any workload. A policy label relates a rule to a governance policy for reading only: it never changes the gate.
Source
Generated from untrust 1.3.0 (commit 7ef462d9a0c3).
TEE rules¶
| Rule | Severity | Class | CWE | What it finds | Policy label |
|---|---|---|---|---|---|
CCE-POLICY |
high | attestation-weakening | CWE-284 | Attestation/verification weakening | P-05 |
COCO-SUPPLY-CHAIN |
high | supply-chain | CWE-1357 | Supply-chain (unsigned/unencrypted image) | P-09 |
CONTENT-ASN1-PARSE |
high | untrusted-asn1-parse | CWE-502 | ASN.1/CMS parse of host/KMS-supplied bytes — a memory-unsafe/attacker-reachable parser inside the TEE | P-06 |
CONTENT-ATTEST-DOC-LEAK |
medium | attestation-doc-leak | CWE-532 | attestation document written to a log/stdout — leaks measurements/nonce | P-04 |
CONTENT-ATTEST-NOVERIFY |
critical | attestation-verification-flaw | CWE-347 | attestation/JWT token decoded without signature verification | P-03 |
CONTENT-ATTEST-REPLAY |
high | attestation-replay | CWE-294 | attestation document requested without a fresh nonce — replayable | P-04 |
CONTENT-ATTEST-WEAKEN |
high | attestation-weakening | CWE-284 | code/config path weakens or disables attestation/verification | P-05 |
CONTENT-ENV-CONFIG |
medium | host-config-trust | CWE-454 | host-supplied env drives boot config (outside the attestation boundary) | P-06 |
CONTENT-HOST-ENTROPY |
high | host-entropy-trust | CWE-338 | key/nonce/IV drawn from the non-cryptographic RNG — use secrets/os.urandom | P-06 |
CONTENT-HOST-TIME |
medium | host-time-trust | CWE-294 | freshness/expiry decided against host wall-clock time — spoofable by the host | P-06 |
CONTENT-JWT-ALG |
high | jwt-alg-confusion | CWE-347 | JWT/attestation token accepts alg 'none' or an empty algorithm list | P-04 |
CONTENT-KEY-NOT-BOUND |
info | key-not-bound-to-measurement | CWE-347 | KMS decrypt/data-key call — verify release is bound to a Recipient attestation / PCRs, not just IAM | P-03 |
CONTENT-NO-ENDPOINT-PIN |
info | no-endpoint-pinning | CWE-295 | KMS/secrets/STS client created without a pinned endpoint_url — host can redirect the enclave's control-plane egress | P-03 |
CONTENT-UNAUTH-ENC |
high | unauthenticated-encryption | CWE-327 | unauthenticated cipher mode (CBC/DES, no MAC) — malleable; use AES-GCM | |
CONTENT-WEAK-KEYSIZE |
medium | weak-key-size | CWE-326 | inadequate asymmetric key size (RSA<=2048 / weak DSA) for long-lived TEE keys | |
GRAMINE-ALLOWED-FILES |
high | boot-state-trust | CWE-494 | Trust of downloaded boot state/code | P-02 |
GRAMINE-DEBUG |
critical | debug-mode | CWE-489 | Debug mode enabled | P-05 |
GRAMINE-INSECURE-HOST-INPUT |
high | host-config-trust | CWE-454 | Host-supplied config/env trust | P-06 |
SERVICE-RUNS-AS-ROOT |
medium | running-as-root | CWE-250 | Workload service runs as root | |
SNP-ID-BLOCK |
high | signing-not-enforced | CWE-347 | Image/launch signing not enforced | P-09 |
SNP-POLICY-DEBUG |
critical | debug-mode | CWE-489 | Debug mode enabled | P-05 |
VM-BOOT-UNMEASURED |
critical | unmeasured-boot-chain | CWE-345 | Boot component not covered by the launch measurement | P-09 |
VM-CMDLINE-DEBUG |
medium | debug-mode | CWE-489 | Debug mode enabled | P-05 |
VM-CMDLINE-SHELL |
critical | host-shell-access | CWE-306 | Shell/login reachable from the host-controlled console or SSH | P-05 |
VM-CMDLINE-WEAKENING |
high | kernel-hardening-disabled | CWE-1188 | Kernel hardening disabled on the command line | P-05 |
VM-DISK-KEY |
critical | key-not-bound-to-measurement | CWE-347 | Key release/decrypt not bound to a measurement/attestation | P-03 |
VM-FIRMWARE-UNSUPPORTED |
critical | unmeasured-boot-chain | CWE-345 | Boot component not covered by the launch measurement | P-09 |
VM-MEASUREMENT-MISMATCH |
critical | measurement-mismatch | CWE-345 | Built artifacts do not produce the expected measurement | P-09 |
VM-PASSWORD-LOGIN |
high | host-shell-access | CWE-306 | Shell/login reachable from the host-controlled console or SSH | P-05 |
VM-ROOT-INTEGRITY |
high | rootfs-not-integrity-protected | CWE-354 | Root filesystem not pinned by the measured boot (no dm-verity) | P-09 |
VM-SERIAL-CONSOLE-LOGIN |
high | host-shell-access | CWE-306 | Shell/login reachable from the host-controlled console or SSH | P-05 |
VM-SSH-AUTHORIZED-KEYS |
high | host-shell-access | CWE-306 | Shell/login reachable from the host-controlled console or SSH | P-05 |
VM-TD-DEBUG |
critical | debug-mode | CWE-489 | Debug mode enabled | P-05 |
VM-TDX-RTMR-UNPINNED |
info | unmeasured-boot-chain | CWE-345 | Boot component not covered by the launch measurement | P-09 |
Generic rules¶
| Rule | Severity | Class | CWE | What it finds | Policy label |
|---|---|---|---|---|---|
AST-PATTERN |
medium | Runs the structural AST patterns over every .py file in the rootfs. | |||
CONTENT-AWSKEY |
high | hardcoded-secret | CWE-798 | baked-in AWS access key | |
CONTENT-CMDI |
high | os-command-injection | CWE-78 | shell command execution | |
CONTENT-CONCAT-OPEN |
medium | path-traversal | CWE-22 | open() on a concatenated path | P-01 |
CONTENT-DYNIMPORT |
high | code-execution | CWE-94 | dynamic import of a computed module — RCE if the module file is attacker-writable | P-02 |
CONTENT-EVAL |
high | unsafe-deserialization | CWE-502 | eval/exec/marshal on input → RCE | P-02 |
CONTENT-FILE-PERMS |
medium | insecure-file-permissions | CWE-732 | Insecure file permissions | |
CONTENT-INSECURE-RANDOM |
medium | insecure-randomness | CWE-338 | non-cryptographic RNG for a secret/token — use secrets/os.urandom | |
CONTENT-PATHJOIN |
high | path-traversal | CWE-22 | path join on an externally-influenced name without normalization | P-01 |
CONTENT-PICKLE |
high | unsafe-deserialization | CWE-502 | pickle deserialization of untrusted data → RCE | P-02 |
CONTENT-PRIVKEY |
high | hardcoded-secret | CWE-798 | baked-in private key material | |
CONTENT-RUNPY |
critical | code-execution | CWE-94 | executes a file/module path as code — RCE if the path is attacker-writable | P-02 |
CONTENT-TLS-VERIFY |
high | insecure-transport | CWE-295 | TLS verification disabled — host can MITM the enclave's egress | |
CONTENT-WEAK-CIPHER |
medium | weak-crypto | CWE-327 | insecure cipher (DES/3DES/ECB) — unsuitable for any security use | |
CONTENT-WEAK-HASH |
medium | weak-crypto | CWE-327 | weak hash (MD5/SHA1) used on security material — not collision/preimage safe | |
CONTENT-XXE |
high | xxe | CWE-611 | XML parsing with external-entity resolution enabled (XXE) | |
CONTENT-YAML |
high | unsafe-deserialization | CWE-502 | yaml.load without SafeLoader → RCE | P-02 |
CONTENT-ZIPSLIP |
high | zip-slip | CWE-22 | archive extraction without per-member path checks (zip-slip) | |
TAINT |
medium | Rule that runs the taint analysis over every .py file in the rootfs. | |||
VM-PRIVATE-KEY |
high | hardcoded-secret | CWE-798 | Hardcoded secret | |
VM-SSH-HOST-KEY |
high | hardcoded-secret | CWE-798 | Hardcoded secret |