Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2021-38297-Go-wasm-Replication — Preuve de concept éducative reproduisant CVE-2021-38297, un débordement de tampon Go WASM menant à un XSS stocké. Comprend la configuration d'une application vulnérable, les étapes de reproduction de l'exploit et un guide de correction pour la recherche en sécurité. | Kitploit
Outils/GitHubGitHub/paras98/cve-2021-38297-go-wasm-replication
Analyse des VulnérabilitésExploitationExploitation d'Applications WebSécurité WebCTFArticles et RechercheApprentissage et ÉducationExploitation de BinairesLabs et Pratique
GitHubparas98/cve-2021-38297-go-wasm-replication

CVE-2021-38297-Go-wasm-Replication

Preuve de concept éducative reproduisant CVE-2021-38297, un débordement de tampon Go WASM menant à un XSS stocké. Comprend la configuration d'une application vulnérable, les étapes de reproduction de l'exploit et un guide de correction pour la recherche en sécurité.

Voir le dépôt
36il y a 2 ansPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

🚨 Exploitation de CVE-2021-38297 : Un voyage dans le dépassement de tampon GO Wasm 🚨

🌐 Présentation de la vulnérabilité 🌐

WebAssembly (WASM) 🌍, un format d'instructions binaires de pointe, permet l'exécution transparente de langages de haut niveau tels que C, C++, Rust et GO dans les navigateurs web modernes. Cependant, la découverte de CVE-2021-38297 🚩 a révélé une faille critique dans le processus de compilation et de chargement des binaires WASM compilés par GO. Cette vulnérabilité, trouvée dans le chargeur WASM JavaScript (wasm_exec.js) fourni par GO, permettait l'inclusion sans restriction de données dans l'argument argv. Avec argv stocké dans la mémoire linéaire de WASM, des acteurs malveillants pouvaient potentiellement l'exploiter pour écraser la mémoire linéaire du programme WASM compilé par GO avec une entrée argv surdimensionnée, conduisant à des résultats imprévisibles et potentiellement dangereux. Cette vulnérabilité était une préoccupation majeure dans les versions de GO antérieures à 1.17.2. En résumé :

  1. Le front-end affiche chaque publication et ses commentaires.
  2. Lors du rendu, le module GO WASM se charge, traitant les commentaires via la variable argv et les publications à l'adresse mémoire 0x5000.
  3. Les fonctions comme toLeetSpeak et processSharedVar sont utilisées respectivement pour le contenu des commentaires et des publications.

💻 Application vulnérable : Vuln-Twitter 💻

Dans notre preuve de concept, nous introduisons « Vuln-Twitter », une plateforme de médias sociaux fictive qui permet du contenu généré par les utilisateurs via des publications et des commentaires. Utilisant un serveur web Node.js et SQLite pour le stockage des données, le front-end de Vuln-Twitter exploite du JavaScript simple ainsi qu'un module GO WASM nommé wordprocessor.wasm pour le rendu dynamique du contenu. Ce module inclut notamment des méthodes comme toLeetSpeak, transformant les entrées utilisateur en « LeetSpeak » stylisé pour une expérience utilisateur engageante. Vuln twitter UI

Exploitation du dépassement de tampon

Notre exploration révèle un point critique d'exploitation lors de la phase de rendu du contenu, où chaque commentaire subit une transformation par le module GO WASM. Un commentaire surdimensionné spécialement conçu peut déclencher la vulnérabilité, conduisant à un dépassement de tampon qui manipule le contenu de la publication originale, démontrant un vecteur d'attaque XSS stocké classique. Cette vulnérabilité souligne non seulement le potentiel de manipulation malveillante des données, mais met également en lumière les implications plus larges des pratiques de programmation sécurisée dans le contexte du développement web et des applications WASM. Référez-vous à la section de code faisant de même :

Logique de rendu

Diagramme de la mémoire linéaire WASM lors du rendu d'un commentaire :

Mémoire de la logique de rendu Flux d'exploitation

Reproduction de l'exploit

Pour les passionnés et chercheurs désireux d'explorer cette vulnérabilité plus en détail, nous fournissons des étapes détaillées pour reproduire l'environnement d'exploitation en utilisant une version vulnérable spécifique de GO. Cette approche pratique facilite une compréhension plus approfondie des mécanismes de la vulnérabilité et des stratégies d'atténuation potentielles. Remarque : Pour reproduire cela, vous devez installer la version go1.17.1 de go localement, qui est la version vulnérable utilisée dans ce scénario. Vous pouvez vous référer à la documentation officielle de go pour savoir comment installer des versions spécifiques de go.

Essayons maintenant de reproduire le scénario ci-dessus :

  1. Pour configurer l'ensemble de l'application, commencez par cloner le projet : git clone [email protected]:gkrishnan724/CVE-2021-38297.git && cd vuln-twitter
  2. Exécutez npm install pour installer toutes les dépendances
  3. Exécutez npm run resetDB qui initialisera la base de données avec quelques publications et commentaires.
  4. Exécutez npm run dev qui démarrera le serveur local, ouvrez localhost:3000 dans un navigateur et vous devriez voir une page de connexion.

Maintenant, connectons-nous avec un compte malveillant en utilisant les identifiants nom d'utilisateur : I_CANT_HACK, mot de passe : hacker, une fois connecté, vous devriez voir le fil d'actualité avec quelques publications.

Cette publication semble assez intéressante :

Amazon: ready 4 black friday? https://www.amazon.com/blackfriday

Et si, en utilisant la technique ci-dessus, nous pouvions écraser la publication d'Amazon.com pour pointer vers un lien malveillant ?.

Référez-vous au fichier exploit.txt, il contient le commentaire rempli d'un bourrage de « A » de sorte que nous écrasons tout jusqu'à l'adresse 0x5000, à la fin vous pouvez voir le texte ready for black friday? https://evil.com/blackfriday. Si nous copions ce texte et le commentons sur la publication ci-dessus, nous devrions pouvoir écraser la publication originale avec le texte ci-dessus.

Essayez par vous-même et voyez :) Exploit

🛠️ Correctif et atténuation 🛠️

Reconnaissant la gravité de cette vulnérabilité, nous décrivons également une stratégie de correctif complète, utilisant une version mise à jour et sécurisée de GO pour atténuer le risque. Cette section sert de guide pour les développeurs et administrateurs système afin de renforcer leurs applications contre de telles vulnérabilités, soulignant l'importance des mises à jour logicielles régulières et des pratiques de sécurité vigilantes.

Dans cette application, j'ai également fourni un script de correctif. Qui utilise une version plus récente de go :

  1. Exécutez la cible npm run patchServer

Cela devrait recompiler le fichier go avec la nouvelle version et démarrer le serveur avec la version corrigée

Vous devriez maintenant remarquer que la publication n'est pas écrasée et si vous observez la console, nous voyons une erreur à la place : Argument length too long. Correctif

💡 Conclusion et réflexions 💡

Notre parcours à travers l'exploitation et l'atténuation de CVE-2021-38297 offre des perspectives précieuses sur les défis et opportunités présentés par l'intégration de langages de programmation de haut niveau dans les environnements web via WASM. Il incite à un examen critique des pratiques de sécurité dans le développement logiciel, exhortant à une approche proactive de la gestion des vulnérabilités et à l'adoption de normes de codage sécurisées. Sur la base de notre compréhension, nous pensons que l'agencement de la mémoire linéaire de GO est illustré ci-dessous :

Agencement mémoire GO

🎓 Présentation et contribution académique 🎓

En tant qu'étudiants de l'Université Carnegie Mellon, notre enquête sur CVE-2021-38297 contribue au discours académique et professionnel plus large sur la cybersécurité, offrant une étude de cas pratique sur les implications des technologies émergentes sur la sécurité logicielle. Nos supports de présentation, disponibles pour examen, élucident davantage nos conclusions et méthodologies, invitant au dialogue et à la collaboration au sein de la communauté de la cybersécurité.

🌟 Crédits et contributions 🌟

Ce projet témoigne d'une recherche collaborative et d'une enquête académique, mené par une équipe dévouée d'étudiants et de chercheurs :

  • Paras Saxena (@paras98)
  • Gopala Krishnan (@gkrishnan724)
  • Zhejia Yang (@zildjianpoi)
  • Shubham Kulkarni (@shubhamkulkarni97)
  • Anisha Nilakantan

Explication technique

Application vulnérable : Vuln-Twitter

Cette preuve de concept présente une application de médias sociaux, Vuln-Twitter, permettant à plusieurs utilisateurs de publier du contenu et des commentaires. Le serveur web, construit sur Node.js, utilise SQLite pour stocker les données des publications et des commentaires.

Le front-end utilise du JS simple ainsi qu'un module GO WASM nommé wordprocessor.wasm. Ce module expose des méthodes comme toLeetSpeak, qui transforme les chaînes d'entrée en « LeetSpeak » (par exemple, « Hello! » devient « h3ll0! »).

Les modules GO WASM aident à afficher les publications et commentaires en LeetSpeak.

Exploitation du dépassement de tampon

Lors du processus de rendu côté front-end, lors de la réception des publications et commentaires du serveur, chaque commentaire subit un rendu en « LeetSpeak » en utilisant le module GO WASM. Le commentaire de chaque publication est passé dans la variable argv après le chargement du module GO WASM.

De plus, il existe une méthode, processSharedVar(), dans le module GO, conçue pour lire la chaîne située à l'adresse 0x5000 et la convertir en langage simplifié (par exemple, « How are you? » devient « How r u? »). La publication originale est explicitement ajoutée à 0x5000 dans la mémoire linéaire pour être accessible par cette méthode, modifiant ainsi le contenu de la publication.

🔗 Sources et lectures complémentaires 🔗

Pour ceux qui souhaitent approfondir CVE-2021-38297 et ses implications plus larges, nous fournissons une liste organisée de ressources et de lectures, allant des bulletins de sécurité officiels aux blogs techniques et articles académiques. Ces documents offrent des perspectives complètes sur la vulnérabilité, son impact sur la sécurité logicielle et les efforts continus pour assurer la sécurité et l'intégrité des applications web.

  • https://www.ibm.com/support/pages/security-bulletin-ibm-event-streams-affected-potential-buffer-overflow-golang-cve-2021-38297-0
  • https://vulmon.com/vulnerabilitydetails?qid=CVE-2021-38297&scoretype=cvssv3
  • https://pedromarquez.dev/blog/2023/2/node_golang_wasm
  • https://nvd.nist.gov/vuln/detail/CVE-2021-38297
  • https://github.com/golang/go/issues/48797
  • https://github.com/golang/go/commit/f63250238be548b7c6c24ae840541102a5cfef99
  • https://jfrog.com/blog/cve-2021-38297-analysis-of-a-go-web-assembly-vulnerability/
  • https://stackoverflow.com/questions/64763007/why-is-webassembly-safe-and-what-is-linear-memory-model
  • https://webassembly.org/
  • https://hacks.mozilla.org/2019/08/webassembly-interface-types/
  • https://blog.protekkt.com/blog/basic-webassembly-buffer-overflow-exploitation-example
  • https://www.usenix.org/system/files/sec20_slides_lehmann.pdf
  • https://xeiaso.net/talks/wasm-abi/

Dépôt de développement original : https://github.com/gkrishnan724/CVE-2021-38297

Télécharger l’outil