CVE-2023-28434
MinIO MinIO
2023-09-19
MinIO contains a security feature bypass vulnerability that allows an attacker to use crafted requests to bypass metadata bucket name checking and put an object into any bucket while processing `PostPolicyBucket` to conduct privilege escalation. To carry out this attack, the attacker requires credentials with `arn:aws:s3:::*` permission, as well as enabled Console API access.
Технический анализ и план устранения
Суть уязвимости
CVE-2023-28434 представляет собой критическую уязвимость обхода механизмов безопасности (Security Feature Bypass) в MinIO. Проблема заключается в некорректной валидации имен бакетов при обработке запросов PostPolicyBucket.
Злоумышленник, обладающий учетными данными с правами доступа к любому ресурсу (arn:aws:s3:::*) и доступом к Console API, может отправить специально сформированный запрос. Это позволяет обойти проверку метаданных и записать объект в любой произвольный бакет в системе. Результатом эксплуатации является повышение привилегий (Privilege Escalation) до уровня администратора или получение полного контроля над данными во всех хранилищах.
Как исправить
Основным и единственным надежным способом устранения уязвимости является обновление MinIO до версии RELEASE.2023-03-20T20-16-18Z или выше.
1. Обновление бинарного файла (Linux) Если MinIO запущен как системная служба, выполните обновление через встроенную команду:
mc admin update alias
Или вручную замените бинарный файл:
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
mv minio /usr/local/bin/
systemctl restart minio
2. Обновление через Docker
Если вы используете контейнеризацию, обновите тег образа в вашем docker-compose.yaml или команде запуска:
docker pull minio/minio:RELEASE.2023-03-20T20-16-18Z
Затем перезапустите контейнер:
docker-compose up -d
3. Проверка версии После обновления убедитесь, что установлена безопасная версия:
minio --version
Временные меры
Если немедленное обновление невозможно, примените следующие защитные меры для снижения риска эксплуатации:
1. Ограничение доступа к Console API Заблокируйте доступ к порту консоли MinIO (по умолчанию 9001) для всех внешних IP-адресов, оставив доступ только для доверенных административных сетей с помощью Firewall (iptables/ufw).
iptables -A INPUT -p tcp --dport 9001 -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 9001 -j DROP
2. Пересмотр политик IAM
Проверьте существующие политики и временно отзовите права arn:aws:s3:::* у пользователей, которым не требуется полный доступ ко всем ресурсам. Используйте принцип наименьших привилегий (Least Privilege), явно указывая конкретные имена бакетов в политиках.
3. Отключение Console API Если управление через веб-интерфейс не является критически важным, вы можете временно отключить консоль, не назначая ей порт при запуске сервера, или заблокировав соответствующий трафик на уровне Reverse Proxy (Nginx/HAProxy).