EresusSecurity

Jinja2 Şablon Kuralları

İstem ve uygulama şablonlarında sunucu tarafı şablon enjeksiyonu ve güvensiz değişken kullanımını tespit eder.

Kısa tanım

Jinja2 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.

İstem şablonları uygulama mantığının parçasıdır. Güvensiz şablon kullanımı veri sızıntısı veya kod çalıştırma riskine dönüşebilir.

Kural yardım URL’i

Desteklenen girdiler

  • .j2
  • .jinja
  • YAML prompt templates
  • GGUF tokenizer metadata
  • HTML report templates

Tipik saldırı senaryoları

  • Kullanıcı girdisi Jinja2 şablonuna ham olarak yerleştirilir.
  • Şablon yalıtımı devre dışıdır veya tehlikeli nesnelere erişir.
  • İstem şablonu gizli sistem bilgilerini çıktıya taşır.

Algılama mantığı

Sentinel Jinja2 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

Jinja2 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: JINJA2
fail_on:
  - CRITICAL
  - HIGH
ticket_on:
  - MEDIUM
retest: "sentinel sast ./src/ --rule JINJA2"

Kural dizini

Kural kimliğiÖncelikBaşlıkCWEDüzeltme ipucu
JINJA2-SSTI-001CRITICALSunucu Tarafı Şablon EnjeksiyonuCWE-94İstem şablonlarını kod gibi ele alın ve yüklemeden önce inceleyin.
JINJA2-UNSANDBOXED-TEMPLATEHIGHSandbox Olmadan Jinja2 Render EtmeCWE-94Şablon işleme sürecini yalıtılmış ortam içinde yapın ve dinamik şablon metni kullanmayın.
JINJA2-SECRET-EXPOSUREHIGHŞablonda Gizli Bilgi Açığa ÇıkmasıCWE-200Kimlik bilgilerini işleme bağlamı içinde tutmayın.

JINJA2-SSTI-001Sunucu Tarafı Şablon Enjeksiyonu

CRITICAL
Kural kimliğiJINJA2-SSTI-001
KategoriJINJA2
ÖncelikCRITICAL
CWECWE-94
OWASP LLMLLM01 — Prompt Injection, LLM06 — Excessive Agency
Yanlış pozitif riskiLOW
SorumluUygulama güvenliği ve arka uç/ajan sahibi
Yayın kararıYayını durdurun; model dosyası veya kod yolu izole edilmeden üretime alınmamalı.

Açıklama

Python nesneleri arasında dolaşabilen, global nesnelere erişebilen veya işlev çalıştırabilen Jinja2 ifadelerini tespit eder.

Neden önemli?

İstem şablonları uygulama mantığının parçasıdır. Güvensiz şablon kullanımı veri sızıntısı veya kod çalıştırma riskine dönüşebilir.

Ne zaman tetiklenir?

Sentinel bu kuralı Jinja2 kategorisinde şu kanıtı gördüğünde tetikler: Şablonda __class__, __mro__, __subclasses__, config, globals veya benzeri nesne dolaşımı 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

Şablonda __class__, __mro__, __subclasses__, config, globals veya benzeri nesne dolaşımı 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ığı düşüktür. Kanıt doğrudan dosya, opcode, gizli bilgi örüntüsü, yol veya manifest alanına bağlanıyorsa bulguyu gerçek kabul edip kapanış kanıtı isteyin.

İnceleme ve önceliklendirme

Operasyonel kontrol listesi
  • Sorumlu: Uygulama güvenliği ve arka uç/ajan sahibi.
  • Karar: Yayını durdurun; model dosyası veya kod yolu izole edilmeden üretime alınmamalı.
  • Kanıt: Şablonda __class__, __mro__, __subclasses__, config, globals veya benzeri nesne dolaşımı görülür.
  • Kapanış: sentinel sast ./src/ --rule JINJA2 komutu temiz dönmeli.

Nasıl düzeltilir?

İstem şablonlarını kod gibi değerlendirin, yüklemeden önce inceleyin ve kullanıcı girdisini şablon metni olarak çalıştırmayın.

CLI

sentinel sast ./src/ --rule JINJA2

Politika örneği

sentinel-policy.yml
rules:
  JINJA2-SSTI-001:
    owner: "Application security and backend/agent owner"
    fail_on: ["CRITICAL", "HIGH"]
    retest: "sentinel sast ./src/ --rule JINJA2"

Beklenen çıktı

JINJA2-SSTI-001 CRITICAL
Sunucu Tarafı Şablon Enjeksiyonu
İstem şablonlarını kod gibi ele alın ve yüklemeden önce inceleyin.

Örnek

Riskli
template = "{{ request.args.q }} {{ config.__class__.__init__.__globals__ }}"
render_template_string(template)
Daha güvenli
env = SandboxedEnvironment(autoescape=True)
template = env.get_template("safe_prompt.j2")
template.render(validated_context)

İlgili kurallar

JINJA2-UNSANDBOXED-TEMPLATESandbox Olmadan Jinja2 Render Etme

HIGH
Kural kimliğiJINJA2-UNSANDBOXED-TEMPLATE
KategoriJINJA2
ÖncelikHIGH
CWECWE-94
OWASP LLMLLM01 — Prompt Injection
Yanlış pozitif riskiMEDIUM
SorumluUygulama güvenliği ve arka uç/ajan sahibi
Yayın kararıYayın kapısı olarak değerlendirin; düzeltme veya açık risk kabulü gerekir.

Açıklama

Güvenilmeyen şablon metinleriyle varsayılan Environment veya render_template_string kullanan Jinja2 işleme yollarını işaretler.

Neden önemli?

İstem şablonları uygulama mantığının parçasıdır. Güvensiz şablon kullanımı veri sızıntısı veya kod çalıştırma riskine dönüşebilir.

Ne zaman tetiklenir?

Sentinel bu kuralı Jinja2 kategorisinde şu kanıtı gördüğünde tetikler: SandboxedEnvironment yerine varsayılan Environment ya da dinamik şablon metni kullanımı 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

SandboxedEnvironment yerine varsayılan Environment ya da dinamik şablon metni kullanımı 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: Uygulama güvenliği ve arka uç/ajan sahibi.
  • Karar: Yayın kapısı olarak değerlendirin; düzeltme veya açık risk kabulü gerekir.
  • Kanıt: SandboxedEnvironment yerine varsayılan Environment ya da dinamik şablon metni kullanımı görülür.
  • Kapanış: sentinel sast ./src/ --rule JINJA2 komutu temiz dönmeli.

Nasıl düzeltilir?

Şablon işleme sürecini yalıtılmış ortam içine alın ve dinamik şablon metinlerinden kaçının.

CLI

sentinel sast ./src/ --rule JINJA2

Politika örneği

sentinel-policy.yml
rules:
  JINJA2-UNSANDBOXED-TEMPLATE:
    owner: "Application security and backend/agent owner"
    fail_on: ["CRITICAL", "HIGH"]
    retest: "sentinel sast ./src/ --rule JINJA2"

Beklenen çıktı

JINJA2-UNSANDBOXED-TEMPLATE HIGH
Sandbox Olmadan Jinja2 Render Etme
Şablon işleme sürecini yalıtılmış ortam içinde yapın ve dinamik şablon metni kullanmayın.

Örnek

Riskli
template = "{{ request.args.q }} {{ config.__class__.__init__.__globals__ }}"
render_template_string(template)
Daha güvenli
env = SandboxedEnvironment(autoescape=True)
template = env.get_template("safe_prompt.j2")
template.render(validated_context)

İlgili kurallar

JINJA2-SECRET-EXPOSUREŞablonda Gizli Bilgi Açığa Çıkması

HIGH
Kural kimliğiJINJA2-SECRET-EXPOSURE
KategoriJINJA2
ÖncelikHIGH
CWECWE-200
OWASP LLMLLM02 — Sensitive Information Disclosure
Yanlış pozitif riskiMEDIUM
SorumluUygulama güvenliği ve arka uç/ajan sahibi
Yayın kararıYayın kapısı olarak değerlendirin; düzeltme veya açık risk kabulü gerekir.

Açıklama

İşleme bağlamı içine kimlik bilgisi, token veya gizli sistem bilgisinin girdiğini tespit eder.

Neden önemli?

İstem şablonları uygulama mantığının parçasıdır. Güvensiz şablon kullanımı veri sızıntısı veya kod çalıştırma riskine dönüşebilir.

Ne zaman tetiklenir?

Sentinel bu kuralı Jinja2 kategorisinde şu kanıtı gördüğünde tetikler: İşleme bağlamı içinde API anahtarı, token, parola veya gizli yapılandırma alanı 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

İşleme bağlamı içinde API anahtarı, token, parola veya gizli yapılandırma alanı 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: Uygulama güvenliği ve arka uç/ajan sahibi.
  • Karar: Yayın kapısı olarak değerlendirin; düzeltme veya açık risk kabulü gerekir.
  • Kanıt: İşleme bağlamı içinde API anahtarı, token, parola veya gizli yapılandırma alanı bulunur.
  • Kapanış: sentinel sast ./src/ --rule JINJA2 komutu temiz dönmeli.

Nasıl düzeltilir?

Kimlik bilgilerini işleme bağlamı dışına çıkarın, logları redakte edin ve gizli değerleri gizli bilgi yöneticisinden alın.

CLI

sentinel sast ./src/ --rule JINJA2

Politika örneği

sentinel-policy.yml
rules:
  JINJA2-SECRET-EXPOSURE:
    owner: "Application security and backend/agent owner"
    fail_on: ["CRITICAL", "HIGH"]
    retest: "sentinel sast ./src/ --rule JINJA2"

Beklenen çıktı

JINJA2-SECRET-EXPOSURE HIGH
Şablonda Gizli Bilgi Açığa Çıkması
Kimlik bilgilerini işleme bağlamı içinde tutmayın.

Örnek

Riskli
template = "{{ request.args.q }} {{ config.__class__.__init__.__globals__ }}"
render_template_string(template)
Daha güvenli
env = SandboxedEnvironment(autoescape=True)
template = env.get_template("safe_prompt.j2")
template.render(validated_context)

İlgili kurallar

Kaynaklar