@@ -265,13 +265,57 @@ module ModelValidation {
265
265
)
266
266
}
267
267
268
+ private class OutdatedSinkKind extends string {
269
+ OutdatedSinkKind ( ) {
270
+ this =
271
+ [
272
+ "sql" , "url-redirect" , "xpath" , "ssti" , "logging" , "groovy" , "jexl" , "mvel" , "xslt" ,
273
+ "ldap" , "pending-intent-sent" , "intent-start" , "set-hostname-verifier" ,
274
+ "header-splitting" , "xss" , "write-file" , "create-file" , "read-file" , "open-url" ,
275
+ "jdbc-url"
276
+ ]
277
+ }
278
+
279
+ private string replacementKind ( ) {
280
+ this = [ "sql" , "xpath" , "groovy" , "jexl" , "mvel" , "xslt" , "ldap" ] and
281
+ result = this + "-injection"
282
+ or
283
+ this = "url-redirect" and result = "url-redirection"
284
+ or
285
+ this = "ssti" and result = "template-injection"
286
+ or
287
+ this = "logging" and result = "log-injection"
288
+ or
289
+ this = "pending-intent-sent" and result = "pending-intents"
290
+ or
291
+ this = "intent-start" and result = "intent-redirection"
292
+ or
293
+ this = "set-hostname-verifier" and result = "hostname-verification"
294
+ or
295
+ this = "header-splitting" and result = "response-splitting"
296
+ or
297
+ this = "xss" and result = "html-injection\" or \"js-injection"
298
+ or
299
+ this = "write-file" and result = "file-content-store"
300
+ or
301
+ this = [ "create-file" , "read-file" ] and result = "path-injection"
302
+ or
303
+ this = [ "open-url" , "jdbc-url" ] and result = "request-forgery"
304
+ }
305
+
306
+ string outdatedMessage ( ) {
307
+ result =
308
+ "The kind \"" + this + "\" is outdated. Use \"" + this .replacementKind ( ) + "\" instead."
309
+ }
310
+ }
311
+
268
312
private string getInvalidModelKind ( ) {
269
313
exists ( string kind | summaryModel ( _, _, _, _, _, _, _, _, kind , _) |
270
314
not kind = [ "taint" , "value" ] and
271
315
result = "Invalid kind \"" + kind + "\" in summary model."
272
316
)
273
317
or
274
- exists ( string kind | sinkModel ( _, _, _, _, _, _, _, kind , _) |
318
+ exists ( string kind , string msg | sinkModel ( _, _, _, _, _, _, _, kind , _) |
275
319
not kind =
276
320
[
277
321
"request-forgery" , "jndi-injection" , "ldap-injection" , "sql-injection" , "log-injection" ,
@@ -283,7 +327,11 @@ module ModelValidation {
283
327
] and
284
328
not kind .matches ( "regex-use%" ) and
285
329
not kind .matches ( "qltest%" ) and
286
- result = "Invalid kind \"" + kind + "\" in sink model."
330
+ msg = "Invalid kind \"" + kind + "\" in sink model." and
331
+ // The part of this message that refers to outdated sink kinds can be deleted after June 1st, 2024.
332
+ if kind instanceof OutdatedSinkKind
333
+ then result = msg + " " + kind .( OutdatedSinkKind ) .outdatedMessage ( )
334
+ else result = msg
287
335
)
288
336
or
289
337
exists ( string kind | sourceModel ( _, _, _, _, _, _, _, kind , _) |
0 commit comments