Skip to content

Commit ea5feb2

Browse files
authored
Merge pull request #4331 from erik-krogh/DVNA-files
Approved by esbena
2 parents 4deb43f + 6163e6c commit ea5feb2

File tree

3 files changed

+39
-0
lines changed

3 files changed

+39
-0
lines changed

javascript/ql/src/semmle/javascript/frameworks/Express.qll

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -505,6 +505,10 @@ module Express {
505505
// `req.cookies`
506506
kind = "cookie" and
507507
this = request.getAPropertyRead("cookies")
508+
or
509+
// `req.files`, treated the same as `req.body`.
510+
kind = "body" and
511+
this = request.getAPropertyRead("files")
508512
)
509513
or
510514
kind = "body" and

javascript/ql/test/query-tests/Security/CWE-611/Xxe.expected

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,18 @@ nodes
1010
| libxml.noent.js:6:21:6:41 | req.par ... e-xml") |
1111
| libxml.noent.js:6:21:6:41 | req.par ... e-xml") |
1212
| libxml.noent.js:6:21:6:41 | req.par ... e-xml") |
13+
| libxml.noent.js:11:21:11:41 | req.par ... e-xml") |
14+
| libxml.noent.js:11:21:11:41 | req.par ... e-xml") |
15+
| libxml.noent.js:11:21:11:41 | req.par ... e-xml") |
16+
| libxml.noent.js:14:27:14:47 | req.par ... e-xml") |
17+
| libxml.noent.js:14:27:14:47 | req.par ... e-xml") |
18+
| libxml.noent.js:14:27:14:47 | req.par ... e-xml") |
19+
| libxml.noent.js:16:27:16:35 | req.files |
20+
| libxml.noent.js:16:27:16:35 | req.files |
21+
| libxml.noent.js:16:27:16:44 | req.files.products |
22+
| libxml.noent.js:16:27:16:49 | req.fil ... ts.data |
23+
| libxml.noent.js:16:27:16:66 | req.fil ... 'utf8') |
24+
| libxml.noent.js:16:27:16:66 | req.fil ... 'utf8') |
1325
| libxml.sax.js:6:22:6:42 | req.par ... e-xml") |
1426
| libxml.sax.js:6:22:6:42 | req.par ... e-xml") |
1527
| libxml.sax.js:6:22:6:42 | req.par ... e-xml") |
@@ -25,11 +37,21 @@ edges
2537
| domparser.js:2:13:2:29 | document.location | domparser.js:2:13:2:36 | documen ... .search |
2638
| domparser.js:2:13:2:36 | documen ... .search | domparser.js:2:7:2:36 | src |
2739
| libxml.noent.js:6:21:6:41 | req.par ... e-xml") | libxml.noent.js:6:21:6:41 | req.par ... e-xml") |
40+
| libxml.noent.js:11:21:11:41 | req.par ... e-xml") | libxml.noent.js:11:21:11:41 | req.par ... e-xml") |
41+
| libxml.noent.js:14:27:14:47 | req.par ... e-xml") | libxml.noent.js:14:27:14:47 | req.par ... e-xml") |
42+
| libxml.noent.js:16:27:16:35 | req.files | libxml.noent.js:16:27:16:44 | req.files.products |
43+
| libxml.noent.js:16:27:16:35 | req.files | libxml.noent.js:16:27:16:44 | req.files.products |
44+
| libxml.noent.js:16:27:16:44 | req.files.products | libxml.noent.js:16:27:16:49 | req.fil ... ts.data |
45+
| libxml.noent.js:16:27:16:49 | req.fil ... ts.data | libxml.noent.js:16:27:16:66 | req.fil ... 'utf8') |
46+
| libxml.noent.js:16:27:16:49 | req.fil ... ts.data | libxml.noent.js:16:27:16:66 | req.fil ... 'utf8') |
2847
| libxml.sax.js:6:22:6:42 | req.par ... e-xml") | libxml.sax.js:6:22:6:42 | req.par ... e-xml") |
2948
| libxml.saxpush.js:6:15:6:35 | req.par ... e-xml") | libxml.saxpush.js:6:15:6:35 | req.par ... e-xml") |
3049
#select
3150
| domparser.js:11:55:11:57 | src | domparser.js:2:13:2:29 | document.location | domparser.js:11:55:11:57 | src | A $@ is parsed as XML without guarding against external entity expansion. | domparser.js:2:13:2:29 | document.location | user-provided value |
3251
| domparser.js:14:57:14:59 | src | domparser.js:2:13:2:29 | document.location | domparser.js:14:57:14:59 | src | A $@ is parsed as XML without guarding against external entity expansion. | domparser.js:2:13:2:29 | document.location | user-provided value |
3352
| libxml.noent.js:6:21:6:41 | req.par ... e-xml") | libxml.noent.js:6:21:6:41 | req.par ... e-xml") | libxml.noent.js:6:21:6:41 | req.par ... e-xml") | A $@ is parsed as XML without guarding against external entity expansion. | libxml.noent.js:6:21:6:41 | req.par ... e-xml") | user-provided value |
53+
| libxml.noent.js:11:21:11:41 | req.par ... e-xml") | libxml.noent.js:11:21:11:41 | req.par ... e-xml") | libxml.noent.js:11:21:11:41 | req.par ... e-xml") | A $@ is parsed as XML without guarding against external entity expansion. | libxml.noent.js:11:21:11:41 | req.par ... e-xml") | user-provided value |
54+
| libxml.noent.js:14:27:14:47 | req.par ... e-xml") | libxml.noent.js:14:27:14:47 | req.par ... e-xml") | libxml.noent.js:14:27:14:47 | req.par ... e-xml") | A $@ is parsed as XML without guarding against external entity expansion. | libxml.noent.js:14:27:14:47 | req.par ... e-xml") | user-provided value |
55+
| libxml.noent.js:16:27:16:66 | req.fil ... 'utf8') | libxml.noent.js:16:27:16:35 | req.files | libxml.noent.js:16:27:16:66 | req.fil ... 'utf8') | A $@ is parsed as XML without guarding against external entity expansion. | libxml.noent.js:16:27:16:35 | req.files | user-provided value |
3456
| libxml.sax.js:6:22:6:42 | req.par ... e-xml") | libxml.sax.js:6:22:6:42 | req.par ... e-xml") | libxml.sax.js:6:22:6:42 | req.par ... e-xml") | A $@ is parsed as XML without guarding against external entity expansion. | libxml.sax.js:6:22:6:42 | req.par ... e-xml") | user-provided value |
3557
| libxml.saxpush.js:6:15:6:35 | req.par ... e-xml") | libxml.saxpush.js:6:15:6:35 | req.par ... e-xml") | libxml.saxpush.js:6:15:6:35 | req.par ... e-xml") | A $@ is parsed as XML without guarding against external entity expansion. | libxml.saxpush.js:6:15:6:35 | req.par ... e-xml") | user-provided value |

javascript/ql/test/query-tests/Security/CWE-611/libxml.noent.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,16 @@ express().get('/some/path', function(req) {
55
// NOT OK: unguarded entity expansion
66
libxmljs.parseXml(req.param("some-xml"), { noent: true });
77
});
8+
9+
express().post('/some/path', function(req, res) {
10+
// NOT OK: unguarded entity expansion
11+
libxmljs.parseXml(req.param("some-xml"), { noent: true });
12+
13+
// NOT OK: unguarded entity expansion
14+
libxmljs.parseXmlString(req.param("some-xml"), {noent:true})
15+
// NOT OK: unguarded entity expansion
16+
libxmljs.parseXmlString(req.files.products.data.toString('utf8'), {noent:true})
17+
18+
// OK - no entity expansion
19+
libxmljs.parseXmlString(req.files.products.data.toString('utf8'), {noent:false})
20+
});

0 commit comments

Comments
 (0)