2 points par GN⁺ 2024-01-27 | 1 commentaires | Partager sur WhatsApp

Découverte d’un XSS sur Chess.com

  • En pratiquant les échecs comme loisir tout en m’amusant avec la technique, j’ai découvert une vulnérabilité XSS sur Chess.com.
  • Chess.com est le plus grand site d’échecs sur Internet, avec plus de 100 millions de membres.

Vue d’ensemble

  • J’ai commencé à passer beaucoup de temps sur Chess.com au début de 2023.
  • J’ai fait s’inscrire un ami sur le site et nous sommes instantanément devenus amis grâce à la fonctionnalité dédiée.
  • Je me suis demandé s’il était possible d’automatiser l’ajout d’amis, à la manière du ver MySpace.
  • J’ai créé un nouveau compte et, en inspectant l’onglet réseau des outils de développement, j’ai trouvé l’URL d’ajout automatique d’amis.

Milieu de partie

  • J’ai tenté une XSS en utilisant l’éditeur de texte enrichi TinyMCE.
  • J’ai utilisé le proxy Burp pour injecter directement du code HTML dans la description « About ».
  • Après avoir examiné la configuration de TinyMCE, j’ai créé une charge utile XSS en exploitant la propriété de style background-image.
  • J’ai testé plusieurs symboles pour trouver comment déclencher l’exécution de la XSS.
  • J’ai finalement mis au point une méthode permettant d’extraire les cookies et les objets JavaScript.

Finale

  • J’ai travaillé à faire exécuter complètement la XSS.
  • J’ai trouvé une nouvelle méthode utilisant l’attribut srcset, qui permettait d’employer une syntaxe JS plus large.
  • J’ai exécuté directement la charge utile XSS en utilisant un encodage Base64.
  • L’impact était important, car l’éditeur TinyMCE était utilisé sur l’ensemble du site.

Analyse

  • La cause profonde de la vulnérabilité est la fonctionnalité de réimportation d’images.
  • Il est possible de contourner la vérification de l’hébergement d’images en incluant le nom de domaine de Chess.com.
  • L’éditeur de texte enrichi autorise divers éléments HTML, ce qui en fait un bon terrain pour parvenir à une XSS.
  • TinyMCE était à jour, mais il manquait une sanitisation du HTML final.
  • Chess.com devrait appliquer une sanitisation au HTML final affiché aux utilisateurs.

Avis de GN⁺ :

  1. Ce billet de blog décrit de manière intéressante le processus de découverte et de signalement d’une faille de sécurité pouvant survenir sur une grande plateforme en ligne comme Chess.com.
  2. Les vulnérabilités XSS peuvent constituer une menace grave pour la sécurité d’un site web, et les détecter puis les corriger est essentiel pour protéger les données personnelles des utilisateurs.
  3. Cet article souligne, pour les développeurs logiciels et les experts en sécurité, l’importance d’identifier les vulnérabilités des composants d’applications web comme les éditeurs de texte enrichi et de les prévenir.

1 commentaires

 
GN⁺ 2024-01-27
Commentaires Hacker News
  • Je suis l’OP. Merci beaucoup pour les commentaires positifs. Pour donner un peu de contexte, je suis un étudiant de 17 ans au Royaume-Uni, en train de préparer les A-Levels, et je réfléchis encore à l’université où aller ainsi qu’à l’option d’un degree apprenticeship
    Vous pouvez voir mon profil GitHub ici -> https://github.com/Jayy001
    Je suis l’un des membres clés de HashPals, j’ai créé Search-That-Hash, et je suis aussi mainteneur du dépôt open source de logiciels gratuits pour la tablette ReMarkable

    • J’ai fait un degree apprenticeship dans une entreprise FAANG et j’ai eu la chance d’y être embauché à plein temps ensuite. Cela varie beaucoup selon les entreprises, mais si l’on regarde seulement les perspectives d’emploi immédiates, je pense qu’un apprentissage dans une entreprise connue aide bien davantage qu’une université, à l’exception d’Oxbridge
      Si tu veux en discuter davantage, n’hésite pas à me contacter ; mon e-mail est dans la description de mon profil
    • Ma ReMarkable vous remerciera. Vous faites du bon travail, continuez comme ça
      Et si vous partez dans l’IT, je vous conseille aussi d’apprendre la négociation de contrat et la finance
    • Combien de temps vous a-t-il fallu pour réussir le XSS ?
    • Je vais tenter une recommandation chez Meta. Pouvez-vous m’envoyer votre CV/e-mail, etc. à tehlike gmail com ?
  • À l’époque où ma seule expérience d’Internet consistait à perdre à chaque fois comme « bibliothécaire bénévole » sur Chess.com, j’injectais dans des parties Chess.com en direct des caractères échappés maladroits, des balises fermantes, des chaînes de contrôle courantes, et même des objets OLE
    Le fondateur, Eric, m’a poliment demandé un audit plus formel, mais j’ai refusé parce que je ne voulais pas révéler que j’étais un script kiddie de 11 ans. À la place, j’ai expliqué les expressions régulières nécessaires à la censure des salons de discussion, et nous avons aussi abordé le problème plus vaste de la détection de la triche dans un environnement asynchrone
    Après réflexion, je lui ai dit que la seule méthode possible consistait à comparer tous les coups importants à forte valeur dans une partie avec les meilleurs coups connus d’un moteur, puis à utiliser l’inférence statistique pour distinguer les bons joueurs humains des tricheurs
    Bien sûr, à l’époque, c’était une approche absurdement impossible, et c’est aussi la conclusion à laquelle nous étions arrivés. Mais cela reste un assez bon souvenir d’Internet : un enfant à peine sorti de l’école primaire discutant de sujets aussi subtils avec un vrai webmaster

    • Pourquoi dites-vous que c’était « la seule méthode possible » ? Je peux imaginer plusieurs façons de détecter la triche
  • Le passage « Cette fonctionnalité m’a rappelé le ver MySpace vers 2005, alors que je n’étais même pas né à l’époque ! » me fait sentir chaque jour un peu plus vieux

    • Mon ex-femme a dirigé l’équipe sécurité de MySpace d’environ 2006 à 2008. Le plus rude, c’était d’aller elle-même sur les forums de hackers MySpace pour voir comment se déroulait leur journée de travail
      L’obstination à vouloir laisser les utilisateurs mettre du HTML sur le site posait d’énormes problèmes. Aujourd’hui, on analyserait correctement l’entrée HTML pour supprimer les attributs et balises interdits, mais à l’époque c’était traité à coups de regex délirantes
    • Ma première pensée ressemblait plutôt à « ça fait plaisir de voir des jeunes faire ce genre de choses aujourd’hui », puis j’ai fait le calcul de l’âge et ça m’a mis un coup au moral
    • Attendez, cette personne a moins de 20 ans
  • Je ne sais pas si c’est lié, mais j’ai déjà vu, et même enregistré, quelqu’un d’autre jouer mes coups à ma place dans une partie Chess.com. Il m’est aussi arrivé qu’une partie en cours apparaisse chez moi, et que je puisse jouer un coup dans une situation où je n’aurais normalement pas dû pouvoir le faire
    En cherchant sur Google, on trouve pas mal de fils à ce sujet. Je ne sais pas si Chess.com l’a corrigé ces derniers mois, mais quand j’ai essayé de le signaler, ils n’ont pas voulu écouter
    Toutes ces parties ont eu lieu alors que je n’étais pas connecté au site. Je n’ai jamais rencontré ça en étant connecté, mais les échecs ne sont pas bons pour ma tension, donc je n’y joue pas souvent

    • Je ne comprends pas bien. Par « quelqu’un d’autre joue mes coups », voulez-vous dire qu’il remplace votre coup par le sien dans la partie ? Ou qu’il reproduit les coups de votre partie dans sa propre partie ? Ou autre chose ?
    • Comment pouvez-vous savoir qu’ils jouent vos coups ?
    • « Mes coups », qu’est-ce que vous voulez dire exactement ?
  • En lisant seulement le titre, je m’attendais à quelque chose de beaucoup plus débutant, mais en réalité il a créé un exploit qui contourne intelligemment plusieurs niveaux de validation des entrées. Il est même allé jusqu’à configurer un sous-domaine pour qu’il ressemble au domaine principal
    Je ne m’attendais pas à ce que ça fonctionne, et c’est intéressant en soi. Quand on pense à la complexité du parsing de domaines avec des regex, on voit bien comment cela peut être facile à rater. Ou peut-être que c’était simplement une vérification de '...' dans une variable
    L’auteur connaît bien son domaine. Je suis impressionné par le temps qu’il a dû passer à creuser pour atteindre ce niveau de compétence. Sa carrière devrait être assez intéressante

    • D’après ce que l’auteur mentionne en passant dans l’article, il est né après 2005 ; c’est donc encore plus impressionnant si l’on tient compte du fait qu’il est très jeune
    • Le premier exploit, qui ajoutait les visiteurs du profil en amis, était au moins assez simple, et le titre est un jeu de mots. Mais le chemin vers le XSS complet est ensuite devenu très complexe
  • Bon article, OP. Je vous souhaite de poursuivre votre parcours dans le hacking. Si vous ne le savez pas encore, lorsque les parenthèses sont filtrées ou encodées dans des payloads comme alert(1), vous pouvez essayer d’utiliser des backticks avec alert\1``
    Si vous voulez pousser l’injection JavaScript au niveau supérieur, la cheat sheet XSS de Brute Logic et JavaScript for Hackers de Gareth Heyes sont de bonnes ressources. Certains prennent le cross-site scripting à la légère, mais cela reste très puissant et très répandu. Surtout, comme plugin-baby l’a souligné, quand les cookies de session n’ont pas l’attribut HttpOnly

  • Très cool. J’aime lire les analyses de bug bounty, en particulier sur le XSS. Ça a toujours l’air facile à trouver, mais ce n’est que du biais de confirmation ; en réalité, je ne vois pas tout le temps passé sur des tests infructueux et des fausses pistes

    • D’après mon expérience, on trouve généralement ce genre de chose après être tombé par hasard sur quelque chose d’étrange. Le plus difficile, c’est de rendre cette faille réellement exploitable, et dans ce cas la cible était l’éditeur de texte
  • Le passage « Cette fonctionnalité m’a rappelé le ver MySpace vers 2005, alors que je n’étais même pas né à l’époque ! » m’a immédiatement donné un coup de vieux

    • Ne vous inquiétez pas trop. Ça empire
      Ce que j’aimerais demander à l’OP à propos de cet incident, c’est comment il en a entendu parler. Était-ce via Darknet Diaries, ou autrement ?
  • J’ai trouvé amusant qu’il qualifie l’éditeur de texte enrichi de « Saint Graal ». Chess.com est un grand site web, mais chaque fois que je vois ce genre d’éditeur, ou des fonctionnalités trop tape-à-l’œil, sur de vieux forums, je me demande si le site n’est pas criblé de failles. Quoi qu’il en soit, excellent article

  • Le passage « Pendant le rapport de bug bounty et son examen, lorsque j’ai essayé de le reproduire à nouveau, les développeurs ont tenté de mettre en place un blocage et le message d’erreur suivant est apparu… » semble assez éloigné de l’esprit d’un programme de bug bounty