SSTI Server Side Template Injection Nedir?

Bu yazımızda sizlere SSTI nedir, etkileri ve SSTI saldırısı nasıl yapılır ve buna karşı nasıl önlemler almanız gerektiğini anlatacağız.
Server side template injection kelimelerinin kısaltması olan SSTI, saldırganların server tarafında kullanılan yerel şablonlarına kötü niyetli komutları yürütebilen girdi eklendiği bir güvenlik açığıdır. Şablon motoruna geçersiz kullanıcı girişi yerleştirildiği zaman yani giriş doğrulaması düzgün işlenmediğinde güvenlik açığı oluşur ve bu da uzaktan kod yürütülmesine (RCE) neden olabilir.

Kullanıcılar, ürünler, sonuç çıktıları hakkında bilgileri görüntülemek için kullanılan şablon motorları(template engine), dinamik verileri web sayfalarına yerleştiren sonuçların üretilmesi için şablonları bir veri modeliyle birleştirir. MVC (Model View Controller) sisteminde Model – View – Controller’dan oluşan 3 adet katman bulunur. Bu süreç kullanıcı isteği ile başlar controller → model → controller → view → çıktı ile sonlanmaktadır.

En popüler şablon motorları;

  • PHP – Smarty, Twigs
  • Java – Velocity, Freemaker
  • Python – JINJA, Mako, Tornado
  • JavaScript – Jade, Rage
  • Ruby – Liquid


SSTI (Sunucu tarafı şablon ekleme) sonucu oluşan güvenlik açıkları genellikle kritiktir ve back end sunucusunun tüm kontrolünü ele geçirerek uzaktan kod yürütülmesine neden olur. (RCE) Kod yürütülmese de, saldırgan sunucuda bulunan hassas verileri elde eder. Şablon motorunuza bağlı olarak, bir SSTI güvenlik açıkları her zaman kritik olmayabilir.

Yani bu güvenlik açıkları, şablon motoruna ve uygulamanın şablon motorunu nasıl kullandığına bağlı olarak web siteleri çeşitli saldırılara uğrayabilir. 

Saldırgan back end serverının tam kontrolünü ele geçirerek ve onu dahili altyapı üzerinde başka saldırılar gerçekleştirerek uzaktan kod yürütmeyi başarabilir.

Özetle tam uzaktan kod yürütmenin mümkün olmadığı durumlarda bile, bir saldırgan genellikle çok sayıda başka saldırının temeli olarak SSTI kullanmayı sürdürebilir ve potansiyel olarak sunucudaki hassas verilere ve rastgele dosyalara okuma erişimi elde edebilir.

Güvenlik Açığı Nasıl Belirlenir?

SSTI güvenlik açıklarını belirlemek için, şablonu bulanıklaştırmak için şablonlarda sık sık kullanılan özel karakterlerden oluşan Polyglot yükü kullanın.

Bir güvenlik açığı durumunda, bir hata mesajı dönebilir veya sunucu tarafından istisna oluşturulabilir.

Güvenlik açığını belirlemek için yapmanız gerekenler:

  • Şablon eklemesinin nerede olduğunu bulun.
  • Şablon motorunu tanımlayın ve güvenlik açığını doğrulayın
  • Belirli şablon motoru için kılavuzları takip edin
  • Güvenlik açığını kullanın

Örnek şablon:

SSTI Server Side Template Injection Nedir?

Güvenlik açıkları özellikle login, register, password reset, search, file upload, URL, header başlıklarında bulunmaktadır. Güvenlik açığı testinde ilk öncelik inputlar, url ve başlıklardır. Güvenlik açıklarıdaha önce de bahsettiğimiz gibi kullandığınız şablon motorlarına göre değişiklik göstermektedir.

SSTI Saldırısı

Sunucu tarafı şablon ekleme saldırınlarında başarılı bir saldırı planı oluşturmak için yapmanız gerekenler;

  1. Tespit etmek: Plaintext context
  2. Tanılamak: Code context
  3. Açığa çıkarmak
    1. Oku
    2. Araştır
    3. Saldır

Payload(Yük) Seçimi?

Şablon motorlarının kullandığı yazılım dilleri yük seçimini etkiler. Örneğin;

  • TWIG ile “id” komutu çalıştırmak için ;
    {{_self.env.registerUndefinedFilterCallback(“exec”)}}{{_self.env.getFilter(“id”)}}
  • SMARTY ile “id” komutu çalıştırmak için ;
    {php}echo system(“id”);{/php}
  • Freemarker ile “id” komutu çalıştırmak için ;
    <#assign ex = “freemarker.template.utility.Execute”?new()>${ ex(“id”)}
  • Mako ile “id” komutu çalıştırmak için ;
    <% import os
    x=os.popen(‘id’).read()
    %>
    ${x}
  • Kısaca her bir şablon motoru için programlama diline göre farklı payload seçilir.

Server Side Template Injection saldırıları için Tplmap aracı en kullanışlı tool olarak görülmektedir. Bu aracın desteklediği şablon motorlarının listesine kendi Github Sayfası üzerinde bulabilirsiniz.

SSTI güvenlik açıkları nasıl önlenir?

  • Yapmanız gereken en iyi yol hiçbir kullanıcının yeni şablonları değiştirmesine veya göndermesine izin vermemektir. 
  • Temizleme yapın. Herhangi bir kötü amaçlı yazılımdan kaynaklanan güvenlik açıklarını en aza indirmek için kullanıcı girişini şablonlara aktarmadan kontrol edin ve temizleyin.
  • Riskli karakterler kullandığınızda sandbox kullanabilirsiniz.
  • En basit yol ise Mustache gibi “mantıksız” bir şablon motoru kullanmaktır. 
  • Kullanıcı kodunu yalnızca potansiyel olarak tehlikeli olan ve işlevlerin tamamen kaldırıldığı korumalı bir ortamda yürütün. 
  • Son olarak, şablonunuzu kilitli bir Docker konteynırında dağıtarak kendi korumalı alanınızı yaratın.

İlginizi Çekebilecek Makaleler​

LLM (Large Language Models) Nedir?

Günümüzde yapay zeka ve makine öğrenmesi, teknolojinin birçok alanında devrim niteliğinde ilerlemeler kaydetmiştir. Bu ilerlemelerin merkezinde yer alan büyük dil modelleri (LLM – Large Language

Devamı »
Message Broker Nedir?

Message broker, birçok farklı uygulama veya sistem arasında iletişim kurmak için kullanılan bir yazılım aracıdır. Bu araç, bir uygulama tarafından gönderilen mesajları bir veya daha

Devamı »
Loglama Nedir?

Loglama, bilgisayar sistemlerindeki olayları, hataları ve diğer önemli durumları kaydetme işlemidir. Bu kayıtlar, sistem yöneticileri ve geliştiriciler tarafından, sistemlerin işleyişini anlamak, hataları tespit etmek ve

Devamı »
Vcenter Üzerinden ESXI Upgrade’i Nasıl Yapılır?

Öncelikle herkese merhaba arkadaşlar, sizlere Vcenter üzerinde ESXI hostunuzu nasıl upgrade edeceğinizi anlatacağım. Öncelikle hangi versiyona yükselteceksek o versiyonun ISO dosyasını indiriyoruz. Ardından Vcenter’ımızı açıyoruz.

Devamı »