Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2021-38297-Go-wasm-Replication | Kitploit
Инструменты/GitHubGitHub/paras98/cve-2021-38297-go-wasm-replication
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийВеб-безопасностьCTFСтатьи и ИсследованияОбучение и ОбразованиеЭксплуатация Бинарных ФайловЛаборатории и Практика

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
GitHubparas98/cve-2021-38297-go-wasm-replication

CVE-2021-38297-Go-wasm-Replication

Репозиторий
2 лет назадЕщё не проверено

🚨 Эксплуатация CVE-2021-38297: Путешествие в переполнение буфера GO Wasm 🚨

🌐 Обзор уязвимости 🌐

WebAssembly (WASM) 🌍 — это передовой формат двоичных инструкций, обеспечивающий беспрепятственное выполнение языков высокого уровня, таких как C, C++, Rust и GO, в современных веб-браузерах. Однако обнаружение CVE-2021-38297 🚩 выявило критический недостаток в процессе компиляции и загрузки GO-скомпилированных WASM-бинаров. Эта уязвимость, найденная в JavaScript-загрузчике WASM (wasm_exec.js), поставляемом вместе с GO, допускала неограниченное включение данных в аргумент argv. Поскольку argv хранится в линейной памяти WASM, злоумышленники могли использовать это для перезаписи линейной памяти GO-скомпилированной WASM-программы с помощью чрезмерно большого ввода argv, что приводило к непредсказуемым и потенциально опасным последствиям. Эта уязвимость представляла значительную угрозу в версиях GO до 1.17.2. Резюме:

  1. Фронтенд отображает каждый пост и его комментарии.
  2. Во время рендеринга загружается модуль GO WASM, обрабатывающий комментарии через переменную argv, а посты — по адресу памяти 0x5000.
  3. Для контента комментариев и постов используются такие функции, как toLeetSpeak и processSharedVar соответственно.

💻 Уязвимое приложение: Vuln-Twitter 💻

В нашей концепции-доказательстве мы представляем «Vuln-Twitter» — имитацию социальной платформы, которая допускает пользовательский контент в виде постов и комментариев. Vuln-Twitter использует веб-сервер на Node.js и SQLite для хранения данных, а его фронтенд задействует обычный JavaScript вместе с модулем GO WASM под названием wordprocessor.wasm для динамического рендеринга контента. Этот модуль, в частности, включает такие методы, как toLeetSpeak, преобразующие пользовательский ввод в стилизованный «LeetSpeak» для увлекательного пользовательского опыта. Интерфейс Vuln twitter

Эксплуатация переполнения буфера

Наше исследование выявляет критическую точку эксплуатации на этапе рендеринга контента, когда каждый комментарий преобразуется модулем GO WASM. Специально созданный комментарий увеличенного размера может вызвать уязвимость, приводящую к переполнению буфера, которое изменяет содержимое исходного поста, демонстрируя классический вектор атаки — хранимый XSS. Эта уязвимость не только подчёркивает потенциал вредоносной манипуляции данными, но и указывает на более широкие последствия методов безопасного программирования в контексте веб-разработки и WASM-приложений. Обратитесь к разделу кода, выполняющему это:

Логика рендеринга

Схема линейной памяти WASM при рендеринге комментария:

Память логики рендеринга Поток эксплуатации

Воспроизведение эксплойта

Для энтузиастов и исследователей, желающих глубже изучить эту уязвимость, мы предоставляем подробные шаги по воспроизведению среды эксплойта с использованием конкретной уязвимой версии GO. Этот практический подход способствует более глубокому пониманию механики уязвимости и потенциальных стратегий смягчения. Примечание: для воспроизведения необходимо локально установить версию go go1.17.1 — уязвимую версию, используемую в этом сценарии. Обратитесь к официальной документации 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. Если скопировать этот текст и оставить его комментарием к указанному выше посту, мы сможем перезаписать исходный пост этим текстом.

Попробуйте сами и убедитесь :) Эксплойт

🛠️ Патчинг и смягчение 🛠️

Признавая серьёзность этой уязвимости, мы также описываем комплексную стратегию патчинга, использующую обновлённую и безопасную версию GO для снижения риска. Этот раздел служит руководством для разработчиков и системных администраторов по укреплению их приложений против подобных уязвимостей, подчёркивая важность регулярного обновления программного обеспечения и бдительных методов обеспечения безопасности.

В этом приложении я также предоставил скрипт патча, который использует более новую версию go:

  1. Выполните цель npm run patchServer

Это должно перекомпилировать go-файл с новой версией и запустить сервер с пропатченной версией.

Теперь вы должны заметить, что пост больше не перезаписывается, а если вы посмотрите в консоль, то увидите ошибку Argument length too long. Патч

💡 Заключение и размышления 💡

Наше путешествие по эксплуатации и смягчению CVE-2021-38297 даёт ценные идеи о проблемах и возможностях, связанных с интеграцией языков программирования высокого уровня в веб-среды через WASM. Оно побуждает критически пересмотреть методы обеспечения безопасности в разработке ПО, призывая к упреждающему подходу к управлению уязвимостями и внедрению безопасных стандартов кодирования. Основываясь на нашем понимании, мы считаем, что схема линейной памяти GO показана ниже:

Схема памяти GO

🎓 Презентация и академический вклад 🎓

Будучи студентами Университета Карнеги-Меллона, наше исследование CVE-2021-38297 вносит вклад в более широкий академический и профессиональный дискурс о кибербезопасности, предлагая практический пример последствий новых технологий для безопасности программного обеспечения. Наши презентационные материалы, доступные для ознакомления, дополнительно разъясняют наши выводы и методологии, приглашая к диалогу и сотрудничеству в сообществе кибербезопасности.

🌟 Благодарности и вклад 🌟

Этот проект — свидетельство совместных исследований и академической работы, возглавляемый преданной командой студентов и исследователей:

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

Техническое объяснение

Уязвимое приложение: Vuln-Twitter

Эта концепция-доказательство демонстрирует социальное приложение Vuln-Twitter, позволяющее нескольким пользователям публиковать контент и комментарии. Веб-сервер, построенный на Node.js, использует SQLite для хранения данных постов и комментариев.

Фронтенд использует обычный JS вместе с модулем GO WASM под названием wordprocessor.wasm. Этот модуль предоставляет такие методы, как toLeetSpeak, который преобразует входные строки в «LeetSpeak» (например, «Hello!» становится «h3ll0!»).

Модули GO WASM помогают отображать посты и комментарии в LeetSpeak.

Эксплуатация переполнения буфера

Во время рендеринга во фронтенде, при получении постов и комментариев от сервера, каждый комментарий подвергается рендерингу в «LeetSpeak» с использованием модуля GO WASM. Комментарий для каждого поста передаётся как часть переменной argv после загрузки модуля GO WASM.

Кроме того, в GO-модуле существует метод processSharedVar(), предназначенный для чтения строки, расположенной по адресу 0x5000, и преобразования её в упрощённую речь (например, «How are you?» становится «How r u?»). Исходный пост явно добавляется по адресу 0x5000 в линейную память для доступа через этот метод, изменяя содержимое поста.

🔗 Источники и дополнительное чтение 🔗

Для тех, кто заинтересован в более глубоком изучении CVE-2021-38297 и его более широких последствий, мы предоставляем подборку ресурсов и материалов для чтения — от официальных бюллетеней безопасности до технических блогов и академических работ. Эти материалы дают всестороннее понимание уязвимости, её влияния на безопасность программного обеспечения и текущих усилий по обеспечению безопасности и целостности веб-приложений.

  • 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

Скачать инструмент