EresusSecurity

PyTorch ve TorchScript Kuralları

Güvensiz PyTorch checkpoint yükleme, TorchScript özel operatör ve dinamik hub içe aktarma akışlarını tespit eder.

Kısa tanım

PyTorch kural ailesi; bu yüzeydeki bulguları kural kimliği, öncelik, CWE, OWASP LLM, sorumlu, yayın kararı ve yeniden test komutuyla kapatılabilir aksiyona çevirir.

PyTorch checkpoint dosyaları çoğunlukla pickle verisi taşır. TorchScript ve hub akışları da model grafiği dışında Python veya yerel kod çalıştırabilir.

Kural yardım URL’i

Desteklenen girdiler

  • .pt
  • .pth
  • .ckpt
  • .torchscript
  • hubconf.py

Tipik saldırı senaryoları

  • Checkpoint dosyası torch.load sırasında Python kodu çalıştırır.
  • TorchScript modeli incelenmemiş yerel özel operatöre ihtiyaç duyar.
  • hubconf.py dosyası sabitlenmemiş bir depodan kod çeker.

Algılama mantığı

Sentinel PyTorch kurallarında kanıt alanını dosya yolu, üst veri, opcode, AST düğümü, manifest alanı, bağımlılık veya arşiv girdisi gibi yeniden üretilebilir sinyale bağlar. Bulgu kapatılırken aynı sinyal ortadan kalkmalıdır.

İnceleme ve önceliklendirme

PyTorch bulgularını tek başına "tarayıcı gürültüsü" gibi okumayın. Önce kanıtı doğrulayın, sonra yayın kararını önceliğe bağlayın, en sonunda aynı Sentinel komutuyla kapanış kanıtı üretin.

Operasyonel kontrol listesi
  • Kaynak: dosya, manifest, istem, arşiv veya bağımlılık nereden geldi?
  • Etki: kod çalıştırma, veri sızıntısı, tedarik zinciri veya kaynak tüketimi mi?
  • Kontrol: izin listesi, hash doğrulaması, yalıtım, ağ çıkış politikası veya gizli bilgi döndürme gerekiyor mu?
  • Kanıt: düzeltmeden sonra aynı kural kategorisi temiz dönüyor mu?

Düzeltme

Düzeltme, yalnızca bulguyu susturmak değil risk sınırını değiştirmek anlamına gelmelidir: çalıştırılabilir biçimi kaldırın, kaynak veya hash değerini sabitleyin, araç iznini daraltın, gizli bilgiyi döndürün ya da çalışma zamanı yalıtımı ekleyin.

CI politikası

sentinel-policy.yml
category: TORCH
fail_on:
  - CRITICAL
  - HIGH
ticket_on:
  - MEDIUM
retest: "sentinel artifact ./models/ --rule TORCH"

Kural dizini

Kural kimliğiÖncelikBaşlıkCWEDüzeltme ipucu
TORCH-LOAD-UNTRUSTEDCRITICALGüvenilmeyen torch.load Seri DışılaştırmasıCWE-502Çalıştırılabilir Python nesnesi değil, tensor yükleyin.
TORCH-SCRIPT-CUSTOM-OPHIGHTorchScript Özel OperatörüCWE-94CWE-829Özel operatörleri yayına almadan önce inceleyin ve imzalayın.
TORCH-HUB-DYNAMIC-IMPORTMEDIUMDinamik Torch Hub İçe AktarmaCWE-829CWE-494Uzak hub çalıştırmasını sabitlenmiş ve depoya alınmış model koduyla değiştirin.

TORCH-LOAD-UNTRUSTEDGüvenilmeyen torch.load Seri Dışılaştırması

CRITICAL
Kural kimliğiTORCH-LOAD-UNTRUSTED
KategoriTORCH
ÖncelikCRITICAL
CWECWE-502
OWASP LLMLLM03 — Supply Chain
Yanlış pozitif riskiMEDIUM
SorumluAI/ML platform veya model yayın sahibi
Yayın kararıYayını durdurun; model dosyası veya kod yolu izole edilmeden üretime alınmamalı.

Açıklama

Güvenilmeyen checkpoint dosyalarında weights_only veya eşdeğer güvenli yükleme yolu olmadan torch.load kullanımını işaretler.

Neden önemli?

PyTorch checkpoint dosyaları çoğunlukla pickle verisi taşır. TorchScript ve hub akışları da model grafiği dışında Python veya yerel kod çalıştırabilir.

Ne zaman tetiklenir?

Sentinel bu kuralı PyTorch kategorisinde şu kanıtı gördüğünde tetikler: weights_only=True kullanılmayan torch.load(...) çağrısı veya pickle tabanlı checkpoint yüklemesini gösteren dosya üst verisi bulunur. Bulgu; dosya adı, üst veri, opcode, AST düğümü veya manifest alanı gibi yeniden üretilebilir kanıtla raporlanmalıdır.

Kanıt biçimi

weights_only=True kullanılmayan torch.load(...) çağrısı veya pickle tabanlı checkpoint yüklemesini gösteren dosya üst verisi bulunur.

Beklenen kanıt

Rapor; etkilenen dosya veya manifest yolunu, yakalanan sinyali, kural kimliğini, önceliği, sorumluyu ve kapanışta çalıştırılacak yeniden test komutunu içermelidir.

Yanlış pozitif notu

Yanlış pozitif olasılığı orta seviyededir. Önce kaynak, beklenen kullanım ve sahip bilgisini doğrulayın; gerekirse izin listesi ekleyin ama kanıtı rapordan silmeyin.

İnceleme ve önceliklendirme

Operasyonel kontrol listesi
  • Sorumlu: AI/ML platform veya model yayın sahibi.
  • Karar: Yayını durdurun; model dosyası veya kod yolu izole edilmeden üretime alınmamalı.
  • Kanıt: weights_only=True kullanılmayan torch.load(...) çağrısı veya pickle tabanlı checkpoint yüklemesini gösteren dosya üst verisi bulunur.
  • Kapanış: sentinel artifact ./models/ --rule TORCH komutu temiz dönmeli.

Nasıl düzeltilir?

Desteklenen yerlerde weights_only=True kullanın, imzalı state_dict dosyaları yükleyin ve rastgele Python nesnesi içeren checkpoint yüklemeyi CI’da engelleyin.

CLI

sentinel artifact ./models/ --rule TORCH

Politika örneği

sentinel-policy.yml
rules:
  TORCH-LOAD-UNTRUSTED:
    owner: "AI/ML platform or model release owner"
    fail_on: ["CRITICAL", "HIGH"]
    retest: "sentinel artifact ./models/ --rule TORCH"

Beklenen çıktı

TORCH-LOAD-UNTRUSTED CRITICAL
Güvenilmeyen torch.load Seri Dışılaştırması
Çalıştırılabilir Python nesnesi değil, tensor yükleyin.

Örnek

Riskli
import torch

model = torch.load("checkpoint.pt")
Daha güvenli
import torch

state = torch.load("weights.pt", weights_only=True)
model.load_state_dict(state)

İlgili kurallar

TORCH-SCRIPT-CUSTOM-OPTorchScript Özel Operatörü

HIGH
Kural kimliğiTORCH-SCRIPT-CUSTOM-OP
KategoriTORCH
ÖncelikHIGH
CWECWE-94CWE-829
OWASP LLMLLM03 — Supply Chain
Yanlış pozitif riskiMEDIUM
SorumluAI/ML platform veya model yayın sahibi
Yayın kararıYayın kapısı olarak değerlendirin; düzeltme veya açık risk kabulü gerekir.

Açıklama

İncelenmemiş yerel çalıştırma davranışı ekleyebilen özel operatörlere referans veren TorchScript grafiği veya model üst verisini tespit eder.

Neden önemli?

PyTorch checkpoint dosyaları çoğunlukla pickle verisi taşır. TorchScript ve hub akışları da model grafiği dışında Python veya yerel kod çalıştırabilir.

Ne zaman tetiklenir?

Sentinel bu kuralı PyTorch kategorisinde şu kanıtı gördüğünde tetikler: aten/özel ad alanı, paylaşımlı kütüphane yükleme ipucu veya beklenen torch izin listesi dışında operatör adı görülür. Bulgu; dosya adı, üst veri, opcode, AST düğümü veya manifest alanı gibi yeniden üretilebilir kanıtla raporlanmalıdır.

Kanıt biçimi

aten/özel ad alanı, paylaşımlı kütüphane yükleme ipucu veya beklenen torch izin listesi dışında operatör adı görülür.

Beklenen kanıt

Rapor; etkilenen dosya veya manifest yolunu, yakalanan sinyali, kural kimliğini, önceliği, sorumluyu ve kapanışta çalıştırılacak yeniden test komutunu içermelidir.

Yanlış pozitif notu

Yanlış pozitif olasılığı orta seviyededir. Önce kaynak, beklenen kullanım ve sahip bilgisini doğrulayın; gerekirse izin listesi ekleyin ama kanıtı rapordan silmeyin.

İnceleme ve önceliklendirme

Operasyonel kontrol listesi
  • Sorumlu: AI/ML platform veya model yayın sahibi.
  • Karar: Yayın kapısı olarak değerlendirin; düzeltme veya açık risk kabulü gerekir.
  • Kanıt: aten/özel ad alanı, paylaşımlı kütüphane yükleme ipucu veya beklenen torch izin listesi dışında operatör adı görülür.
  • Kapanış: sentinel artifact ./models/ --rule TORCH komutu temiz dönmeli.

Nasıl düzeltilir?

Operatör kaynağını envantere alın, imzalı yerel eklenti şartı koyun ve modeli üretimden önce yalıtılmış ortamda yükleyin.

CLI

sentinel artifact ./models/ --rule TORCH

Politika örneği

sentinel-policy.yml
rules:
  TORCH-SCRIPT-CUSTOM-OP:
    owner: "AI/ML platform or model release owner"
    fail_on: ["CRITICAL", "HIGH"]
    retest: "sentinel artifact ./models/ --rule TORCH"

Beklenen çıktı

TORCH-SCRIPT-CUSTOM-OP HIGH
TorchScript Özel Operatörü
Özel operatörleri yayına almadan önce inceleyin ve imzalayın.

Örnek

Riskli
import torch

model = torch.load("checkpoint.pt")
Daha güvenli
import torch

state = torch.load("weights.pt", weights_only=True)
model.load_state_dict(state)

İlgili kurallar

TORCH-HUB-DYNAMIC-IMPORTDinamik Torch Hub İçe Aktarma

MEDIUM
Kural kimliğiTORCH-HUB-DYNAMIC-IMPORT
KategoriTORCH
ÖncelikMEDIUM
CWECWE-829CWE-494
OWASP LLMLLM03 — Supply Chain
Yanlış pozitif riskiMEDIUM
SorumluAI/ML platform veya model yayın sahibi
Yayın kararıSahip atayın, sprint içinde düzeltin ve yeniden test komutunu iş kaydına ekleyin.

Açıklama

Model kodunu değişebilir uzak depolardan indirip içe aktaran hub yükleme akışlarını bulur.

Neden önemli?

PyTorch checkpoint dosyaları çoğunlukla pickle verisi taşır. TorchScript ve hub akışları da model grafiği dışında Python veya yerel kod çalıştırabilir.

Ne zaman tetiklenir?

Sentinel bu kuralı PyTorch kategorisinde şu kanıtı gördüğünde tetikler: torch.hub.load içinde dal adı, sabitlenmemiş referans veya trust_repo atlatması görülür. Bulgu; dosya adı, üst veri, opcode, AST düğümü veya manifest alanı gibi yeniden üretilebilir kanıtla raporlanmalıdır.

Kanıt biçimi

torch.hub.load içinde dal adı, sabitlenmemiş referans veya trust_repo atlatması görülür.

Beklenen kanıt

Rapor; etkilenen dosya veya manifest yolunu, yakalanan sinyali, kural kimliğini, önceliği, sorumluyu ve kapanışta çalıştırılacak yeniden test komutunu içermelidir.

Yanlış pozitif notu

Yanlış pozitif olasılığı orta seviyededir. Önce kaynak, beklenen kullanım ve sahip bilgisini doğrulayın; gerekirse izin listesi ekleyin ama kanıtı rapordan silmeyin.

İnceleme ve önceliklendirme

Operasyonel kontrol listesi
  • Sorumlu: AI/ML platform veya model yayın sahibi.
  • Karar: Sahip atayın, sprint içinde düzeltin ve yeniden test komutunu iş kaydına ekleyin.
  • Kanıt: torch.hub.load içinde dal adı, sabitlenmemiş referans veya trust_repo atlatması görülür.
  • Kapanış: sentinel artifact ./models/ --rule TORCH komutu temiz dönmeli.

Nasıl düzeltilir?

Commit SHA sabitleyin, güvenilir kodu içeride aynalayın ve hubconf.py dosyasını çalıştırmadan önce inceleyin.

CLI

sentinel artifact ./models/ --rule TORCH

Politika örneği

sentinel-policy.yml
rules:
  TORCH-HUB-DYNAMIC-IMPORT:
    owner: "AI/ML platform or model release owner"
    fail_on: ["CRITICAL", "HIGH"]
    retest: "sentinel artifact ./models/ --rule TORCH"

Beklenen çıktı

TORCH-HUB-DYNAMIC-IMPORT MEDIUM
Dinamik Torch Hub İçe Aktarma
Uzak hub çalıştırmasını sabitlenmiş ve depoya alınmış model koduyla değiştirin.

Örnek

Riskli
import torch

model = torch.load("checkpoint.pt")
Daha güvenli
import torch

state = torch.load("weights.pt", weights_only=True)
model.load_state_dict(state)

İlgili kurallar

Kaynaklar