Skip to content

Commit 4e6d7fc

Browse files
committed
Revert "Convert Gorm sql-injection sinks to MaD"
This reverts commit ba31041.
1 parent d8a2c08 commit 4e6d7fc

File tree

7 files changed

+71
-113
lines changed

7 files changed

+71
-113
lines changed

go/ql/lib/ext/gorm.io.gorm.model.yml

Lines changed: 0 additions & 25 deletions
This file was deleted.

go/ql/lib/semmle/go/frameworks/SQL.qll

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,21 @@ module SQL {
146146
}
147147
}
148148
}
149+
150+
/** A model for sinks of GORM. */
151+
private class GormSink extends SQL::QueryString::Range {
152+
GormSink() {
153+
exists(Method meth, string package, string name |
154+
meth.hasQualifiedName(package, "DB", name) and
155+
this = meth.getACall().getSyntacticArgument(0) and
156+
package = Gorm::packagePath() and
157+
name in [
158+
"Where", "Raw", "Order", "Not", "Or", "Select", "Table", "Group", "Having", "Joins",
159+
"Exec", "Distinct", "Pluck"
160+
]
161+
)
162+
}
163+
}
149164
}
150165

151166
/**

go/ql/test/library-tests/semmle/go/frameworks/SQL/Gorm/QueryString.expected

Lines changed: 0 additions & 3 deletions
This file was deleted.

go/ql/test/library-tests/semmle/go/frameworks/SQL/Gorm/QueryString.ql

Lines changed: 0 additions & 60 deletions
This file was deleted.
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
| gorm.go:20:12:20:20 | untrusted | github.com/jinzhu/gorm | DB | Where |
2+
| gorm.go:21:10:21:18 | untrusted | github.com/jinzhu/gorm | DB | Raw |
3+
| gorm.go:22:10:22:18 | untrusted | github.com/jinzhu/gorm | DB | Not |
4+
| gorm.go:23:12:23:20 | untrusted | github.com/jinzhu/gorm | DB | Order |
5+
| gorm.go:24:9:24:17 | untrusted | github.com/jinzhu/gorm | DB | Or |
6+
| gorm.go:25:13:25:21 | untrusted | github.com/jinzhu/gorm | DB | Select |
7+
| gorm.go:26:12:26:20 | untrusted | github.com/jinzhu/gorm | DB | Table |
8+
| gorm.go:27:12:27:20 | untrusted | github.com/jinzhu/gorm | DB | Group |
9+
| gorm.go:28:13:28:21 | untrusted | github.com/jinzhu/gorm | DB | Having |
10+
| gorm.go:29:12:29:20 | untrusted | github.com/jinzhu/gorm | DB | Joins |
11+
| gorm.go:30:11:30:19 | untrusted | github.com/jinzhu/gorm | DB | Exec |
12+
| gorm.go:31:12:31:20 | untrusted | github.com/jinzhu/gorm | DB | Pluck |
13+
| gorm.go:34:12:34:20 | untrusted | gorm.io/gorm | DB | Where |
14+
| gorm.go:35:10:35:18 | untrusted | gorm.io/gorm | DB | Raw |
15+
| gorm.go:36:10:36:18 | untrusted | gorm.io/gorm | DB | Not |
16+
| gorm.go:37:12:37:20 | untrusted | gorm.io/gorm | DB | Order |
17+
| gorm.go:38:9:38:17 | untrusted | gorm.io/gorm | DB | Or |
18+
| gorm.go:39:13:39:21 | untrusted | gorm.io/gorm | DB | Select |
19+
| gorm.go:40:12:40:20 | untrusted | gorm.io/gorm | DB | Table |
20+
| gorm.go:41:12:41:20 | untrusted | gorm.io/gorm | DB | Group |
21+
| gorm.go:42:13:42:21 | untrusted | gorm.io/gorm | DB | Having |
22+
| gorm.go:43:12:43:20 | untrusted | gorm.io/gorm | DB | Joins |
23+
| gorm.go:44:11:44:19 | untrusted | gorm.io/gorm | DB | Exec |
24+
| gorm.go:45:15:45:23 | untrusted | gorm.io/gorm | DB | Distinct |
25+
| gorm.go:46:12:46:20 | untrusted | gorm.io/gorm | DB | Pluck |

go/ql/test/library-tests/semmle/go/frameworks/SQL/Gorm/gorm.go

Lines changed: 26 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -13,35 +13,36 @@ func getUntrustedString() string {
1313
}
1414

1515
func main() {
16+
1617
untrusted := getUntrustedString()
1718

1819
db1 := gorm1.DB{}
19-
db1.Where(untrusted) // $ querystring=untrusted
20-
db1.Raw(untrusted) // $ querystring=untrusted
21-
db1.Not(untrusted) // $ querystring=untrusted
22-
db1.Order(untrusted) // $ querystring=untrusted
23-
db1.Or(untrusted) // $ querystring=untrusted
24-
db1.Select(untrusted) // $ querystring=untrusted
25-
db1.Table(untrusted) // $ querystring=untrusted
26-
db1.Group(untrusted) // $ querystring=untrusted
27-
db1.Having(untrusted) // $ querystring=untrusted
28-
db1.Joins(untrusted) // $ querystring=untrusted
29-
db1.Exec(untrusted) // $ querystring=untrusted
30-
db1.Pluck(untrusted, nil) // $ querystring=untrusted
20+
db1.Where(untrusted)
21+
db1.Raw(untrusted)
22+
db1.Not(untrusted)
23+
db1.Order(untrusted)
24+
db1.Or(untrusted)
25+
db1.Select(untrusted)
26+
db1.Table(untrusted)
27+
db1.Group(untrusted)
28+
db1.Having(untrusted)
29+
db1.Joins(untrusted)
30+
db1.Exec(untrusted)
31+
db1.Pluck(untrusted, nil)
3132

3233
db2 := gorm2.DB{}
33-
db2.Where(untrusted) // $ querystring=untrusted
34-
db2.Raw(untrusted) // $ querystring=untrusted
35-
db2.Not(untrusted) // $ querystring=untrusted
36-
db2.Order(untrusted) // $ querystring=untrusted
37-
db2.Or(untrusted) // $ querystring=untrusted
38-
db2.Select(untrusted) // $ querystring=untrusted
39-
db2.Table(untrusted) // $ querystring=untrusted
40-
db2.Group(untrusted) // $ querystring=untrusted
41-
db2.Having(untrusted) // $ querystring=untrusted
42-
db2.Joins(untrusted) // $ querystring=untrusted
43-
db2.Exec(untrusted) // $ querystring=untrusted
44-
db2.Distinct(untrusted) // $ querystring=untrusted
45-
db2.Pluck(untrusted, nil) // $ querystring=untrusted
34+
db2.Where(untrusted)
35+
db2.Raw(untrusted)
36+
db2.Not(untrusted)
37+
db2.Order(untrusted)
38+
db2.Or(untrusted)
39+
db2.Select(untrusted)
40+
db2.Table(untrusted)
41+
db2.Group(untrusted)
42+
db2.Having(untrusted)
43+
db2.Joins(untrusted)
44+
db2.Exec(untrusted)
45+
db2.Distinct(untrusted)
46+
db2.Pluck(untrusted, nil)
4647

4748
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import go
2+
3+
from SQL::QueryString qs, Method meth, string a, string b, string c
4+
where meth.hasQualifiedName(a, b, c) and qs = meth.getACall().getSyntacticArgument(0)
5+
select qs, a, b, c

0 commit comments

Comments
 (0)