Skip to content

Commit 4c97b0c

Browse files
Merge pull request #16529 from joefarebrother/python-flask-session-interface
Python: Model Flask SessionInterface request parameter
2 parents 174f212 + 2db1fbc commit 4c97b0c

File tree

3 files changed

+22
-0
lines changed

3 files changed

+22
-0
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
category: minorAnalysis
3+
---
4+
* The `request` parameter of Flask `SessionInterface.open_session` method is now modeled as a remote flow source.

python/ql/lib/semmle/python/frameworks/Flask.qll

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,19 @@ module Flask {
101101
/** Gets a reference to the `flask.request` object. */
102102
API::Node request() {
103103
result = API::moduleImport(["flask", "flask_restful"]).getMember("request")
104+
or
105+
result = sessionInterfaceRequestParam()
106+
}
107+
108+
/** Gets a `request` parameter of an implementation of `open_session` in a subclass of `flask.sessions.SessionInterface` */
109+
private API::Node sessionInterfaceRequestParam() {
110+
result =
111+
API::moduleImport("flask")
112+
.getMember("sessions")
113+
.getMember("SessionInterface")
114+
.getASubclass+()
115+
.getMember("open_session")
116+
.getParameter(1)
104117
}
105118

106119
/**
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import flask
2+
3+
class MySessionInterface(flask.sessions.SessionInterface):
4+
def open_session(self, app, request):
5+
ensure_tainted(request) # $tainted

0 commit comments

Comments
 (0)