Skip to content

Commit b9754df

Browse files
Add case for void-returning handler methods
1 parent 00892e1 commit b9754df

File tree

3 files changed

+16
-3
lines changed

3 files changed

+16
-3
lines changed

csharp/ql/lib/semmle/code/csharp/frameworks/Razor.qll

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -251,10 +251,18 @@ private MethodCall getAPageCall(PageModelClass pm) {
251251
["Page", "RedirectToPage"])
252252
}
253253

254+
private MethodCall getImplicitThisCallInVoidHandler(PageModelClass pm) {
255+
result.getEnclosingCallable() = pm.getAHandlerMethod() and
256+
result.getEnclosingCallable().getReturnType() instanceof VoidType and
257+
result.hasImplicitThisQualifier()
258+
}
259+
254260
private class PageModelJumpNode extends DataFlow::NonLocalJumpNode {
255261
PageModelClass pm;
256262

257-
PageModelJumpNode() { this.asExpr() = getAPageCall(pm).getQualifier() }
263+
PageModelJumpNode() {
264+
this.asExpr() = [getAPageCall(pm), getImplicitThisCallInVoidHandler(pm)].getQualifier()
265+
}
258266

259267
override DataFlow::Node getAJumpSuccessor(boolean preservesValue) {
260268
preservesValue = true and

csharp/ql/test/query-tests/Security Features/CWE-079/XssPageModels/TestModel.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,16 @@
55
namespace test;
66

77
class TestModel : PageModel {
8-
public string Name {get; set; } = "abc";
8+
public string Name { get; set; } = "abc";
99

1010
private string source() { return "x"; }
1111

12-
public async Task<IActionResult> OnGetAsync() {
12+
public async Task<IActionResult> OnPostAsync() {
1313
Name = source();
1414
return Page();
1515
}
16+
17+
public void OnGet() {
18+
Name = source();
19+
}
1620
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
| TestPage.cshtml:5:16:5:25 | access to property Name | TestModel.cs:13:16:13:23 | call to method source | TestPage.cshtml:5:16:5:25 | access to property Name | Xss |
2+
| TestPage.cshtml:5:16:5:25 | access to property Name | TestModel.cs:18:16:18:23 | call to method source | TestPage.cshtml:5:16:5:25 | access to property Name | Xss |

0 commit comments

Comments
 (0)