diff --git a/python/ql/src/experimental/Security/CWE-611/XmlInjection.py b/python/ql/src/experimental/Security/CWE-611/XmlEntityInjection.py similarity index 100% rename from python/ql/src/experimental/Security/CWE-611/XmlInjection.py rename to python/ql/src/experimental/Security/CWE-611/XmlEntityInjection.py diff --git a/python/ql/src/experimental/Security/CWE-611/XmlInjection.qhelp b/python/ql/src/experimental/Security/CWE-611/XmlEntityInjection.qhelp similarity index 98% rename from python/ql/src/experimental/Security/CWE-611/XmlInjection.qhelp rename to python/ql/src/experimental/Security/CWE-611/XmlEntityInjection.qhelp index e617835bdef..6da1bf1d306 100644 --- a/python/ql/src/experimental/Security/CWE-611/XmlInjection.qhelp +++ b/python/ql/src/experimental/Security/CWE-611/XmlEntityInjection.qhelp @@ -26,7 +26,7 @@ to prevent any potentially malicious operation. The following example calls xml.etree.ElementTree.fromstring using a parser (lxml.etree.XMLParser) that is not safely configured on untrusted data, and is therefore inherently unsafe.

- +

Providing an input (xml_content) like the following XML content against /bad, the request response would contain the contents of /etc/passwd. diff --git a/python/ql/src/experimental/Security/CWE-611/XmlInjection.ql b/python/ql/src/experimental/Security/CWE-611/XmlEntityInjection.ql similarity index 62% rename from python/ql/src/experimental/Security/CWE-611/XmlInjection.ql rename to python/ql/src/experimental/Security/CWE-611/XmlEntityInjection.ql index 78213f624ea..8f22ded4b15 100644 --- a/python/ql/src/experimental/Security/CWE-611/XmlInjection.ql +++ b/python/ql/src/experimental/Security/CWE-611/XmlEntityInjection.ql @@ -1,9 +1,9 @@ /** - * @name XML injection - * @description User input should not be parsed without security options enabled. + * @name XML Entity injection + * @description User input should not be parsed allowing the injection of entities. * @kind path-problem * @problem.severity error - * @id py/xml-injection + * @id py/xml-entity-injection * @tags security * external/cwe/cwe-611 * external/cwe/cwe-776 @@ -12,11 +12,11 @@ // determine precision above import python -import experimental.semmle.python.security.dataflow.XmlInjection +import experimental.semmle.python.security.dataflow.XmlEntityInjection import DataFlow::PathGraph from DataFlow::PathNode source, DataFlow::PathNode sink, string kind -where XmlInjection::xmlInjectionVulnerable(source, sink, kind) +where XmlEntityInjection::xmlEntityInjectionVulnerable(source, sink, kind) select sink.getNode(), source, sink, "$@ XML input is constructed from a $@ and is vulnerable to " + kind + ".", sink.getNode(), "This", source.getNode(), "user-provided value" diff --git a/python/ql/src/experimental/semmle/python/security/dataflow/XmlInjection.qll b/python/ql/src/experimental/semmle/python/security/dataflow/XmlEntityInjection.qll similarity index 65% rename from python/ql/src/experimental/semmle/python/security/dataflow/XmlInjection.qll rename to python/ql/src/experimental/semmle/python/security/dataflow/XmlEntityInjection.qll index 90e2c9bf342..4669e0e430d 100644 --- a/python/ql/src/experimental/semmle/python/security/dataflow/XmlInjection.qll +++ b/python/ql/src/experimental/semmle/python/security/dataflow/XmlEntityInjection.qll @@ -5,11 +5,11 @@ import semmle.python.dataflow.new.TaintTracking import semmle.python.dataflow.new.RemoteFlowSources import semmle.python.dataflow.new.BarrierGuards -module XmlInjection { - import XmlInjectionCustomizations::XmlInjection +module XmlEntityInjection { + import XmlEntityInjectionCustomizations::XmlEntityInjection - class XMLInjectionConfiguration extends TaintTracking::Configuration { - XMLInjectionConfiguration() { this = "XMLInjectionConfiguration" } + class XmlEntityInjectionConfiguration extends TaintTracking::Configuration { + XmlEntityInjectionConfiguration() { this = "XmlEntityInjectionConfiguration" } override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSourceAsSource @@ -29,13 +29,15 @@ module XmlInjection { private import DataFlow::PathGraph /** Holds if there is an XML injection from `source` to `sink` */ - predicate xmlInjection(DataFlow::PathNode source, DataFlow::PathNode sink) { - any(XMLInjectionConfiguration xmlInjectionConfig).hasFlowPath(source, sink) + predicate xmlEntityInjection(DataFlow::PathNode source, DataFlow::PathNode sink) { + any(XmlEntityInjectionConfiguration x).hasFlowPath(source, sink) } /** Holds if there is an XML injection from `source` to `sink` vulnerable to `kind` */ - predicate xmlInjectionVulnerable(DataFlow::PathNode source, DataFlow::PathNode sink, string kind) { - xmlInjection(source, sink) and + predicate xmlEntityInjectionVulnerable( + DataFlow::PathNode source, DataFlow::PathNode sink, string kind + ) { + xmlEntityInjection(source, sink) and ( xmlParsingInputAsVulnerableSink(sink.getNode(), kind) or xmlParserInputAsVulnerableSink(sink.getNode(), kind) diff --git a/python/ql/src/experimental/semmle/python/security/dataflow/XmlInjectionCustomizations.qll b/python/ql/src/experimental/semmle/python/security/dataflow/XmlEntityInjectionCustomizations.qll similarity index 99% rename from python/ql/src/experimental/semmle/python/security/dataflow/XmlInjectionCustomizations.qll rename to python/ql/src/experimental/semmle/python/security/dataflow/XmlEntityInjectionCustomizations.qll index 3e9dd22c69c..177f8979956 100644 --- a/python/ql/src/experimental/semmle/python/security/dataflow/XmlInjectionCustomizations.qll +++ b/python/ql/src/experimental/semmle/python/security/dataflow/XmlEntityInjectionCustomizations.qll @@ -15,7 +15,7 @@ private import semmle.python.ApiGraphs * Provides default sources, sinks and sanitizers for detecting "xml injection" * vulnerabilities, as well as extension points for adding your own. */ -module XmlInjection { +module XmlEntityInjection { /** * A data flow source for "xml injection" vulnerabilities. */ diff --git a/python/ql/test/experimental/query-tests/Security/CWE-611/XmlInjection.expected b/python/ql/test/experimental/query-tests/Security/CWE-611/XmlEntityInjection.expected similarity index 100% rename from python/ql/test/experimental/query-tests/Security/CWE-611/XmlInjection.expected rename to python/ql/test/experimental/query-tests/Security/CWE-611/XmlEntityInjection.expected diff --git a/python/ql/test/experimental/query-tests/Security/CWE-611/XmlEntityInjection.qlref b/python/ql/test/experimental/query-tests/Security/CWE-611/XmlEntityInjection.qlref new file mode 100644 index 00000000000..36a7c8845fb --- /dev/null +++ b/python/ql/test/experimental/query-tests/Security/CWE-611/XmlEntityInjection.qlref @@ -0,0 +1 @@ +experimental/Security/CWE-611/XmlEntityInjection.ql diff --git a/python/ql/test/experimental/query-tests/Security/CWE-611/XmlInjection.qlref b/python/ql/test/experimental/query-tests/Security/CWE-611/XmlInjection.qlref deleted file mode 100644 index 24d483666ac..00000000000 --- a/python/ql/test/experimental/query-tests/Security/CWE-611/XmlInjection.qlref +++ /dev/null @@ -1 +0,0 @@ -experimental/Security/CWE-611/XmlInjection.ql