Skip to content

Commit cfbae50

Browse files
committed
Python: convert barrier guard to MaD
1 parent 9b9c930 commit cfbae50

File tree

2 files changed

+9
-16
lines changed

2 files changed

+9
-16
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
extensions:
2+
- addsTo:
3+
pack: codeql/python-all
4+
extensible: barrierGuardModel
5+
data:
6+
- ['AntiSSRF', 'Member[URIValidator].Member[in_domain,in_azure_keyvault_domain,in_azure_storage_domain].Argument[0]', "true", 'request-forgery']

python/ql/lib/semmle/python/security/dataflow/ServerSideRequestForgeryCustomizations.qll

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ private import semmle.python.Concepts
1010
private import semmle.python.dataflow.new.RemoteFlowSources
1111
private import semmle.python.dataflow.new.BarrierGuards
1212
private import semmle.python.ApiGraphs
13+
private import semmle.python.frameworks.data.internal.ApiGraphModels
1314

1415
/**
1516
* Provides default sources, sinks and sanitizers for detecting
@@ -177,21 +178,7 @@ module ServerSideRequestForgery {
177178
)
178179
}
179180

180-
private class UriValidator extends FullUrlControlSanitizer {
181-
UriValidator() { this = DataFlow::BarrierGuard<uri_validator/3>::getABarrierNode() }
182-
}
183-
184-
import semmle.python.dataflow.new.internal.DataFlowPublic
185-
186-
private predicate uri_validator(DataFlow::GuardNode g, ControlFlowNode node, boolean branch) {
187-
exists(DataFlow::CallCfgNode call, string validator_name |
188-
validator_name in ["in_domain", "in_azure_keyvault_domain", "in_azure_storage_domain"] and
189-
call =
190-
API::moduleImport("AntiSSRF").getMember("URIValidator").getMember(validator_name).getACall() and
191-
call.getArg(0).asCfgNode() = node
192-
|
193-
g = call.asCfgNode() and
194-
branch = true
195-
)
181+
private class ExternalRequestForgerySanitizer extends FullUrlControlSanitizer {
182+
ExternalRequestForgerySanitizer() { ModelOutput::barrierNode(this, "request-forgery") }
196183
}
197184
}

0 commit comments

Comments
 (0)