脆弱性のエントリポイントは torch/serialization.py の load() です
保護(weights_only)が有効な場合: tarファイルをロードすると、以下の関数が連鎖的に呼び出されます:
load(): torch/serialization.py:1117_load_legacy(): torch/serialization.py:1376 to torch/serialization.py:1406persistent_load(): torch/serialization.py:1474pickle_moudle.load(): torch/serialization.py:1487Unpickler.load(): torch/_weights_only_unpickler.py:214weights_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.