diff --git a/javascript/ql/experimental/adaptivethreatmodeling/lib/experimental/adaptivethreatmodeling/EndpointScoring.qll b/javascript/ql/experimental/adaptivethreatmodeling/lib/experimental/adaptivethreatmodeling/EndpointScoring.qll index 153cb7f31e5..2e25fb78ef3 100644 --- a/javascript/ql/experimental/adaptivethreatmodeling/lib/experimental/adaptivethreatmodeling/EndpointScoring.qll +++ b/javascript/ql/experimental/adaptivethreatmodeling/lib/experimental/adaptivethreatmodeling/EndpointScoring.qll @@ -49,6 +49,14 @@ module ModelScoring { predicate internalEnpointScores(DataFlow::Node endpoint, string prediction) = remoteScoreEndpoints(getEndpointPrompt/2)(endpoint, prediction) + + // For debugging queries, don't limit these to effective sinks: + predicate getEndpointPromptForAnyEndpoint(DataFlow::Node node, string prompt) { + prompt = ModelPrompt::ModelPrompt::getPrompt(node) + } + + predicate internalEnpointScoresForAnyEndpoint(DataFlow::Node endpoint, string prediction) = + remoteScoreEndpoints(getEndpointPromptForAnyEndpoint/2)(endpoint, prediction) } /** diff --git a/javascript/ql/experimental/adaptivethreatmodeling/test/endpoint_large_scale/SurfaceKnownSinks.expected b/javascript/ql/experimental/adaptivethreatmodeling/test/endpoint_large_scale/SurfaceKnownSinks.expected new file mode 100644 index 00000000000..3377346d8d8 --- /dev/null +++ b/javascript/ql/experimental/adaptivethreatmodeling/test/endpoint_large_scale/SurfaceKnownSinks.expected @@ -0,0 +1,458 @@ +| DomBasedXssAtmConfig | 1 | autogenerated/Xss/DomBasedXss/addEventListener.js:2:20:2:29 | event.data | xss sink | xss sink | # Examples of security vulnerability sinks and non-sinks\n\|Dataflow node\|Neighborhood\|Classification\|\n\|---\|---\|---\|\n\|`WPUrls.ajaxurl`\|` dataType: json , type: POST , url: WPUrls.ajaxurl, data: data, complete: function( json ) {`\|non-sink\|\n\|`[ handlebars ]`\|` use strict ; if (typeof define === function && define.amd) { define([ handlebars ], function(Handlebars) { return factory(Handlebars.default Handlebars); });`\|path injection sink\|\n\|`url`\|`} else { var matcher = new RegExp($.map(items.wanikanify_blackList, function(val) { return ( +val+ ) ;}).join( )); return matcher.test(url); } }`\|non-sink\|\n\|`_.bind(connection.createGame, this, socket)`\|`var connection = module.exports = function (socket) { socket.on( game:create , _.bind(connection.createGame, this, socket)); socket.on( game:spectate , _.bind(game.spectate, this, socket)); socket.on( register , _.bind(connection.register, this, socket));`\|non-sink\|\n\|`sql`\|` if (err) throw err; const sql = UPDATE customers SET address = Canyon 123 WHERE address = Valley 345 ; con.query(sql, function (err, result) { if (err) throw err; console.log(result.affectedRows + record(s) updated );`\|sql injection sink\|\n\|`