-
Notifications
You must be signed in to change notification settings - Fork 9
Description
w.r.t. #5
The current proposal has two CWEs that can describe transient execution vulnerabilities that do not arise from a microarchitectural predictor:
CWE-A: A processor event may allow subsequent operations to execute transiently (the operations execute without committing to architectural state).
and
CWE-B: A processor event (for example, a fault or microcode assist) may allow incorrect data to be forwarded from the operation that triggered the event to operations that execute transiently.
(Note that CWE-A is intended as a catch-all for transient execution vulnerabilities that do not fit into CWE-B)
Option 1: (Current Proposal) CWE-A is a catch-all and CWE-B is a subset for forwarding after fault/assist/abort
Pros:
- Most existing transient execution CVEs would fall under CWE-B, and CWE-B's description precisely characterizes this plethora of vulnerabilities. For example, Meltdown is elegantly summarized using CWE-B: "A fault may allow data in the L1D to be forwarded from the operation that triggered the fault to operations that execute transiently."
Option 2: Merge CWE-A and CWE-B into a single non-predictor-based transient execution CWE
I think that the best way to do this would be to keep CWE-A and discard CWE-B. This would simplify the proposal, at the cost of losing the precision of CWE-B.
(This option retains CWE-C and CWE-D from the original proposal)
Option 3: Reframe CWE-A and CWE-B to delineate between cross-domain and same-domain exposure
The reframing might look something like this:
CWE-A: A processor event (for example, a fault or microcode assist) may expose data across a domain boundary during transient execution of subsequent operations.
CWE-B: A processor event may allow incorrect operations (or correct operations with incorrect data) to execute transiently, exposing data within a domain boundary.
(This option retains CWE-C and CWE-D from the original proposal)
Option 4: Domain-oriented CWEs
Three CWEs that delineate between the following cases: anything that can cause incorrect code/data to be used during transient execution within the same domain (e.g., Spectre v1, non-canonical, FPVI), predictor state shared across domains (e.g., BHI), program data in shared uarch structures that can be exposed across domains (e.g., Meltdown).
CWE-A: A processor event may allow incorrect operations (or correct operations with incorrect data) to execute transiently.
CWE-B: Shared microarchitectural predictor state may allow code in one hardware domain to influence predictions in another domain. This may cause incorrect operations (or correct operations with incorrect data) to execute transiently in the second domain.
CWE-C: A processor event may allow architecturally inaccessible data to be used by operations that execute transiently.
In some ways, I think that this option represents a "best-of" take on Options 1-3. The only downside, I think, is that it is a bit less focused on the root cause. For example, LVI and MDS have the same root cause (fault/assist forwards data from a fill/store buffer), but MDS would clearly fall under (Option 4).CWE-C and LVI would have to be in (Option 4).CWE-A. In Option 1, LVI and MDS would both fit unambiguously into (Option 1).CWE-B.