Skip to content

Commit 08e4c8b

Browse files
authored
Merge pull request #9634 from erik-krogh/jqueryParam
JS: add all jquery plugin parameters as source to js/html-constructed-from-input
2 parents b609f1e + e1c34c1 commit 08e4c8b

File tree

3 files changed

+26
-1
lines changed

3 files changed

+26
-1
lines changed

javascript/ql/lib/semmle/javascript/security/dataflow/UnsafeHtmlConstructionCustomizations.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ module UnsafeHtmlConstruction {
3434
* A jQuery plugin options object, seen as a source for unsafe HTML constructed from input.
3535
*/
3636
class JQueryPluginOptionsAsSource extends Source {
37-
JQueryPluginOptionsAsSource() { this instanceof UnsafeJQueryPlugin::JQueryPluginOptions }
37+
JQueryPluginOptionsAsSource() { this = any(JQuery::JQueryPluginMethod meth).getAParameter() }
3838
}
3939

4040
/**

javascript/ql/test/query-tests/Security/CWE-079/UnsafeHtmlConstruction/UnsafeHtmlConstruction.expected

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,13 @@
11
nodes
2+
| jquery-plugin.js:11:27:11:31 | stuff |
3+
| jquery-plugin.js:11:27:11:31 | stuff |
4+
| jquery-plugin.js:11:34:11:40 | options |
5+
| jquery-plugin.js:11:34:11:40 | options |
6+
| jquery-plugin.js:12:31:12:37 | options |
7+
| jquery-plugin.js:12:31:12:41 | options.foo |
8+
| jquery-plugin.js:12:31:12:41 | options.foo |
9+
| jquery-plugin.js:14:31:14:35 | stuff |
10+
| jquery-plugin.js:14:31:14:35 | stuff |
211
| main.js:1:55:1:55 | s |
312
| main.js:1:55:1:55 | s |
413
| main.js:2:29:2:29 | s |
@@ -53,6 +62,14 @@ nodes
5362
| typed.ts:17:29:17:29 | s |
5463
| typed.ts:17:29:17:29 | s |
5564
edges
65+
| jquery-plugin.js:11:27:11:31 | stuff | jquery-plugin.js:14:31:14:35 | stuff |
66+
| jquery-plugin.js:11:27:11:31 | stuff | jquery-plugin.js:14:31:14:35 | stuff |
67+
| jquery-plugin.js:11:27:11:31 | stuff | jquery-plugin.js:14:31:14:35 | stuff |
68+
| jquery-plugin.js:11:27:11:31 | stuff | jquery-plugin.js:14:31:14:35 | stuff |
69+
| jquery-plugin.js:11:34:11:40 | options | jquery-plugin.js:12:31:12:37 | options |
70+
| jquery-plugin.js:11:34:11:40 | options | jquery-plugin.js:12:31:12:37 | options |
71+
| jquery-plugin.js:12:31:12:37 | options | jquery-plugin.js:12:31:12:41 | options.foo |
72+
| jquery-plugin.js:12:31:12:37 | options | jquery-plugin.js:12:31:12:41 | options.foo |
5673
| main.js:1:55:1:55 | s | main.js:2:29:2:29 | s |
5774
| main.js:1:55:1:55 | s | main.js:2:29:2:29 | s |
5875
| main.js:1:55:1:55 | s | main.js:2:29:2:29 | s |
@@ -105,6 +122,8 @@ edges
105122
| typed.ts:16:11:16:21 | s | typed.ts:17:29:17:29 | s |
106123
| typed.ts:16:15:16:21 | id("x") | typed.ts:16:11:16:21 | s |
107124
#select
125+
| jquery-plugin.js:12:31:12:41 | options.foo | jquery-plugin.js:11:34:11:40 | options | jquery-plugin.js:12:31:12:41 | options.foo | $@ based on $@ might later cause $@. | jquery-plugin.js:12:31:12:41 | options.foo | HTML construction | jquery-plugin.js:11:34:11:40 | options | library input | jquery-plugin.js:12:20:12:53 | "<span> ... /span>" | cross-site scripting |
126+
| jquery-plugin.js:14:31:14:35 | stuff | jquery-plugin.js:11:27:11:31 | stuff | jquery-plugin.js:14:31:14:35 | stuff | $@ based on $@ might later cause $@. | jquery-plugin.js:14:31:14:35 | stuff | HTML construction | jquery-plugin.js:11:27:11:31 | stuff | library input | jquery-plugin.js:14:20:14:47 | "<span> ... /span>" | cross-site scripting |
108127
| main.js:2:29:2:29 | s | main.js:1:55:1:55 | s | main.js:2:29:2:29 | s | $@ based on $@ might later cause $@. | main.js:2:29:2:29 | s | HTML construction | main.js:1:55:1:55 | s | library input | main.js:3:49:3:52 | html | cross-site scripting |
109128
| main.js:7:49:7:49 | s | main.js:6:49:6:49 | s | main.js:7:49:7:49 | s | $@ based on $@ might later cause $@. | main.js:7:49:7:49 | s | XML parsing | main.js:6:49:6:49 | s | library input | main.js:8:48:8:66 | doc.documentElement | cross-site scripting |
110129
| main.js:12:49:12:49 | s | main.js:11:60:11:60 | s | main.js:12:49:12:49 | s | $@ based on $@ might later cause $@. | main.js:12:49:12:49 | s | XML parsing | main.js:11:60:11:60 | s | library input | main.js:16:21:16:35 | xml.cloneNode() | cross-site scripting |

javascript/ql/test/query-tests/Security/CWE-079/UnsafeHtmlConstruction/jquery-plugin.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,9 @@
77
}(function ($) {
88
$("<span>" + $.trim("foo") + "</span>"); // OK
99
}));
10+
11+
$.fn.myPlugin = function (stuff, options) {
12+
$("#foo").html("<span>" + options.foo + "</span>"); // NOT OK
13+
14+
$("#foo").html("<span>" + stuff + "</span>"); // NOT OK
15+
}

0 commit comments

Comments
 (0)