
par SeerLight
La construction de tout service implique nécessairement un travail constant sur la sécurité. La sécurité est un processus continu qui comprend l'analyse réguliÚre et l'amélioration de la protection du produit, la surveillance des actualités sur les vulnérabilités et bien plus encore. Cela inclut également les audits. Les audits sont réalisés tant par les équipes internes que par des experts externes, qui peuvent grandement aider à la sécurité, car ils ne sont pas plongés dans le projet et ont un regard neuf.
Cet article concerne ce regard neuf des experts externes, qui ont aidĂ© l'Ă©quipe de Mail.ru Cloud Solutions (MCS) Ă tester le service cloud, et ce qu'ils ont trouvĂ©. En tant que « forces externes », MCS a choisi la sociĂ©tĂ© Digital Security, reconnue pour sa haute expertise dans les cercles de la cybersĂ©curitĂ©. Dans cet article, nous allons examiner certaines vulnĂ©rabilitĂ©s intĂ©ressantes trouvĂ©es lors de l'audit externe - afin que vous n'ayez pas les mĂȘmes Ă©cueils lorsque vous crĂ©erez votre service cloud.
Description du produit
est une plateforme pour la construction d'infrastructures virtuelles dans le cloud. Elle comprend des IaaS, des PaaS, un marketplace d'images d'applications prĂȘtes pour les dĂ©veloppeurs. Compte tenu de l'architecture de MCS, il Ă©tait nĂ©cessaire de vĂ©rifier la sĂ©curitĂ© du produit dans les domaines suivants :
- protection de l'infrastructure de l'environnement de virtualisation : hyperviseurs, routage, pare-feu ;
- protection de l'infrastructure virtuelle des clients : isolation les uns des autres, y compris au niveau réseau, réseaux privés dans un SDN ;
- OpenStack et ses composants ouverts ;
- S3 développé en interne ;
- IAM : projets multitenants avec modÚle basé sur les rÎles ;
- Vision (vision par ordinateur) : API et vulnérabilités lors du travail avec des images ;
- interface web et attaques web classiques ;
- vulnérabilités des composants PaaS ;
- API de tous les composants.
Sans doute, c'est tout ce qui est essentiel pour l'histoire Ă venir.
Quels travaux ont été réalisés et pourquoi sont-ils nécessaires ?
L'audit de sécurité vise à identifier les vulnérabilités et les erreurs de configuration qui peuvent entraßner la fuite de données personnelles, la modification d'informations sensibles ou perturber la disponibilité des services.
Au cours des travaux, qui durent en moyenne 1 à 2 mois, les auditeurs reproduisent les actions des potentiels attaquants et recherchent des vulnérabilités dans la partie cliente et serveur du service choisi. Dans le cadre de l'audit de la plateforme cloud MCS, les objectifs suivants ont été définis :
- Analyse de l'authentification dans le service. Les vulnérabilités dans ce composant permettraient d'accéder immédiatement à d'autres comptes.
- Ătude du modĂšle de rĂŽles et de la sĂ©paration des accĂšs entre diffĂ©rents comptes. Pour un attaquant, la possibilitĂ© d'accĂ©der Ă une machine virtuelle Ă©trangĂšre est un objectif trĂšs dĂ©sirable.
- Vulnérabilités de la partie cliente. XSS/CSRF/CRLF/etc. Existe-t-il une possibilité d'attaquer d'autres utilisateurs par le biais de liens malveillants ?
- Vulnérabilités de la partie serveur : RCE et toutes sortes d'injections (SQL/XXE/SSRF, etc.). Les vulnérabilités serveur sont généralement plus difficiles à détecter, mais elles entraßnent la compromission de plusieurs utilisateurs à la fois.
- Analyse de l'isolation des segments utilisateurs au niveau réseau. Pour un attaquant, l'absence d'isolation augmente considérablement la surface d'attaque sur d'autres utilisateurs.
- Analyse de la logique métier. Est-il possible de tromper le systÚme et de créer des machines virtuelles gratuitement ?
Dans ce projet, les travaux ont Ă©tĂ© rĂ©alisĂ©s selon le modĂšle « Gray-box » : les auditeurs interagissaient avec le service en ayant les privilĂšges d'utilisateurs ordinaires, mais disposaient partiellement des codes source de l'API et pouvaient poser des questions aux dĂ©veloppeurs. C'est gĂ©nĂ©ralement le modĂšle de travail le plus pratique et rĂ©aliste : les informations internes peuvent tout de mĂȘme ĂȘtre collectĂ©es par un attaquant, c'est seulement une question de temps.
Vulnérabilités trouvées
Avant qu'un auditeur ne commence à envoyer divers payloads (charge utile utilisée pour réaliser une attaque) à des endroits aléatoires, il est nécessaire de comprendre comment tout cela fonctionne, quel est le fonctionnel proposé. Cela peut sembler une tùche inutile, car dans la plupart des endroits étudiés, il n'y aura pas de vulnérabilités. Mais seule la compréhension de la structure de l'application et de la logique de son fonctionnement permettra de trouver les vecteurs d'attaque les plus complexes.
Il est important de trouver des endroits qui semblent suspects ou qui diffÚrent considérablement des autres. La premiÚre vulnérabilité dangereuse a été trouvée précisément de cette maniÚre.
IDOR
Les vulnérabilités IDOR (Insecure Direct Object Reference, références directes d'objets non sécurisées) sont l'un des types de vulnérabilités les plus fréquents dans la logique métier, permettant d'accéder, d'une maniÚre ou d'une autre, à des objets auxquels l'accÚs n'est en réalité pas autorisé. Les vulnérabilités IDOR rendent possible l'obtention d'informations sur les utilisateurs de différents niveaux de criticité.
L'une des variantes de l'IDOR consiste à effectuer des actions sur des objets du systÚme (utilisateurs, comptes bancaires, articles dans le panier) en manipulant les identifiants d'accÚs à ces objets. Cela peut avoir des conséquences imprévisibles. Par exemple, cela peut permettre de substituer le compte d'un expéditeur de fonds, ce qui permet de les voler à d'autres utilisateurs.
Dans le cas de MCS, les auditeurs ont dĂ©couvert une vulnĂ©rabilitĂ© IDOR liĂ©e Ă des identifiants non sĂ©curisĂ©s. Dans le cabinet personnel de l'utilisateur, des identifiants UUID Ă©taient utilisĂ©s pour accĂ©der Ă des objets, qui semblaient, selon les spĂ©cialistes de la sĂ©curitĂ©, remarquablement rĂ©sistants Ă une attaque par force brute (c'est-Ă -dire protĂ©gĂ©s contre l'attaque par essai). Mais pour certaines entitĂ©s, il a Ă©tĂ© dĂ©couvert que des numĂ©ros prĂ©visibles Ă©taient utilisĂ©s pour obtenir des informations sur les utilisateurs de l'application. Je pense que vous devinez qu'il suffisait de modifier l'ID utilisateur de un, de renvoyer la requĂȘte et d'obtenir ainsi des informations en contournant la ACL (access control list, rĂšgles d'accĂšs aux donnĂ©es pour les processus et utilisateurs).
Server Side Request Forgery (SSRF)
Les produits OpenSource sont appréciés pour la grande quantité de forums avec des descriptions techniques détaillées des problÚmes rencontrés et, si vous avez de la chance, des solutions. Mais cette médaille a un revers : les vulnérabilités connues sont également décrites en détail. Par exemple, le forum OpenStack contient d'excellentes descriptions de vulnérabilités. et , qui apparemment, personne ne se presse à corriger.
Une fonctionnalitĂ© courante des applications est la possibilitĂ© pour l'utilisateur d'envoyer au serveur un lien sur lequel le serveur se rend (par exemple, pour charger une image Ă partir d'une source indiquĂ©e). Avec une filtration insuffisante des liens ou des rĂ©ponses retournĂ©es par le serveur aux utilisateurs, cette fonctionnalitĂ© peut facilement ĂȘtre exploitĂ©e par des attaquants.
Les vulnérabilités SSRF peuvent faire avancer considérablement une attaque. L'attaquant peut obtenir :
- un accÚs limité au réseau local attaqué, par exemple seulement à certains segments du réseau et par un certain protocole ;
- un accÚs complet au réseau local, si un downgrade est possible du niveau applicatif au niveau de transport, et par conséquent un contrÎle total sur la charge au niveau applicatif ;
- un accÚs en lecture aux fichiers locaux sur le serveur (si le schéma file:// est supporté) ;
- et bien plus encore.
Dans OpenStack, une vulnĂ©rabilitĂ© SSRF connue depuis longtemps prĂ©sente un caractĂšre « aveugle » : lorsque vous interrogez un serveur, vous ne recevez pas de rĂ©ponse de sa part, mais vous obtenez diffĂ©rents types d'erreurs/dĂ©lays, selon le rĂ©sultat de la requĂȘte. Sur cette base, il est possible d'effectuer une analyse de ports sur des hĂŽtes dans le rĂ©seau interne, avec toutes les consĂ©quences qui en dĂ©coulent et qu'il ne faut pas sous-estimer. Par exemple, un produit peut avoir une API pour le back-office, accessible uniquement depuis le rĂ©seau d'entreprise. En possĂ©dant la documentation (sans oublier les initiĂ©s), un attaquant peut utiliser SSRF pour accĂ©der Ă des mĂ©thodes internes. Par exemple, s'il a pu obtenir d'une maniĂšre ou d'une autre une liste approximative de fichiers URL valables, il peut passer par celles-ci avec SSRF et exĂ©cuter une requĂȘte â pour simplifier, transfĂ©rer des fonds d'un compte Ă un autre ou modifier des limites.
Ce n'est pas le premier cas de vulnérabilité SSRF découverte dans OpenStack. Par le passé, il était possible de charger des images ISO de VM via un lien direct, ce qui entraßnait également des conséquences similaires. Actuellement, cette fonctionnalité a été supprimée d'OpenStack. Apparemment, la communauté a jugé que c'était la solution la plus simple et la plus fiable au problÚme.
Et dans Dans un rapport publiquement accessible du service HackerOne (h1), l'exploitation d'une SSRF non aveugle avec la possibilité de lire les métadonnées de l'instance conduit à un accÚs Root à toute l'infrastructure de Shopify.
Dans MCS, deux endroits avec une fonctionnalitĂ© similaire ont rĂ©vĂ©lĂ© des vulnĂ©rabilitĂ©s SSRF, mais il Ă©tait pratiquement impossible de les exploiter en raison des pare-feux et autres protections. Quoi qu'il en soit, l'Ă©quipe MCS a quand mĂȘme corrigĂ© ce problĂšme sans attendre la communautĂ©.
XSS au lieu de charger des « shells »
Malgré des centaines d'études rédigées, année aprÚs année, le XSS (attaque de script intersite) reste la web la plus fréquemment rencontrée (ou ?).
Le téléchargement de fichiers est un lieu favori pour tout chercheur en sécurité. Il arrive souvent qu'il soit possible de télécharger un script arbitraire (asp/jsp/php) et d'exécuter des commandes systÚme, ce que les testeurs de pénétration appellent « uploader un shell ». Mais la popularité de ces vulnérabilités joue dans les deux sens : on s'en souvient et on développe des moyens de s'en protéger, si bien que derniÚrement la probabilité de « uploader un shell » tend vers zéro.
L'Ă©quipe attaquante (reprĂ©sentĂ©e par Digital Security) a eu de la chance. D'accord, dans le MCS, le contenu des fichiers tĂ©lĂ©chargĂ©s Ă©tait vĂ©rifiĂ© du cĂŽtĂ© serveur, seuls les fichiers images Ă©taient autorisĂ©s. Mais un SVG, c'est aussi une image. Et en quoi les images SVG peuvent-elles ĂȘtre dangereuses ? Parce qu'elles peuvent contenir des fragments de JavaScript !
Il s'est avĂ©rĂ© que les fichiers tĂ©lĂ©chargĂ©s Ă©taient accessibles Ă tous les utilisateurs du service MCS â il Ă©tait donc possible d'attaquer d'autres utilisateurs du cloud, notamment les administrateurs.

Exemple d'injection via une attaque XSS d'un formulaire de connexion de phishing
Exemples d'exploitation d'une attaque XSS :
- Pourquoi essayer de voler une session (surtout que maintenant il y a des cookies HTTP-Only, protĂ©gĂ©s contre le vol par des scripts JS), si le script tĂ©lĂ©chargĂ© peut directement accĂ©der Ă l'API de la ressource ? Dans ce cas, la charge utile peut, via des requĂȘtes XHR, modifier la configuration du serveur, par exemple en ajoutant la clĂ© SSH ouverte d'un pirate et obtenir un accĂšs SSH au serveur.
- Si la politique CSP (politique de sĂ©curitĂ© du contenu) interdit l'injection de JavaScript, l'attaquant peut s'en passer. Sur du HTML pur, il peut crĂ©er un faux formulaire de connexion au site et voler le mot de passe de l'administrateur grĂące Ă un phishing sophistiquĂ© : la page de phishing pour l'utilisateur apparaĂźt sur la mĂȘme URL, et il est plus difficile pour l'utilisateur de la dĂ©tecter.
- Enfin, l'attaquant peut provoquer en dĂ©finissant des cookies d'une taille supĂ©rieure Ă 4 Ko. L'utilisateur n'a qu'Ă ouvrir le lien une seule fois â et tout le site devient inaccessible, jusqu'Ă ce qu'il devine de nettoyer son navigateur : dans la grande majoritĂ© des cas, le serveur web refusera d'accepter un tel client.
Considérons un exemple d'une autre XSS identifiée, cette fois avec une exploitation plus astucieuse. Le service MCS permet de regrouper les rÚgles de pare-feu. C'est dans le nom du groupe qu'une XSS a été découverte. Sa particularité était que le vecteur ne se déclenchait pas immédiatement, pas lors de l'affichage de la liste des rÚgles, mais lors de la suppression du groupe :

Ainsi, le scénario était le suivant : un attaquant crée une rÚgle de pare-feu avec un « chargement » dans le nom, l'administrateur la remarque aprÚs un certain temps et initie le processus de suppression. C'est à ce moment-là que le JS malveillant s'exécute.
Pour protĂ©ger les dĂ©veloppeurs de MCS contre les XSS dans les images SVG tĂ©lĂ©chargĂ©es (si elles ne peuvent pas ĂȘtre Ă©vitĂ©es), l'Ă©quipe de Digital Security a recommandĂ© :
- De placer les fichiers téléchargés par les utilisateurs sur un domaine séparé, sans lien avec les « cookies ». Le script s'exécutera dans le contexte d'un autre domaine et ne représentera pas de menace pour MCS.
- D'inclure dans la rĂ©ponse HTTP du serveur l'en-tĂȘte « Content-disposition: attachment ». Ainsi, les fichiers seront tĂ©lĂ©chargĂ©s par le navigateur et non exĂ©cutĂ©s.
De plus, il existe aujourd'hui de nombreuses façons pour les développeurs d'atténuer les risques d'exploitation des XSS :
- L'utilisation du drapeau « HTTP Only » peut rendre les en-tĂȘtes de session « Cookies » inaccessibles au JavaScript malveillant ;
- rendra considérablement plus difficile l'exploitation des XSS pour l'attaquant ;
- Les modÚles modernes, comme Angular ou React, nettoient automatiquement les données des utilisateurs avant de les afficher dans le navigateur de l'utilisateur.
Vulnérabilités de l'authentification à deux facteurs
Pour amĂ©liorer la sĂ©curitĂ© des comptes, il est toujours recommandĂ© aux utilisateurs d'activer le 2FA (authentification Ă deux facteurs). En effet, c'est un moyen efficace d'empĂȘcher un attaquant d'accĂ©der au service si les identifiants de l'utilisateur ont Ă©tĂ© compromis.
Mais l'utilisation d'un second facteur d'authentification garantit-elle toujours la sécurité du compte ? Dans l'implémentation du 2FA, il existe des problÚmes de sécurité tels que :
- La brute force sur le code OTP (codes Ă usage unique). MalgrĂ© la simplicitĂ© de lâexploitation, de telles erreurs, comme lâabsence de protection contre la force brute pour les OTP, se retrouvent mĂȘme chez de grandes entreprises : , .
- Un algorithme de génération faible, par exemple la possibilité de prédire le code suivant.
- Des erreurs logiques, par exemple la possibilitĂ© de demander lâOTP dâun autre sur son tĂ©lĂ©phone, comme cela a Ă©tĂ© le cas chez Shopify.
Dans le cas de MCS, le 2FA est basĂ© sur Google Authenticator et . Le protocole lui-mĂȘme est Ă©prouvĂ©, mais il vaut la peine de vĂ©rifier l'implĂ©mentation de la vĂ©rification du code du cĂŽtĂ© de l'application.
Dans MCS, le 2FA est utilisé à plusieurs endroits :
- Lors de l'authentification d'un utilisateur. Un systĂšme de protection contre les tentatives rĂ©pĂ©tĂ©es est en place : l'utilisateur a seulement quelques essais pour saisir le mot de passe temporaire, aprĂšs quoi la saisie est bloquĂ©e pendant un certain temps. Cela empĂȘche la possibilitĂ© de deviner le code OTP par essai-erreur.
- Lors de la gĂ©nĂ©ration de codes de sauvegarde hors ligne pour la mise en Ćuvre de la 2FA, ainsi que pour sa dĂ©sactivation. Ici, il n'y avait pas de protection contre les tentatives rĂ©pĂ©tĂ©es, permettant ainsi, avec le mot de passe du compte et une session active, de rĂ©gĂ©nĂ©rer les codes de sauvegarde ou de dĂ©sactiver complĂštement la 2FA.
Ătant donnĂ© que les codes de sauvegarde Ă©taient situĂ©s dans la mĂȘme plage de valeurs que les OTP gĂ©nĂ©rĂ©s par l'application, la chance de deviner un code en peu de temps Ă©tait considĂ©rablement plus Ă©levĂ©e.

Le processus de devinette d'un OTP pour désactiver la 2FA à l'aide de l'outil « Burp: Intruder ».
Résultat
Dans l'ensemble, MCS en tant que produit s'est révélé sécurisé. Au cours de l'audit, l'équipe de test de pénétration n'a pas réussi à accéder aux VM des clients ni à leurs données, et les vulnérabilités trouvées ont été rapidement corrigées par l'équipe MCS.
Cependant, il est important de noter que la sécurité est un travail continu. Les services ne sont pas statiques, ils évoluent constamment. Concevoir un produit complÚtement exempt de vulnérabilités est impossible. Mais il est possible de les identifier à temps et de minimiser la chance qu'elles se reproduisent.
à présent, toutes les vulnérabilités mentionnées dans MCS ont déjà été corrigées. Afin de minimiser le nombre de nouvelles vulnérabilités et de réduire leur existence, l'équipe de la plateforme continue de faire cela :
- réaliser réguliÚrement des audits par des entreprises externes ;
- maintenir et développer la participation;
- se prĂ©occuper de la sĂ©curitĂ©. đ
Source : habr.com
