File tree Expand file tree Collapse file tree 4 files changed +18
-21
lines changed
lib/semmle/javascript/frameworks
test/query-tests/Security/CWE-079/DomBasedXssWithResponseThreat Expand file tree Collapse file tree 4 files changed +18
-21
lines changed Original file line number Diff line number Diff line change @@ -10,24 +10,17 @@ private import javascript
10
10
*/
11
11
class TanstackStep extends DataFlow:: AdditionalFlowStep {
12
12
override predicate step ( DataFlow:: Node node1 , DataFlow:: Node node2 ) {
13
- exists ( DataFlow :: CallNode useQuery |
13
+ exists ( API :: CallNode useQuery |
14
14
useQuery = useQueryCall ( ) and
15
- node1 =
16
- useQuery
17
- .getArgument ( 0 )
18
- .getALocalSource ( )
19
- .getAPropertyWrite ( "queryFn" )
20
- .getRhs ( )
21
- .getAFunctionValue ( )
22
- .getAReturn ( ) and
23
- node2 = useQuery .getAPropertyRead ( "data" )
15
+ node1 = useQuery .getParameter ( 0 ) .getMember ( "queryFn" ) .getReturn ( ) .getPromised ( ) .asSink ( ) and
16
+ node2 = useQuery .getReturn ( ) .getMember ( "data" ) .asSource ( )
24
17
)
25
18
}
26
19
}
27
20
28
21
/**
29
22
* Retrieves a call node representing a useQuery invocation from the '@tanstack/react-query' module.
30
23
*/
31
- DataFlow :: CallNode useQueryCall ( ) {
32
- result = DataFlow :: moduleImport ( "@tanstack/react-query" ) .getAPropertyRead ( "useQuery" ) .getACall ( )
24
+ API :: CallNode useQueryCall ( ) {
25
+ result = API :: moduleImport ( "@tanstack/react-query" ) .getMember ( "useQuery" ) .getACall ( )
33
26
}
Original file line number Diff line number Diff line change 1
1
#select
2
- | test.jsx:25 :29:25 :32 | data | test.jsx:5:28:5:63 | fetch(" ... ntent") | test.jsx:25 :29:25 :32 | data | Cross-site scripting vulnerability due to $@. | test.jsx:5:28:5:63 | fetch(" ... ntent") | user-provided value |
2
+ | test.jsx:27 :29:27 :32 | data | test.jsx:5:28:5:63 | fetch(" ... ntent") | test.jsx:27 :29:27 :32 | data | Cross-site scripting vulnerability due to $@. | test.jsx:5:28:5:63 | fetch(" ... ntent") | user-provided value |
3
3
edges
4
4
| test.jsx:5:11:5:63 | response | test.jsx:6:24:6:31 | response | provenance | |
5
5
| test.jsx:5:22:5:63 | await f ... ntent") | test.jsx:5:11:5:63 | response | provenance | |
8
8
| test.jsx:6:18:6:38 | await r ... .json() | test.jsx:6:11:6:38 | data | provenance | |
9
9
| test.jsx:6:24:6:31 | response | test.jsx:6:24:6:38 | response.json() | provenance | |
10
10
| test.jsx:6:24:6:38 | response.json() | test.jsx:6:18:6:38 | await r ... .json() | provenance | |
11
- | test.jsx:7:12:7:15 | data | test.jsx:11 :11:15 :5 | data | provenance | |
12
- | test.jsx:11 :11:15 :5 | data | test.jsx:25 :29:25 :32 | data | provenance | |
11
+ | test.jsx:7:12:7:15 | data | test.jsx:15 :11:17 :5 | data | provenance | |
12
+ | test.jsx:15 :11:17 :5 | data | test.jsx:27 :29:27 :32 | data | provenance | |
13
13
nodes
14
14
| test.jsx:5:11:5:63 | response | semmle.label | response |
15
15
| test.jsx:5:22:5:63 | await f ... ntent") | semmle.label | await f ... ntent") |
19
19
| test.jsx:6:24:6:31 | response | semmle.label | response |
20
20
| test.jsx:6:24:6:38 | response.json() | semmle.label | response.json() |
21
21
| test.jsx:7:12:7:15 | data | semmle.label | data |
22
- | test.jsx:11 :11:15 :5 | data | semmle.label | data |
23
- | test.jsx:25 :29:25 :32 | data | semmle.label | data |
22
+ | test.jsx:15 :11:17 :5 | data | semmle.label | data |
23
+ | test.jsx:27 :29:27 :32 | data | semmle.label | data |
24
24
subpaths
Original file line number Diff line number Diff line change 1
1
import React from "react" ;
2
- import { useQuery } from "@tanstack/react-query " ;
2
+ import { useQuery } from "./wrapper " ;
3
3
4
4
const fetchContent = async ( ) => {
5
5
const response = await fetch ( "https://example.com/content" ) ; // $ Source[js/xss]
6
6
const data = await response . json ( ) ;
7
7
return data ;
8
8
} ;
9
9
10
+ const getQueryOptions = ( ) => {
11
+ return { queryFn : fetchContent } ;
12
+ }
13
+
10
14
const ContentWithDangerousHtml = ( ) => {
11
15
const { data, error, isLoading } = useQuery (
12
- {
13
- queryFn : fetchContent
14
- }
16
+ getQueryOptions ( )
15
17
) ;
16
18
17
19
if ( isLoading ) return < div > Loading...</ div > ;
Original file line number Diff line number Diff line change
1
+ import { useQuery } from "@tanstack/react-query" ;
2
+ export { useQuery }
You can’t perform that action at this time.
0 commit comments