Introduction
Merci d'utiliser OWASP ServerlessGoat !
Cette application serverless démontre les failles de sécurité serverless courantes telles que décrites dans le guide Top 10 des faiblesses de la sécurité Serverless https://github.com/puresec/sas-top-10.
ServerlessGoat a été créé dans les buts pédagogiques suivants :
- Enseigner aux développeurs et aux professionnels de la sécurité les risques et faiblesses courants de la couche applicative serverless
- Sensibiliser à la manière dont les faiblesses de la couche applicative serverless peuvent être exploitées
- Enseigner aux développeurs et aux professionnels de la sécurité les bonnes pratiques en matière de sécurité serverless
Vous pouvez trouver plus d'informations sur WebGoat à l'adresse : https://www.owasp.org/index.php/OWASP_Serverless_Goat
AVERTISSEMENT 1 : Cette application contient des vulnérabilités. Utilisez-la uniquement à des fins de formation.
AVERTISSEMENT 2 : Ce programme est uniquement destiné à des fins éducatives. N'essayez pas ces techniques sans l'autorisation des propriétaires de l'application.
NOTE : L'application a été développée de manière à ne pas mettre votre compte AWS en danger. Les vulnérabilités introduites sont contenues dans les limites de cette application spécifique. Néanmoins, les utilisateurs ne sont pas encouragés à déployer l'application dans des environnements de production.
Déploiement
ServerlessGoat est une simple application AWS Lambda qui sert de service de conversion de fichiers MS-Word .doc en texte brut. Elle reçoit en entrée l'URL d'un fichier .doc et renvoie le texte contenu dans le document à l'appelant de l'API.
L'application est empaquetée et publiée pour le déploiement via l'AWS Serverless Application Repository.
Étapes pour le déploiement :
- Assurez-vous d'être connecté à votre compte AWS
- Cliquez sur le lien suivant : AWS Serverless Application Repository
- Cliquez sur 'Deploy'
- Cliquez sur 'Deploy' (à nouveau)
- Attendez que le message « Your application has been deployed » s'affiche
- Cliquez sur 'View CloudFormation Stack'
- Sous 'Outputs', vous trouverez l'URL de l'application (WebsiteURL)
Aide-mémoire
La procédure complète des leçons (en cours de développement) se trouve dans le fichier LESSONS.md
Les problèmes de sécurité suivants existent dans l'application :
- Injection de données d'événement, conduisant à une injection de commandes OS (SAS-01)
- Les utilisateurs peuvent invoquer l'API avec une valeur de paramètre
document_url contenant des commandes Linux. Par exemple ; ls -LF
- Gestion inappropriée des exceptions et messages d'erreur verbeux (SAS-10), conduisant à la divulgation d'informations sensibles
- Par exemple, invoquer l'API sans le paramètre requis renverra une trace de pile/exception verbeuse
- Configuration de déploiement serverless non sécurisée (SAS-03)
- Bucket S3 ouvert publiquement (son nom peut être découvert à partir du sous-domaine/préfixe de l'URL)
- Le paramètre
document_url n'est pas défini comme paramètre « requis » dans API Gateway et peut être omis
- Permissions et rôles de fonction sur-privilégiés, conduisant à une fuite de données stockées dans une table DynamoDB (SAS-04)
- La fonction dispose de permissions CRUD sur la table Dynamo, qui peuvent être abusées pour lire des données sensibles ou manipuler des données
- La fonction dispose d'une politique FullAccess sur le bucket S3, conduisant à une altération des données et à une fuite de données, etc.
- Surveillance et journalisation inadaptées des fonctions (SAS-05) - l'application ne journalise pas correctement les attaques et erreurs de la couche applicative (peut être démontré via CloudWatch/CloudTrail)
- Dépendances tierces non sécurisées (SAS-06) - peuvent être détectées en analysant le projet avec un outil d'analyse OSS
- Le paquet vulnérable est
node-uuid
- Déni de service au niveau applicatif (SAS-08), qui peut être facilement démontré
- Un attaquant peut invoquer l'API de manière récursive à plusieurs reprises, engendrant ainsi suffisamment d'instances pour atteindre la limite de capacité réservée de la fonction (fixée à 5). Par exemple :
https://i92uw6vw73.execute-api.us-east-1.amazonaws.com/Prod/api/convert?document_url=https%3A%2F%2Fi92uw6vw73.execute-api.us-east-1.amazonaws.com%2FProd%2Fapi%2Fconvert%3Fdocument_url...
Remerciements
ServerlessGoat a été initialement créé et contribué à l'OWASP par Yuri Shapira & Ory Segal, PureSec.