Skip to content

Commit cc13922

Browse files
committed
PS: Make the experimental query compile again.
1 parent 171f5ca commit cc13922

File tree

1 file changed

+24
-20
lines changed

1 file changed

+24
-20
lines changed

powershell/ql/src/experimental/CommandInjection.ql

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import powershell
1212

1313
predicate containsScope(VarAccess outer, VarAccess inner) {
14-
outer.getUserPath() = inner.getUserPath() and
14+
outer.getVariable().getName() = inner.getVariable().getName() and
1515
outer != inner
1616
}
1717

@@ -23,16 +23,16 @@ predicate constantBinaryExpression(BinaryExpr binary) {
2323
onlyConstantExpressions(binary.getLeft()) and onlyConstantExpressions(binary.getRight())
2424
}
2525

26-
predicate onlyConstantExpressions(Expr expr){
27-
expr instanceof StringConstExpr or constantBinaryExpression(expr) or constantTernaryExpression(expr)
26+
predicate onlyConstantExpressions(Expr expr) {
27+
expr instanceof StringConstExpr or
28+
constantBinaryExpression(expr) or
29+
constantTernaryExpression(expr)
2830
}
2931

3032
VarAccess getNonConstantVariableAssignment(VarAccess varexpr) {
31-
(
32-
exists(AssignStmt assignment |
33-
not onlyConstantExpressions(assignment.getRightHandSide().(CmdExpr).getExpr()) and
34-
result = assignment.getLeftHandSide()
35-
)
33+
exists(AssignStmt assignment |
34+
not onlyConstantExpressions(assignment.getRightHandSide()) and
35+
result = assignment.getLeftHandSide()
3636
) and
3737
containsScope(result, varexpr)
3838
}
@@ -44,31 +44,35 @@ VarAccess getParameterWithVariableScope(VarAccess varexpr) {
4444
)
4545
}
4646

47-
Expr getAllSubExpressions(Expr expr)
48-
{
47+
Expr getAllSubExpressions(Expr expr) {
4948
result = expr or
50-
result = getAllSubExpressions(expr.(ArrayLiteral).getAnElement()) or
51-
result = getAllSubExpressions(expr.(ArrayExpr).getStmtBlock().getAStmt().(Pipeline).getAComponent().(CmdExpr).getExpr())
49+
result = getAllSubExpressions(expr.(ArrayLiteral).getAnExpr()) or
50+
result =
51+
getAllSubExpressions(expr.(ArrayExpr)
52+
.getStmtBlock()
53+
.getAStmt()
54+
.(ExprStmt)
55+
.getExpr()
56+
.(Pipeline)
57+
.getAComponent())
5258
}
5359

54-
Expr dangerousCommandElement(Cmd command)
55-
{
60+
Expr dangerousCommandElement(CallExpr command) {
5661
(
57-
command.getKind() = 28 or
58-
command.getCommandName() = "Invoke-Expression"
62+
command instanceof CallOperator or
63+
command.getName() = "Invoke-Expression"
5964
) and
6065
result = getAllSubExpressions(command.getAnArgument())
6166
}
6267

6368
from Expr commandarg, VarAccess unknownDeclaration
6469
where
65-
exists(Cmd command |
70+
exists(CallExpr command |
6671
(
6772
unknownDeclaration = getNonConstantVariableAssignment(commandarg) or
6873
unknownDeclaration = getParameterWithVariableScope(commandarg)
69-
)
70-
and
74+
) and
7175
commandarg = dangerousCommandElement(command)
7276
)
7377
select commandarg.(VarAccess).getLocation(), "Unsafe flow to command argument from $@.",
74-
unknownDeclaration, unknownDeclaration.getUserPath()
78+
unknownDeclaration, unknownDeclaration.getVariable().getName()

0 commit comments

Comments
 (0)