Skip to content

Commit d94e51a

Browse files
authored
Merge pull request github#12377 from erik-krogh/jHtml
JS: add the html argument to the jQuery functions as an XSS sink
2 parents 48c3077 + a6c9af4 commit d94e51a

File tree

3 files changed

+9
-2
lines changed

3 files changed

+9
-2
lines changed

javascript/ql/lib/semmle/javascript/frameworks/jQuery.qll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -540,9 +540,9 @@ module JQuery {
540540
JQuery::isMethodArgumentInterpretedAsHtml(name) and
541541
node = this.getAnArgument()
542542
or
543-
// for `$, it's only the first one
543+
// for `$, it's only the first one, or an "html" option
544544
name = "$" and
545-
node = this.getArgument(0)
545+
node = [this.getArgument(0), this.getOptionArgument(1, "html")]
546546
}
547547

548548
/**

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,8 @@ nodes
157157
| xss-through-dom.js:140:19:140:21 | src |
158158
| xss-through-dom.js:141:25:141:27 | src |
159159
| xss-through-dom.js:141:25:141:27 | src |
160+
| xss-through-dom.js:150:24:150:26 | src |
161+
| xss-through-dom.js:150:24:150:26 | src |
160162
edges
161163
| forms.js:8:23:8:28 | values | forms.js:9:31:9:36 | values |
162164
| forms.js:8:23:8:28 | values | forms.js:9:31:9:36 | values |
@@ -257,6 +259,8 @@ edges
257259
| xss-through-dom.js:139:11:139:52 | src | xss-through-dom.js:140:19:140:21 | src |
258260
| xss-through-dom.js:139:11:139:52 | src | xss-through-dom.js:141:25:141:27 | src |
259261
| xss-through-dom.js:139:11:139:52 | src | xss-through-dom.js:141:25:141:27 | src |
262+
| xss-through-dom.js:139:11:139:52 | src | xss-through-dom.js:150:24:150:26 | src |
263+
| xss-through-dom.js:139:11:139:52 | src | xss-through-dom.js:150:24:150:26 | src |
260264
| xss-through-dom.js:139:17:139:52 | documen ... k").src | xss-through-dom.js:139:11:139:52 | src |
261265
| xss-through-dom.js:139:17:139:52 | documen ... k").src | xss-through-dom.js:139:11:139:52 | src |
262266
#select
@@ -302,3 +306,4 @@ edges
302306
| xss-through-dom.js:132:16:132:23 | linkText | xss-through-dom.js:130:42:130:62 | dSelect ... tring() | xss-through-dom.js:132:16:132:23 | linkText | $@ is reinterpreted as HTML without escaping meta-characters. | xss-through-dom.js:130:42:130:62 | dSelect ... tring() | DOM text |
303307
| xss-through-dom.js:140:19:140:21 | src | xss-through-dom.js:139:17:139:52 | documen ... k").src | xss-through-dom.js:140:19:140:21 | src | $@ is reinterpreted as HTML without escaping meta-characters. | xss-through-dom.js:139:17:139:52 | documen ... k").src | DOM text |
304308
| xss-through-dom.js:141:25:141:27 | src | xss-through-dom.js:139:17:139:52 | documen ... k").src | xss-through-dom.js:141:25:141:27 | src | $@ is reinterpreted as HTML without escaping meta-characters. | xss-through-dom.js:139:17:139:52 | documen ... k").src | DOM text |
309+
| xss-through-dom.js:150:24:150:26 | src | xss-through-dom.js:139:17:139:52 | documen ... k").src | xss-through-dom.js:150:24:150:26 | src | $@ is reinterpreted as HTML without escaping meta-characters. | xss-through-dom.js:139:17:139:52 | documen ... k").src | DOM text |

javascript/ql/test/query-tests/Security/CWE-079/XssThroughDom/xss-through-dom.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,4 +146,6 @@ const cashDom = require("cash-dom");
146146
}
147147
};
148148
cashDom("#id").html(DOMPurify ? DOMPurify.sanitize(src) : src); // OK
149+
150+
$("<a />", { html: src }).appendTo("#id"); // NOT OK
149151
})();

0 commit comments

Comments
 (0)