Jinja2 Şablon Kuralları
İstem ve uygulama şablonlarında sunucu tarafı şablon enjeksiyonu ve güvensiz değişken kullanımını tespit eder.
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.
Desteklenen girdiler
.j2.jinjaYAML prompt templatesGGUF tokenizer metadataHTML 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.
- 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ı
category: JINJA2
fail_on:
- CRITICAL
- HIGH
ticket_on:
- MEDIUM
retest: "sentinel sast ./src/ --rule JINJA2"Kural dizini
| Kural kimliği | Öncelik | Başlık | CWE | Düzeltme ipucu |
|---|---|---|---|---|
| JINJA2-SSTI-001 | CRITICAL | Sunucu Tarafı Şablon Enjeksiyonu | CWE-94 | İstem şablonlarını kod gibi ele alın ve yüklemeden önce inceleyin. |
| JINJA2-UNSANDBOXED-TEMPLATE | HIGH | Sandbox Olmadan Jinja2 Render Etme | CWE-94 | Şablon işleme sürecini yalıtılmış ortam içinde yapın ve dinamik şablon metni kullanmayın. |
| JINJA2-SECRET-EXPOSURE | HIGH | Şablonda Gizli Bilgi Açığa Çıkması | CWE-200 | Kimlik bilgilerini işleme bağlamı içinde tutmayın. |
JINJA2-SSTI-001 — Sunucu Tarafı Şablon Enjeksiyonu
CRITICAL| Kural kimliği | JINJA2-SSTI-001 |
|---|---|
| Kategori | JINJA2 |
| Öncelik | CRITICAL |
| CWE | CWE-94 |
| OWASP LLM | LLM01 — Prompt Injection, LLM06 — Excessive Agency |
| Yanlış pozitif riski | LOW |
| Sorumlu | Uygulama 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
- 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 JINJA2Politika örneği
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
template = "{{ request.args.q }} {{ config.__class__.__init__.__globals__ }}"
render_template_string(template)env = SandboxedEnvironment(autoescape=True)
template = env.get_template("safe_prompt.j2")
template.render(validated_context)İlgili kurallar
- JINJA2-UNSANDBOXED-TEMPLATE: Sandbox Olmadan Jinja2 Render Etme
- JINJA2-SECRET-EXPOSURE: Şablonda Gizli Bilgi Açığa Çıkması
JINJA2-UNSANDBOXED-TEMPLATE — Sandbox Olmadan Jinja2 Render Etme
HIGH| Kural kimliği | JINJA2-UNSANDBOXED-TEMPLATE |
|---|---|
| Kategori | JINJA2 |
| Öncelik | HIGH |
| CWE | CWE-94 |
| OWASP LLM | LLM01 — Prompt Injection |
| Yanlış pozitif riski | MEDIUM |
| Sorumlu | Uygulama 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
- 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 JINJA2Politika örneği
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
template = "{{ request.args.q }} {{ config.__class__.__init__.__globals__ }}"
render_template_string(template)env = SandboxedEnvironment(autoescape=True)
template = env.get_template("safe_prompt.j2")
template.render(validated_context)İlgili kurallar
- JINJA2-SSTI-001: Sunucu Tarafı Şablon Enjeksiyonu
- JINJA2-SECRET-EXPOSURE: Şablonda Gizli Bilgi Açığa Çıkması
JINJA2-SECRET-EXPOSURE — Şablonda Gizli Bilgi Açığa Çıkması
HIGH| Kural kimliği | JINJA2-SECRET-EXPOSURE |
|---|---|
| Kategori | JINJA2 |
| Öncelik | HIGH |
| CWE | CWE-200 |
| OWASP LLM | LLM02 — Sensitive Information Disclosure |
| Yanlış pozitif riski | MEDIUM |
| Sorumlu | Uygulama 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
- 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 JINJA2Politika örneği
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
template = "{{ request.args.q }} {{ config.__class__.__init__.__globals__ }}"
render_template_string(template)env = SandboxedEnvironment(autoescape=True)
template = env.get_template("safe_prompt.j2")
template.render(validated_context)İlgili kurallar
- JINJA2-SSTI-001: Sunucu Tarafı Şablon Enjeksiyonu
- JINJA2-UNSANDBOXED-TEMPLATE: Sandbox Olmadan Jinja2 Render Etme