Skip to content

Commit 933b55d

Browse files
committed
Track interfile useRouter
1 parent 6c095d8 commit 933b55d

File tree

5 files changed

+46
-1
lines changed

5 files changed

+46
-1
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ module NextJS {
248248
* Gets a reference to a [Next.js router](https://nextjs.org/docs/api-reference/next/router).
249249
*/
250250
DataFlow::SourceNode nextRouter() {
251-
result = DataFlow::moduleMember("next/router", "useRouter").getACall()
251+
result = API::moduleImport("next/router").getMember("useRouter").getACall()
252252
or
253253
result =
254254
API::moduleImport("next/router")

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -579,6 +579,13 @@ nodes
579579
| react-use-router.js:23:43:23:54 | router.query |
580580
| react-use-router.js:23:43:23:61 | router.query.foobar |
581581
| react-use-router.js:23:43:23:61 | router.query.foobar |
582+
| react-use-router.js:29:9:29:30 | router |
583+
| react-use-router.js:29:18:29:30 | myUseRouter() |
584+
| react-use-router.js:33:21:33:26 | router |
585+
| react-use-router.js:33:21:33:32 | router.query |
586+
| react-use-router.js:33:21:33:32 | router.query |
587+
| react-use-router.js:33:21:33:39 | router.query.foobar |
588+
| react-use-router.js:33:21:33:39 | router.query.foobar |
582589
| react-use-state.js:4:9:4:49 | state |
583590
| react-use-state.js:4:9:4:49 | state |
584591
| react-use-state.js:4:10:4:14 | state |
@@ -1749,6 +1756,14 @@ edges
17491756
| react-use-router.js:23:43:23:54 | router.query | react-use-router.js:23:43:23:61 | router.query.foobar |
17501757
| react-use-router.js:23:43:23:54 | router.query | react-use-router.js:23:43:23:61 | router.query.foobar |
17511758
| react-use-router.js:23:43:23:61 | router.query.foobar | react-use-router.js:22:17:22:22 | router |
1759+
| react-use-router.js:29:9:29:30 | router | react-use-router.js:33:21:33:26 | router |
1760+
| react-use-router.js:29:18:29:30 | myUseRouter() | react-use-router.js:29:9:29:30 | router |
1761+
| react-use-router.js:33:21:33:26 | router | react-use-router.js:33:21:33:32 | router.query |
1762+
| react-use-router.js:33:21:33:32 | router.query | react-use-router.js:33:21:33:39 | router.query.foobar |
1763+
| react-use-router.js:33:21:33:32 | router.query | react-use-router.js:33:21:33:39 | router.query.foobar |
1764+
| react-use-router.js:33:21:33:32 | router.query | react-use-router.js:33:21:33:39 | router.query.foobar |
1765+
| react-use-router.js:33:21:33:32 | router.query | react-use-router.js:33:21:33:39 | router.query.foobar |
1766+
| react-use-router.js:33:21:33:39 | router.query.foobar | react-use-router.js:29:18:29:30 | myUseRouter() |
17521767
| react-use-state.js:4:9:4:49 | state | react-use-state.js:5:51:5:55 | state |
17531768
| react-use-state.js:4:9:4:49 | state | react-use-state.js:5:51:5:55 | state |
17541769
| react-use-state.js:4:9:4:49 | state | react-use-state.js:5:51:5:55 | state |
@@ -2447,6 +2462,7 @@ edges
24472462
| react-use-router.js:11:24:11:42 | router.query.foobar | react-use-router.js:8:21:8:32 | router.query | react-use-router.js:11:24:11:42 | router.query.foobar | Cross-site scripting vulnerability due to $@. | react-use-router.js:8:21:8:32 | router.query | user-provided value |
24482463
| react-use-router.js:11:24:11:42 | router.query.foobar | react-use-router.js:11:24:11:35 | router.query | react-use-router.js:11:24:11:42 | router.query.foobar | Cross-site scripting vulnerability due to $@. | react-use-router.js:11:24:11:35 | router.query | user-provided value |
24492464
| react-use-router.js:23:43:23:61 | router.query.foobar | react-use-router.js:23:43:23:54 | router.query | react-use-router.js:23:43:23:61 | router.query.foobar | Cross-site scripting vulnerability due to $@. | react-use-router.js:23:43:23:54 | router.query | user-provided value |
2465+
| react-use-router.js:33:21:33:39 | router.query.foobar | react-use-router.js:33:21:33:32 | router.query | react-use-router.js:33:21:33:39 | router.query.foobar | Cross-site scripting vulnerability due to $@. | react-use-router.js:33:21:33:32 | router.query | user-provided value |
24502466
| react-use-state.js:5:51:5:55 | state | react-use-state.js:4:38:4:48 | window.name | react-use-state.js:5:51:5:55 | state | Cross-site scripting vulnerability due to $@. | react-use-state.js:4:38:4:48 | window.name | user-provided value |
24512467
| react-use-state.js:11:51:11:55 | state | react-use-state.js:10:14:10:24 | window.name | react-use-state.js:11:51:11:55 | state | Cross-site scripting vulnerability due to $@. | react-use-state.js:10:14:10:24 | window.name | user-provided value |
24522468
| react-use-state.js:17:51:17:55 | state | react-use-state.js:16:20:16:30 | window.name | react-use-state.js:17:51:17:55 | state | Cross-site scripting vulnerability due to $@. | react-use-state.js:16:20:16:30 | window.name | user-provided value |

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -591,6 +591,13 @@ nodes
591591
| react-use-router.js:23:43:23:54 | router.query |
592592
| react-use-router.js:23:43:23:61 | router.query.foobar |
593593
| react-use-router.js:23:43:23:61 | router.query.foobar |
594+
| react-use-router.js:29:9:29:30 | router |
595+
| react-use-router.js:29:18:29:30 | myUseRouter() |
596+
| react-use-router.js:33:21:33:26 | router |
597+
| react-use-router.js:33:21:33:32 | router.query |
598+
| react-use-router.js:33:21:33:32 | router.query |
599+
| react-use-router.js:33:21:33:39 | router.query.foobar |
600+
| react-use-router.js:33:21:33:39 | router.query.foobar |
594601
| react-use-state.js:4:9:4:49 | state |
595602
| react-use-state.js:4:9:4:49 | state |
596603
| react-use-state.js:4:10:4:14 | state |
@@ -1811,6 +1818,14 @@ edges
18111818
| react-use-router.js:23:43:23:54 | router.query | react-use-router.js:23:43:23:61 | router.query.foobar |
18121819
| react-use-router.js:23:43:23:54 | router.query | react-use-router.js:23:43:23:61 | router.query.foobar |
18131820
| react-use-router.js:23:43:23:61 | router.query.foobar | react-use-router.js:22:17:22:22 | router |
1821+
| react-use-router.js:29:9:29:30 | router | react-use-router.js:33:21:33:26 | router |
1822+
| react-use-router.js:29:18:29:30 | myUseRouter() | react-use-router.js:29:9:29:30 | router |
1823+
| react-use-router.js:33:21:33:26 | router | react-use-router.js:33:21:33:32 | router.query |
1824+
| react-use-router.js:33:21:33:32 | router.query | react-use-router.js:33:21:33:39 | router.query.foobar |
1825+
| react-use-router.js:33:21:33:32 | router.query | react-use-router.js:33:21:33:39 | router.query.foobar |
1826+
| react-use-router.js:33:21:33:32 | router.query | react-use-router.js:33:21:33:39 | router.query.foobar |
1827+
| react-use-router.js:33:21:33:32 | router.query | react-use-router.js:33:21:33:39 | router.query.foobar |
1828+
| react-use-router.js:33:21:33:39 | router.query.foobar | react-use-router.js:29:18:29:30 | myUseRouter() |
18141829
| react-use-state.js:4:9:4:49 | state | react-use-state.js:5:51:5:55 | state |
18151830
| react-use-state.js:4:9:4:49 | state | react-use-state.js:5:51:5:55 | state |
18161831
| react-use-state.js:4:9:4:49 | state | react-use-state.js:5:51:5:55 | state |
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
import { useRouter } from "next/router";
2+
export let myUseRouter = useRouter;

javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/react-use-router.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,15 @@ function Page({ router }) {
2323
return <span onClick={() => router.push(router.query.foobar)}>Click to XSS 3</span> // NOT OK
2424
}
2525
export const pageWithRouter = withRouter(Page);
26+
27+
import { myUseRouter } from './react-use-router-lib';
28+
export function nextRouterWithLib() {
29+
const router = myUseRouter()
30+
return (
31+
<div>
32+
<span onClick={() => {
33+
router.push(router.query.foobar) // NOT OK
34+
}}>Click to XSS 1</span>
35+
</div>
36+
)
37+
}

0 commit comments

Comments
 (0)