И помимо самого S3 API, в них могут быть реализованы и какие-нибудь свои фишки, которые важно знать.
Например, MinIO поддерживает листинг содержимого ZIP архивов и получение файлов из них.
Для использования данной функциональности необходимо чтобы объект в бакете имел расширение zip (проверяется по подстроке ".zip/") и HTTP запрос содержал дополнительный заголовок
x-minio-extract.Листинг содержимого архива:
GET /bucket/?prefix=archive.zip/&list-type=2 HTTP/1.1
Host: 127.0.0.1:9000
x-minio-extract: true
Получение файла из архива:
GET /bucket/archive.zip/test.html HTTP/1.1
Host: 127.0.0.1:9000
x-minio-extract: true
В специфичных условиях подобное поведение может быть использовано для XSS если:
• Атакующий контролирует содержимое и имя объекта, но не контролирует Content-Type (в таки случаях также нужно проверять параметр response-content-type)
• Запросы к объектам кэшируются
Закэшировав XSS в ответе используя
x-minio-extract, её можно будет использовать против других клиентов, так как этот заголовок не будет использоваться в ключе кэша.Еще одна интересная функциональность в MinIO - подпись на события в бакете.
В случае, если бакет настроен небезопасно и для него разрешен action
s3:ListenBucketNotification, это позволяет в режиме реального времени получать информацию о внутреннем адресе MinIO, изменениях объектов или запросах пользователей к объектам, включая IP адрес и User-Agent.Пример запроса (Полный список событий):
curl "http://127.0.0.1:9000/bucket/?events=s3:ObjectAccessed:*&ping=1"