FindEFIVariables stub, QIP
This commit is contained in:
parent
a7afce0884
commit
016fa7ef2b
12
codeql/harden/SmmHarden/codeql-pack.lock.yml
Normal file
12
codeql/harden/SmmHarden/codeql-pack.lock.yml
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
---
|
||||||
|
lockVersion: 1.0.0
|
||||||
|
dependencies:
|
||||||
|
codeql/cpp-all:
|
||||||
|
version: 0.5.2
|
||||||
|
codeql/ssa:
|
||||||
|
version: 0.0.10
|
||||||
|
codeql/tutorial:
|
||||||
|
version: 0.0.3
|
||||||
|
codeql/suite-helpers:
|
||||||
|
version: 0.4.1
|
||||||
|
compiled: false
|
42
codeql/harden/SmmHarden/findEFIVariables.ql
Normal file
42
codeql/harden/SmmHarden/findEFIVariables.ql
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
import cpp
|
||||||
|
import semmle.code.cpp.security.FlowSources
|
||||||
|
import semmle.code.cpp.rangeanalysis.SimpleRangeAnalysis
|
||||||
|
import semmle.code.cpp.valuenumbering.GlobalValueNumbering
|
||||||
|
|
||||||
|
class EFIVarFunction extends Function {
|
||||||
|
EFIVarFunction() {
|
||||||
|
this.hasGlobalOrStdOrBslName("SmmSetVariable") or
|
||||||
|
this.hasGlobalOrStdOrBslName("SmmGetVariable")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class EFIVarPtrFunction extends PointerFieldAccess {
|
||||||
|
EFIVarPtrFunction() {
|
||||||
|
this.getTarget().hasName("SmmSetVariable") or
|
||||||
|
this.getTarget().hasName("SmmGetVariable")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
predicate callHandlesEFIVariable(Expr e, Call c) {
|
||||||
|
exists(Call x, PointerFieldAccess fa |
|
||||||
|
// in case it is just a normal function call
|
||||||
|
x.getParent() = e and x.getTarget() instanceof EFIVarFunction
|
||||||
|
or
|
||||||
|
// in case the function call is actually a pointer field access, the function name will be the name of the field itself
|
||||||
|
c = x and
|
||||||
|
c instanceof VariableCall and
|
||||||
|
fa instanceof EFIVarPtrFunction and
|
||||||
|
x.getParent() = e and
|
||||||
|
c.(VariableCall).getVariable() = fa.getTarget()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
class EFIVar extends Variable {
|
||||||
|
EFIVar() { exists(Expr e | callHandlesEFIVariable(e, _) and e.(Access).getTarget() = this) }
|
||||||
|
}
|
||||||
|
|
||||||
|
from Expr e, Call c, Variable v
|
||||||
|
where
|
||||||
|
callHandlesEFIVariable(e, c) and
|
||||||
|
e.(Access).getTarget() = v
|
||||||
|
select v, "This expression uses EFI variables"
|
8
codeql/harden/SmmHarden/qlpack.yml
Normal file
8
codeql/harden/SmmHarden/qlpack.yml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
name: codeql/cpp-queries
|
||||||
|
groups:
|
||||||
|
- cpp
|
||||||
|
- queries
|
||||||
|
dependencies:
|
||||||
|
codeql/cpp-all: "*"
|
||||||
|
codeql/suite-helpers: "*"
|
||||||
|
extractor: cpp
|
Loading…
Reference in New Issue
Block a user