Skip to content
KitploitKITPLOIT
工具博客
Log in
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2021-38297-Go-wasm-Replication — 教育性概念验证,复现 CVE-2021-38297,即 Go WASM 缓冲区溢出导致存储型 XSS。包含易受攻击应用的搭建、漏洞利用复现步骤,以及面向安全研究的修补指南。 | Kitploit
工具/GitHubGitHub/paras98/cve-2021-38297-go-wasm-replication
漏洞分析漏洞利用Web应用程序漏洞利用Web安全CTF论文与研究学习与教育二进制利用实验室与实践

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
GitHubparas98/cve-2021-38297-go-wasm-replication

CVE-2021-38297-Go-wasm-Replication

教育性概念验证,复现 CVE-2021-38297,即 Go WASM 缓冲区溢出导致存储型 XSS。包含易受攻击应用的搭建、漏洞利用复现步骤,以及面向安全研究的修补指南。

查看仓库
472年前尚未审核
分享

🚨 利用 CVE-2021-38297:深入 GO Wasm 缓冲区溢出之旅 🚨

🌐 漏洞概述 🌐

WebAssembly(WASM)🌍 作为一种前沿的二进制指令格式,能够在现代 Web 浏览器中无缝执行 C、C++、Rust 和 GO 等高级语言。然而,CVE-2021-38297 🚩 的发现揭示了 GO 在编译和加载 GO 编译的 WASM 二进制文件过程中存在一个严重缺陷。该漏洞位于 GO 提供的 JavaScript WASM 加载器(wasm_exec.js)中,允许在 argv 参数中无限制地包含数据。由于 argv 存储在 WASM 的线性内存中,恶意行为者可能利用过大的 argv 输入来覆盖 GO 编译的 WASM 程序的线性内存,从而导致不可预测且可能危险的结果。此漏洞在 GO 1.17.2 之前的版本中是一个重大隐患。 总结如下:

  1. 前端渲染每个帖子及其评论。
  2. 渲染过程中,GO WASM 模块加载,通过 argv 变量处理评论,并通过内存地址 0x5000 处理帖子。
  3. toLeetSpeak 和 processSharedVar 等函数分别用于处理评论和帖子内容。

💻 漏洞应用:Vuln-Twitter 💻

在我们概念验证中,我们引入了 "Vuln-Twitter",一个允许用户通过帖子和评论生成内容的模拟社交媒体平台。Vuln-Twitter 使用 Node.js Web 服务器和 SQLite 存储数据,其前端利用纯 JavaScript 以及名为 wordprocessor.wasm 的 GO WASM 模块进行动态内容渲染。值得注意的是,该模块包含 toLeetSpeak 等方法,将用户输入转换为风格化的 "LeetSpeak",以提供引人入胜的用户体验。 Vuln twitter UI

利用缓冲区溢出

我们的探索揭示了内容渲染阶段的一个关键利用点,在该阶段,每条评论都会经过 GO WASM 模块的转换。精心构造的超大评论可触发该漏洞,导致缓冲区溢出,从而篡改原始帖子内容,展示了一种经典的存储型 XSS 攻击向量。此漏洞不仅凸显了恶意数据操纵的可能性,还强调了在 Web 开发和 WASM 应用背景下安全编程实践的更广泛影响。 请参考执行相同操作的代码部分:

Rendering Logic

渲染评论时的 WASM 线性内存示意图:

Rendering Logic memory Exploitation flow

复现漏洞

对于希望进一步探索此漏洞的爱好者和研究人员,我们提供了使用特定易受攻击的 GO 版本复现漏洞环境的详细步骤。这种动手实践方式有助于更深入地理解漏洞机制及潜在的缓解策略。 注意:要复现此场景,你需要在本地安装 go 版本 go1.17.1,这是此场景中使用的易受攻击版本。你可以参考官方 go 文档了解如何安装特定 go 版本。

现在让我们尝试复现上述场景:

  1. 要搭建整个应用,首先克隆项目:git clone [email protected]:gkrishnan724/CVE-2021-38297.git && cd vuln-twitter
  2. 运行 npm install 安装所有依赖
  3. 运行 npm run resetDB,该命令将使用一些帖子和评论初始化数据库。
  4. 运行 npm run dev,该命令将启动本地服务器,在浏览器中打开 localhost:3000,你应该能看到登录页面。

现在,让我们使用恶意账户登录,凭据为用户名:I_CANT_HACK,密码:hacker,登录后你应该能看到包含几个帖子的信息流。

这个帖子看起来相当有趣:

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

如果使用上述技术,我们能够覆盖来自 Amazon.com 的帖子,使其指向一个恶意链接呢?。

请参考 exploit.txt 文件,其中包含一条评论,该评论填充了大量的 "A" 作为填充数据,以便我们覆盖直到地址 0x5000 的所有内容,在末尾你可以看到文本 ready for black friday? https://evil.com/blackfriday。如果我们复制这段文本并评论到上面的帖子中,我们应该能够用上述文本覆盖原始帖子。

请亲自尝试一下吧 :) Exploit

🛠️ 补丁与缓解措施 🛠️

鉴于该漏洞的严重性,我们还概述了一种全面的补丁策略,使用更新且安全的 GO 版本来缓解风险。本节为开发人员和管理员提供指南,帮助他们加固应用程序以防范此类漏洞,并强调定期更新软件和保持警惕的安全实践的重要性。

在此应用中,我还提供了一个补丁脚本,它使用更新版本的 go:

  1. 运行目标 npm run patchServer

这应该会用新版本重新编译 go 文件,并以补丁版本启动服务器。

你现在应该会注意到帖子不再被覆盖,而且如果你观察控制台,我们会看到一个错误,即 Argument length too long。 Patch

💡 结论与反思 💡

我们对 CVE-2021-38297 的利用与缓解之旅,为 Web 环境中通过 WASM 集成高级编程语言所带来的挑战与机遇提供了宝贵的见解。它促使我们批判性地审视软件开发中的安全实践,敦促采取积极主动的漏洞管理方法,并采用安全的编码标准。 基于我们的理解,我们认为 GO 的线性内存布局如下所示:

GO memory layout

🎓 演示与学术贡献 🎓

作为卡内基梅隆大学的学生,我们对 CVE-2021-38297 的研究为更广泛的网络安全学术与专业讨论做出了贡献,提供了一个关于新兴技术对软件安全影响的实践案例研究。我们的演示材料可供查阅,进一步阐述了我们的发现与方法,并邀请网络安全社区进行对话与合作。

🌟 致谢与贡献 🌟

本项目是协作研究与学术探索的见证,由一支专注的学生和研究人员团队牵头:

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

技术说明

漏洞应用:Vuln-Twitter

此概念验证展示了一个社交媒体应用 Vuln-Twitter,允许多个用户发布内容和评论。该 Web 服务器基于 Node.js 构建,使用 SQLite 存储帖子和评论数据。

前端使用纯 JS 以及名为 wordprocessor.wasm 的 GO WASM 模块。该模块公开了 toLeetSpeak 等方法,可将输入字符串转换为 "LeetSpeak"(例如,"Hello!" 变为 "h3ll0!")。

GO WASM 模块有助于以 LeetSpeak 形式渲染帖子和评论。

利用缓冲区溢出

在前端渲染过程中,当从服务器接收帖子和评论时,每条评论都会使用 GO WASM 模块渲染为 "LeetSpeak"。每条帖子的评论在加载 GO WASM 模块后作为 argv 变量的一部分传递。

此外,GO 模块中存在一个 processSharedVar() 方法,旨在读取地址 0x5000 处的字符串并将其转换为简化口语(例如,"How are you?" 变为 "How r u?")。原始帖子被显式添加到线性内存中的 0x5000 位置,以供该方法访问,从而改变帖子内容。

🔗 来源与扩展阅读 🔗

对于那些有兴趣深入了解 CVE-2021-38297 及其更广泛影响的人,我们提供了一份精心整理的资源和阅读列表,涵盖从官方安全公告到技术博客和学术论文。这些材料提供了对漏洞、其对软件安全的影响,以及为确保 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/

原始开发仓库:https://github.com/gkrishnan724/CVE-2021-38297

下载工具