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
1010 */
1111class TanstackStep extends DataFlow:: AdditionalFlowStep {
1212 override predicate step ( DataFlow:: Node node1 , DataFlow:: Node node2 ) {
13- exists ( DataFlow :: CallNode useQuery |
13+ exists ( API :: CallNode useQuery |
1414 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 ( )
2417 )
2518 }
2619}
2720
2821/**
2922 * Retrieves a call node representing a useQuery invocation from the '@tanstack/react-query' module.
3023 */
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 ( )
3326}
Original file line number Diff line number Diff line change 11#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 |
33edges
44| test.jsx:5:11:5:63 | response | test.jsx:6:24:6:31 | response | provenance | |
55| test.jsx:5:22:5:63 | await f ... ntent") | test.jsx:5:11:5:63 | response | provenance | |
88| test.jsx:6:18:6:38 | await r ... .json() | test.jsx:6:11:6:38 | data | provenance | |
99| test.jsx:6:24:6:31 | response | test.jsx:6:24:6:38 | response.json() | provenance | |
1010| 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 | |
1313nodes
1414| test.jsx:5:11:5:63 | response | semmle.label | response |
1515| test.jsx:5:22:5:63 | await f ... ntent") | semmle.label | await f ... ntent") |
1919| test.jsx:6:24:6:31 | response | semmle.label | response |
2020| test.jsx:6:24:6:38 | response.json() | semmle.label | response.json() |
2121| 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 |
2424subpaths
Original file line number Diff line number Diff line change 11import React from "react" ;
2- import { useQuery } from "@tanstack/react-query " ;
2+ import { useQuery } from "./wrapper " ;
33
44const fetchContent = async ( ) => {
55 const response = await fetch ( "https://example.com/content" ) ; // $ Source[js/xss]
66 const data = await response . json ( ) ;
77 return data ;
88} ;
99
10+ const getQueryOptions = ( ) => {
11+ return { queryFn : fetchContent } ;
12+ }
13+
1014const ContentWithDangerousHtml = ( ) => {
1115 const { data, error, isLoading } = useQuery (
12- {
13- queryFn : fetchContent
14- }
16+ getQueryOptions ( )
1517 ) ;
1618
1719 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