
نقطة الدخول للثغرة هي load() في torch/serialization.py
عندما تكون الحماية (weights_only) مفعّلة: سيؤدي تحميل ملف tar إلى استدعاء هذه الدوال في سلسلة:
load(): torch/serialization.py:1117_load_legacy(): torch/serialization.py:1376 إلى torch/serialization.py:1406persistent_load(): torch/serialization.py:1474pickle_moudle.load(): torch/serialization.py:1487Unpickler.load(): torch/_weights_only_unpickler.py:214في وضع weights_only_unpickler، يتعلق الأمر كله بإلغاء تسلسل pickle، لذا قد يساعد البحث عن بروتوكول pickle. المرجع: https://rushter.com/blog/pickle-serialization-internals/
يقوم هذا الـ POC أولاً بإنشاء ملف tar خبيث، لاحظ أن اسم الملف "storages" مطلوب من قبل pytorch، ثم يحمّل ملف tar لتفعيل الثغرة.
الآن ملف tar قابل للتنفيذ في الوضع غير الآمن. الخطوة التالية هي تفعيل الحماية الأمنية وتجاوز التحقق كما يلي:
_pickle.UnpicklingError: Unsupported global: GLOBAL __builtin__.eval was not an allowed global by default. Please use `torch.serialization.add_safe_globals([eval])` to allowlist this global if you trust this class/function.