Skip to content

Commit cb211f8

Browse files
authored
Merge pull request #8599 from 4B5F5F4B/main
C++: refactor some code, and add access_ok cases
2 parents 9c8dee2 + 04538d0 commit cb211f8

File tree

1 file changed

+8
-5
lines changed

1 file changed

+8
-5
lines changed

cpp/ql/src/experimental/Security/CWE/CWE-020/NoCheckBeforeUnsafePutUser.ql

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class WriteAccessCheckMacro extends Macro {
2121
VariableAccess va;
2222

2323
WriteAccessCheckMacro() {
24-
this.getName() = ["user_write_access_begin", "user_access_begin"] and
24+
this.getName() = ["user_write_access_begin", "user_access_begin", "access_ok"] and
2525
va.getEnclosingElement() = this.getAnInvocation().getAnExpandedElement()
2626
}
2727

@@ -37,7 +37,8 @@ class UnSafePutUserMacro extends Macro {
3737
}
3838

3939
Expr getUserModePtr() {
40-
result = writeUserPtr.getOperand().(AddressOfExpr).getOperand().(FieldAccess).getQualifier()
40+
result = writeUserPtr.getOperand().(AddressOfExpr).getOperand().(FieldAccess).getQualifier() or
41+
result = writeUserPtr.getOperand()
4142
}
4243
}
4344

@@ -46,11 +47,13 @@ class ExploitableUserModePtrParam extends Parameter {
4647
not exists(WriteAccessCheckMacro writeAccessCheck |
4748
DataFlow::localFlow(DataFlow::parameterNode(this),
4849
DataFlow::exprNode(writeAccessCheck.getArgument()))
50+
) and
51+
exists(UnSafePutUserMacro unsafePutUser |
52+
DataFlow::localFlow(DataFlow::parameterNode(this),
53+
DataFlow::exprNode(unsafePutUser.getUserModePtr()))
4954
)
5055
}
5156
}
5257

53-
from ExploitableUserModePtrParam p, UnSafePutUserMacro unsafePutUser
54-
where
55-
DataFlow::localFlow(DataFlow::parameterNode(p), DataFlow::exprNode(unsafePutUser.getUserModePtr()))
58+
from ExploitableUserModePtrParam p
5659
select p, "unsafe_put_user write user-mode pointer $@ without check.", p, p.toString()

0 commit comments

Comments
 (0)