File tree Expand file tree Collapse file tree 2 files changed +40
-1
lines changed
lib/semmle/python/frameworks
test/library-tests/frameworks/flask Expand file tree Collapse file tree 2 files changed +40
-1
lines changed Original file line number Diff line number Diff line change @@ -519,4 +519,32 @@ module Flask {
519519
520520 override DataFlow:: Node getValueArg ( ) { none ( ) }
521521 }
522+
523+ /**
524+ * A call to `flask.send_from_directory`.
525+ *
526+ * See https://flask.palletsprojects.com/en/1.1.x/api/#flask.send_from_directory
527+ */
528+ class FlaskSendFromDirectory extends FileSystemAccess:: Range , DataFlow:: CallCfgNode {
529+ FlaskSendFromDirectory ( ) {
530+ this = API:: moduleImport ( "flask" ) .getMember ( "send_from_directory" ) .getACall ( )
531+ }
532+
533+ override DataFlow:: Node getAPathArgument ( ) {
534+ result in [ this .getArg ( _) , this .getArgByName ( [ "directory" , "filename" ] ) ]
535+ }
536+ }
537+
538+ /**
539+ * A call to `flask.send_file`.
540+ *
541+ * See https://flask.palletsprojects.com/en/1.1.x/api/#flask.send_file
542+ */
543+ class FlaskSendFile extends FileSystemAccess:: Range , DataFlow:: CallCfgNode {
544+ FlaskSendFile ( ) { this = API:: moduleImport ( "flask" ) .getMember ( "send_file" ) .getACall ( ) }
545+
546+ override DataFlow:: Node getAPathArgument ( ) {
547+ result in [ this .getArg ( 0 ) , this .getArgByName ( "filename_or_fp" ) ]
548+ }
549+ }
522550}
Original file line number Diff line number Diff line change 1- from flask import Flask , request
1+ from flask import Flask , request , send_from_directory , send_file
22app = Flask (__name__ )
33
44@app .route ("/save-uploaded-file" ) # $routeSetup="/save-uploaded-file"
55def test_taint (): # $requestHandler
66 request .files ['key' ].save ("path" ) # $ getAPathArgument="path"
7+
8+
9+ @app .route ("/path-injection" ) # $routeSetup="/path-injection"
10+ def test_path (): # $requestHandler
11+
12+ send_from_directory ("filepath" ,"file" ) # $ getAPathArgument="filepath" getAPathArgument="file"
13+ send_file ("file" ) # $ getAPathArgument="file"
14+
15+ send_from_directory (directory = "filepath" ,"file" ) # $ getAPathArgument="filepath" getAPathArgument="file"
16+ send_from_directory (filename = "filepath" ,"file" ) # $ getAPathArgument="filepath" getAPathArgument="file"
17+ send_file (filename_or_fp = "file" ) # $ getAPathArgument="file"
You can’t perform that action at this time.
0 commit comments