AI Gateway MLflow принимает значение auth_config.api_base при создании секрета шлюза (mlflow/server/handlers.py, _create_gateway_secret) без проверки схемы, хоста или диапазона IP-адресов; значение сохраняется дословно. Конечная точка прокси-сервера шлюза (mlflow/server/gateway_api.py, raw_proxy) впоследствии отправляет HTTP-запрос к этой сохраненной api_base плюс путь, предоставленный вызывающей стороной, и возвращает полный текст ответа. Существующая защита SSRF MLflow, _validate_webhook_url (которая блокирует неглобальные IP-адреса и IP-адреса с метаданными), никогда не вызывается нигде на этом пути к секретному коду/прокси-коду шлюза.
Действие CreateGatewaySecret дополнительно не имеет записи в карте проверки разрешений, поэтому для него требуется только базовая аутентификация, а не какая-либо конкретная область. Это означает, что любой аутентифицированный пользователь, включая учетные записи только для чтения, может создать секрет, указывающий на внутренний адрес, и получить к нему доступ через конечную точку прокси, потенциально раскрывая учетные данные IAM облачного экземпляра через службы метаданных. Это связано с CVE-2026-4035, который касается отдельного механизма в той же функции секрета шлюза (разрешение $ENV_VAR на стороне сервера внутри поля api_key, обеспечивающее утечку учетных данных в настроенный восходящий поток); обнаружение здесь представляет собой независимый пробел в отсутствующей проверке в самом пункте назначения api_base, на который это исправление не влияет.
Показать оригинальное описание (EN)
MLflow's AI Gateway accepts an auth_config.api_base value when creating a gateway secret (mlflow/server/handlers.py, _create_gateway_secret) with no validation of scheme, host, or IP range; the value is stored verbatim. The gateway proxy endpoint (mlflow/server/gateway_api.py, raw_proxy) subsequently issues an HTTP request to that stored api_base plus a caller-supplied path and returns the full response body.
Характеристики атаки
Последствия
Строка CVSS v3.1