diff --git a/ql/src/experimental/CWE-79/HTMLTemplateEscapingPassthrough.ql b/ql/src/experimental/CWE-79/HTMLTemplateEscapingPassthrough.ql index 74f52e5447e..dc7e3f9f689 100755 --- a/ql/src/experimental/CWE-79/HTMLTemplateEscapingPassthrough.ql +++ b/ql/src/experimental/CWE-79/HTMLTemplateEscapingPassthrough.ql @@ -13,16 +13,16 @@ import go import DataFlow::PathGraph /** - * Holds if the provided src node flows into a conversion to a PassthroughType. + * Holds if the provided `untrusted` node flows into a conversion to a PassthroughType. * The `targetType` parameter gets populated with the name of the PassthroughType, - * and `conversionSink` with the node where the conversion happens. + * and `conversionSink` gets populated with the node where the conversion happens. */ predicate flowsFromUntrustedToConversion( - DataFlow::Node src, string targetType, DataFlow::PathNode conversionSink + DataFlow::PathNode untrusted, string targetType, DataFlow::PathNode conversionSink ) { exists(FlowConfFromUntrustedToPassthroughTypeConversion cfg, DataFlow::PathNode source | cfg.hasFlowPath(source, conversionSink) and - source.getNode() = src and + source.getNode() = untrusted.getNode() and targetType = cfg.getDstTypeName() ) } @@ -46,7 +46,7 @@ class FlowConfFromUntrustedToPassthroughTypeConversion extends TaintTracking::Co FlowConfFromUntrustedToPassthroughTypeConversion() { dstTypeName instanceof PassthroughTypeName and - this = "UnsafeConversion" + dstTypeName + this = "UntrustedToConversion" + dstTypeName } string getDstTypeName() { result = dstTypeName } @@ -68,14 +68,14 @@ class FlowConfFromUntrustedToPassthroughTypeConversion extends TaintTracking::Co * Holds if the provided `conversion` node flows into the provided `execSink`. */ predicate flowsFromConversionToExec( - DataFlow::Node conversion, string targetType, DataFlow::PathNode execSink + DataFlow::PathNode conversion, string targetType, DataFlow::PathNode execSink ) { exists( FlowConfPassthroughTypeConversionToTemplateExecutionCall cfg, DataFlow::PathNode source, DataFlow::PathNode execSinkLocal | cfg.hasFlowPath(source, execSinkLocal) and - source.getNode() = conversion and + source.getNode() = conversion.getNode() and execSink.getNode() = execSinkLocal.getNode() and targetType = cfg.getDstTypeName() ) @@ -139,7 +139,7 @@ class FlowConfFromUntrustedToTemplateExecutionCall extends TaintTracking::Config } /** - * Holds if the provided `conversion` node flows into the provided `execSink`. + * Holds if the provided `untrusted` node flows into the provided `execSink`. */ predicate flowsFromUntrustedToExec(DataFlow::PathNode untrusted, DataFlow::PathNode execSink) { exists(FlowConfFromUntrustedToTemplateExecutionCall cfg | cfg.hasFlowPath(untrusted, execSink)) @@ -154,9 +154,9 @@ where // C = template execution // Flows: // A -> B - flowsFromUntrustedToConversion(untrustedSource.getNode(), targetTypeName, conversionSink) and + flowsFromUntrustedToConversion(untrustedSource, targetTypeName, conversionSink) and // B -> C - flowsFromConversionToExec(conversionSink.getNode(), targetTypeName, tplExecCall) and + flowsFromConversionToExec(conversionSink, targetTypeName, tplExecCall) and // A -> C flowsFromUntrustedToExec(untrustedSource, tplExecCall) select tplExecCall.getNode(), untrustedSource, tplExecCall,