Skip to content

Commit 97170ee

Browse files
authored
Merge pull request #276 from microsoft/powershell-sql-injection-alias-parameter-fp
PS: Also handle `-q` and `-i` arguments in sql injection query
2 parents 218f79f + b475871 commit 97170ee

File tree

2 files changed

+11
-4
lines changed

2 files changed

+11
-4
lines changed

powershell/ql/lib/semmle/code/powershell/security/SqlInjectionCustomizations.qll

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,15 +48,19 @@ module SqlInjection {
4848
override string getSourceType() { result = this.(SourceNode).getSourceType() }
4949
}
5050

51+
private string query() { result = ["query", "q"] }
52+
53+
private string inputfile() { result = ["inputfile", "i"] }
54+
5155
class InvokeSqlCmdSink extends Sink {
5256
InvokeSqlCmdSink() {
5357
exists(DataFlow::CallNode call | call.matchesName("Invoke-Sqlcmd") |
54-
this = call.getNamedArgument("query")
58+
this = call.getNamedArgument(query())
5559
or
56-
this = call.getNamedArgument("inputfile")
60+
this = call.getNamedArgument(inputfile())
5761
or
58-
not call.hasNamedArgument("query") and
59-
not call.hasNamedArgument("inputfile") and
62+
not call.hasNamedArgument(query()) and
63+
not call.hasNamedArgument(inputfile()) and
6064
this = call.getArgument(0)
6165
or
6266
// TODO: Here we really should pick a splat argument, but we don't yet extract whether an

powershell/ql/test/query-tests/security/cwe-089/test.ps1

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,3 +107,6 @@ function TakesTypedParameters([int]$i, [long]$l, [float]$f, [double]$d, [decimal
107107
}
108108

109109
TakesTypedParameters $userinput $userinput $userinput $userinput $userinput $userinput $userinput $userinput
110+
111+
$query = "SELECT * FROM MyTable WHERE MyColumn = '$userinput'"
112+
Invoke-Sqlcmd -unknown $userinput -ServerInstance "MyServer" -Database "MyDatabase" -q "SELECT * FROM MyTable" # GOOD

0 commit comments

Comments
 (0)