Skip to content

Commit 597603a

Browse files
authored
Create cve-2017-5123.ql
Add query to detect CVE-2017-5123
1 parent 4030561 commit 597603a

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import cpp
2+
import semmle.code.cpp.dataflow.DataFlow
3+
4+
5+
class WrtieAccessCheckMacro extends Macro{
6+
VariableAccess va;
7+
WrtieAccessCheckMacro(){
8+
this.getName() = ["user_write_access_begin",
9+
"user_access_begin"]
10+
and
11+
va.getEnclosingElement() = this.getAnInvocation().getAnExpandedElement()
12+
}
13+
14+
VariableAccess getArgument(){
15+
result = va
16+
}
17+
}
18+
19+
20+
class UnSafePutUserMacro extends Macro{
21+
PointerDereferenceExpr writeUserPtr;
22+
23+
UnSafePutUserMacro(){
24+
this.getName() = "unsafe_put_user" and
25+
writeUserPtr.getEnclosingElement() = this.getAnInvocation().getAnExpandedElement()
26+
}
27+
28+
Expr getUserModePtr(){
29+
result = writeUserPtr.getOperand().(AddressOfExpr).getOperand().(FieldAccess).getQualifier()
30+
}
31+
}
32+
33+
class ExploitableUserModePtrParam extends Parameter{
34+
ExploitableUserModePtrParam(){
35+
not exists(WrtieAccessCheckMacro writeAccessCheck|
36+
DataFlow::localFlow(DataFlow::parameterNode(this), DataFlow::exprNode(writeAccessCheck.getArgument()))
37+
)
38+
}
39+
}
40+
41+
42+
from ExploitableUserModePtrParam p, UnSafePutUserMacro unsafePutUser
43+
where
44+
DataFlow::localFlow(DataFlow::parameterNode(p), DataFlow::exprNode(unsafePutUser.getUserModePtr()))
45+
select
46+
p, unsafePutUser, "potential wrtie user mode ptr without check."
47+
48+
49+

0 commit comments

Comments
 (0)