azure-func-slots-extensions-write
match (effective permission)
{
"action": "Microsoft.Web/sites/slots/extensions/write",
"scope_type": "resource|resourceGroup|subscription"
}
emit
| source type | Identity |
|---|---|
| source | <principal> |
| target | <function app deployment slot> |
| permissions | Microsoft.Web/sites/slots/extensions/write |
| conditions | service_state |
Narrative
{principal.name} can deploy arbitrary code to slot {target.name} via the Kudu extensions API (slots/extensions/write).
Raw rule rules/derived/azure/functions.yaml
id: azure-func-slots-extensions-write
emits: CanModifyCode
match_effective_permission:
action: Microsoft.Web/sites/slots/extensions/write
scope_type: resource|resourceGroup|subscription
emit:
source_type: Identity
source: <principal>
target: <function app deployment slot>
permissions:
- Microsoft.Web/sites/slots/extensions/write
conditions:
- service_state
escalation: 'Slot-scoped Kudu/SCM ZipDeploy / VFS write: deploy attacker code into a slot, then swap
it live.'
false_positive_note: Code runs on next invoke/restart of the slot or after a swap into a running slot
-> CONDITIONAL(trigger_exists) absent a trigger.
narrative: '{principal.name} can deploy arbitrary code to slot {target.name} via the Kudu extensions
API (slots/extensions/write).'