Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
89 changes: 89 additions & 0 deletions skajedevel_personal_org/xpath-injection-copy.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
public List<Knowledge> Search1(string input)
{
List<Knowledge> searchResult = new List<Knowledge>();
var webRoot = _env.WebRootPath;
var file = System.IO.Path.Combine(webRoot,"Knowledgebase.xml");

XmlDocument XmlDoc = new XmlDocument();
XmlDoc.Load(file);

XPathNavigator nav = XmlDoc.CreateNavigator();
// ruleid: xpath-injection
XPathExpression expr = nav.Compile(@"//knowledge[tags[contains(text(),'" + input + "')] and sensitivity/text() ='Public']");
}

public List<Knowledge> Search2(string input)
{
List<Knowledge> searchResult = new List<Knowledge>();
//string input;
var webRoot = _env.WebRootPath;
var file = System.IO.Path.Combine(webRoot,"Knowledgebase.xml");

XmlDocument XmlDoc = new XmlDocument();
XmlDoc.Load(file);

XPathNavigator nav = XmlDoc.CreateNavigator();
// ok: xpath-injection
XPathExpression expr = nav.Compile(@"//knowledge[tags[contains(text(),'keyword')] and sensitivity/text() ='Public']");

var matchedNodes = nav.Select(expr);
}

public List<Knowledge> Search3(string input)
{
List<Knowledge> searchResult = new List<Knowledge>();
var webRoot = _env.WebRootPath;
var file = System.IO.Path.Combine(webRoot, "Knowledgebase.xml");

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(file);

XPathNavigator nav = xmlDoc.CreateNavigator();
// ruleid: xpath-injection
XPathExpression expr = nav.Compile($@"//knowledge[tags[contains(text(),'{input}')] and sensitivity/text()='Public']");

XPathNodeIterator nodes = nav.Select(expr);
}


public List<Knowledge> Search4(string input)
{
List<Knowledge> searchResult = new List<Knowledge>();
var webRoot = _env.WebRootPath;
var file = System.IO.Path.Combine(webRoot,"Knowledgebase.xml");

XmlDocument XmlDoc = new XmlDocument();
XmlDoc.Load(file);

XPathNavigator nav = XmlDoc.CreateNavigator();
// ruleid: xpath-injection
Object expr = nav.Select(@"//knowledge[tags[contains(text(),'" + input + "')] and sensitivity/text() ='Public']");
}

public List<Knowledge> Search5(string input)
{
List<Knowledge> searchResult = new List<Knowledge>();
var webRoot = _env.WebRootPath;
var file = System.IO.Path.Combine(webRoot,"Knowledgebase.xml");

XmlDocument XmlDoc = new XmlDocument();
XmlDoc.Load(file);

XPathNavigator nav = XmlDoc.CreateNavigator();
// ruleid: xpath-injection
var expr = nav.Select($@"//knowledge[tags[contains(text(),'{input}')] and sensitivity/text()='Public']");
}

public List<Knowledge> Search6(string input)
{
List<Knowledge> searchResult = new List<Knowledge>();
var webRoot = _env.WebRootPath;
var file = System.IO.Path.Combine(webRoot,"Knowledgebase.xml");

XmlDocument XmlDoc = new XmlDocument();
XmlDoc.Load(file);

XPathNavigator nav = XmlDoc.CreateNavigator();
// ruleid: xpath-injection
var expr = nav.SelectSingleNode($@"//knowledge[tags[contains(text(),'{input}')] and sensitivity/text()='Public']");
}
52 changes: 52 additions & 0 deletions skajedevel_personal_org/xpath-injection-copy.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
rules:
- id: xpath-injection-copy
message: XPath queries are constructed dynamically on user-controlled input. This
vulnerability in code could lead to an XPath Injection exploitation.
severity: ERROR
metadata:
likelihood: MEDIUM
impact: MEDIUM
confidence: MEDIUM
category: security
cwe:
- 'CWE-643: Improper Neutralization of Data within XPath Expressions (''XPath
Injection'')'
owasp:
- A03:2021 - Injection
references:
- https://owasp.org/Top10/A03_2021-Injection/
- https://cwe.mitre.org/data/definitions/643.html
subcategory:
- vuln
technology:
- .net
license: Semgrep Rules License v1.0. For more details, visit semgrep.dev/legal/rules-license
vulnerability_class:
- XPath Injection
languages:
- csharp
mode: taint
pattern-sources:
- pattern-either:
- pattern: $T $M($INPUT,...) {...}
- pattern: |
$T $M(...) {
...
string $INPUT;
}
pattern-sinks:
- pattern-either:
- pattern: XPathExpression $EXPR = $NAV.Compile("..." + $INPUT + "...");
- pattern: XPathExpression $EXPR = $NAV.Compile($"...{$INPUT}...");
- pattern: var $EXPR = $NAV.Compile("..." + $INPUT + "...");
- pattern: var $EXPR = $NAV.Compile($"...{$INPUT}...");
- pattern: XPathNodeIterator $NODE = $NAV.Select("..." + $INPUT + "...");
- pattern: XPathNodeIterator $NODE = $NAV.Select($"...{$INPUT}...");
- pattern: var $NODE = $NAV.Select("..." + $INPUT + "...");
- pattern: var $NODE = $NAV.Select($"...{$INPUT}...");
- pattern: var $NODE = $NAV.SelectSingleNode("..." + $INPUT + "...");
- pattern: var $NODE = $NAV.SelectSingleNode($"...{$INPUT}...");
- pattern: Object $OBJ = $NAV.Evaluate("..." + $INPUT + "...");
- pattern: Object $OBJ = $NAV.Evaluate($"...{$INPUT}...");
- pattern: var $OBJ = $NAV.Evaluate("..." + $INPUT + "...");
- pattern: var $OBJ = $NAV.Evaluate($"...{$INPUT}...");
Loading