SSTI ve CSTI Zafiyetleri

SSTI ve CSTI Zafiyetleri

Günümüzde frameworkler üzerinde sıklıkla karşılaşılan birçok zafiyet var. Bunlardan bahsedildiğinde ilk aklımıza gelen SQLi ve XSS olsa da, modern frameworklerde sıklıkla karşılaşılan SSTI(Server-Side Template Injection) ve CSTI(Client-Side Template Injection) zafiyetlerinden bahsedeceğim. Ayrıca bu SSTI ve CSTI zafiyetleri hem kendi içlerinde açıklayıp hem de pratikte karşılaşabileceğimiz bazı örneklerine değinmek istiyorum.

Template Engine ve Template Injection Nedir?

Template Motoru, bir websitesinin yazılımını renderlayan motordur. İlerleyen zamanla websitelerinin karmaşıklaşması nedeniyle özellikler büyük ölçekli ve dinamik internet siteleri bu template motorları tarafından belirli bir şablona oturtularak kullanıcıların karşısına sunuluyor.

Template Injection ise bu template motorlarının zayıflıklarından faydalanmak, yani hazır şablonlar üzerindeki açıklar üzerinde kendi komutlarını çalıştırmaktır.


SSTI (Server-Side Template Injection) Nedir?

SSTI ve CSTI zafiyetleri hakkındaki ilk konumuz Server-Side Template Injection. Adında geçtiği gibi server tarafındaki template motorlarının kötüye kullanılmasıyla oluşan bir zafiyettir. Özellikle Jinja2, Django Template Engine gibi sistemlerde sıklıkla karşılaşılır.

Bu durumlarda kullanıcıdan gelen veride belirli templatelere rastlanır ve bu templateler sayesinde gelen istek, sunucunun kendi sistemi içerisindeki güvenlik kısıtlamalarını aşıp, istenmeyen verilerin sızdırılmasına ve sistem üzerinde zararlı işlemler gerçekleştirilmesine neden olabilir.


CSTI (Client-Side Template Injection) Nedir?

CSTI ise SSTI’ye benzer, ancak bu kez istemci tarafındaki template motorlarının kötüye kullanılmasından kaynaklanır. AngularJS, Handlebars, Vue gibi JavaScript tabanlı frameworklerde görülür.

Saldırgan, template motorunun çalıştığı yerde kendi kodlarını enjekte edebilir. Bu durum, özellikle XSS (Cross-Site Scripting) gibi ikinci aşama saldırıların da önünü açabilir.


SSTI Örneği (Flask/Jinja2):

Aşağıdaki örnek, Flask frameworkü ile Jinja2 template motoru kullanılarak yazılmış bir kod parçasıdır. Uygulama bir comment parametresi alıp bunu doğrudan şablona yerleştiriyor:

template = “Your comment is: {{ comment }}”
rendered = template.render(comment=comment_input)

Bu kod yalnızca XSS’e karşı değil, aynı zamanda SSTI’ya karşı da savunmasızdır. Örneğin, kullanıcı {{7*7}} gibi bir input gönderdiğinde, şablon motoru bu ifadeyi çalıştırıp sonucu döndürür:

$ curl -g 'http://www.target.com/page?name= {{7*7}}'

Yanıt olarak:

Your comment is: 49

şeklinde bir çıktı alırız. Bu da şablon motorunun gelen girdiyi çalıştırdığını ve potansiyel risk oluşturduğunu gösterir. Fakat bunun yerine kullanıcı daha tehlikeli bir kod çalıştırmaya kalkabilir örneğin, aşağıdaki kod /etc/passwd dosyasının içeriğine erşiyor:

{{ user.__class__.__mro__[1].__subclasses__()[407]("cat /etc/passwd", shell=True, stdout=-1).communicate() }}

Bu örnekte özetle:

  • user.__class__ ile kullanıcının sınıfına erişiyoruz.
  • __mro__ (Method Resolution Order) üzerinden object sınıfına ulaşıyoruz.
  • __subclasses__() fonksiyonuyla Python’da mevcut tüm alt sınıfları listeliyoruz.
  • Belirli bir subclass üzerinden bir komut çalıştırıyoruz (cat /etc/passwd).
  • Bu yöntemle, doğrudan sistem üzerinde terminal komutları çalıştırılabilir. Bu da basit bir XSS değil, doğrudan Remote Code Execution (RCE) anlamına gelir.

CSTI Örneği (Angular JS)

İstemci tarafındaki bir örneği ele alalım:

<h1>Hello, {{name}} </h1>

Eğer kullanıcı girişi {{7*7}} olursa, sayfa üzerinde şu şekilde bir çıktı oluşur:

Hello, 49

Ancak daha tehlikeli bir payload kullanılırsa, örneğin:

{{constructor.constructor(‘alert(1)’)()}}

bu durumda bir alert(1) pop-up’ı tetiklenir. Bu, sadece çıktıyı manipüle etmekle kalmayıp, doğrudan tarayıcı üzerinde kod çalıştırabileceğimiz anlamına gelir ve bu ciddi bir güvenlik açığıdır…


Makale: Enes Özşahiner


Kaynakçalar:

  1. HackTricks, “Client-Side Template Injection (CSTI)”.

URL: https://book.hacktricks.wiki/en/pentesting-web/client-side-template-injection-csti.html

Erişim tarihi: 28/04/2025

  • Sergey Novoselov, “SSTI & CSTI: Don’t Waste Your Time”, Medium.

URL: https://medium.com/@s_novoselov/ssti-csti-dont-waste-your-time-c6e9fbb20743

Erişim tarihi: 28/04/2025

  • OWASP Foundation, “Testing for Server-Side Template Injection”, Web Security Testing Guide v4.1.

URL: https://owasp.org/www-project-web-security-testing-guide/v41/4-Web_Application_Security_Testing/07-Input_Validation_Testing/18-Testing_for_Server_Side_Template_Injection

Erişim tarihi: 26/04/2025


Lütfen Dikkat! Sitemizi kaynak göstermeden kesinlikle alıntı yapmayınız!!!


  • RECEP SEYHAN İLE KURMACANIN HİKÂYESİ
    Söyleşen: Zeynep Satı YALÇIN -Türk Dili Ocak 2018 Öyküleriyle tanıdığımız Recep Seyhan’la yeni yayınlanan “Bana Hikâye Anlat-ma” adlı psikanalitik-ontolojik tahlil kitabı bağlamında Recep Seyhan öyküsünü ve kurmacanın…
  • RECEP SEYHAN İLE BANA HİKÂYE ANLAT-ma
    ÖYKÜ ve ÖYKÜCÜLÜĞÜMÜZ Söyleşen:  Turan İSMAİL 1- Öncelikle, Bana Hikâye Anlat-ma adlı çalışmanızla edebiyatımızın önemli bir eser kazandığını düşünüyorum. Böyle “özgün” çalışmalara çok ihtiyacımız var. Söyleşimize şu soruyla başlamak…
  • BANA HİKAYE ANLAT-ma ÇERÇEVESİNDE KENDİNE YABANCILAŞMA
    R.SEYHAN’la BANA HİKAYE ANLAT-ma ÇERÇEVESİNDE KENDİNE YABANCILAŞMA’yı Konuştuk/Senem GEZEROĞLU Söyleşen: Senem GezeroğluRecep Seyhan’la Bana Hikâye Anlat-ma’dan Hareketle  Psikanalitik-Ontolojik Edebi Metin Tahlilleri ve “Kendine Yabancılaşma”ya Dair Söyleşi 1- Öncelikle “kitabınız…
  • NASIL YAZAR OLDULAR? RECEP SEYHAN ANLATIYOR
    Sorular: Türk Edebiyatı Dergisi adına Erhan GENÇ Yazmaya nasıl başladığınızı hatırlıyor musunuz? Bir hatırası var mıdır hayatınızda?Bir vesileyle benzer soru yöneltilmişti de söylemiştim. Orada söylediklerimin benzeri olacak ama burada…
  • GÜNEŞİN DOĞDUĞU YERDE ÇERÇEVESİNDE SÖYLEŞİ
    RECEP SEYHAN İLE ÖDÜL ALAN KİTABI VEÖYKÜCÜLÜĞÜ ÜZERİNE SÖYLEŞİ – Efendim, öncelikle sizi kutlamak istiyorum; Okur Kitaplığı’ndan çıkan ikinci kitabınız “Güneşin Doğduğu Yerde” ile ESKADER’in 2013 yılı…
  • SÖYLEŞİ – Sorular: Yasin Taha Oral
    RECEP SEYHAN İLE SÖYLEŞİ Sorular: Yasın Talha ORAL Yazar olmaya ne zaman karar verdiniz? +          Hiç kimse ‘ben yazar olayım’ diye yola çıkmaz zannediyorum. Benim de yazar olmak…
  • HİKÂYECİ, YAZAR RECEP SEYHAN İLE SÖYLEŞİ
    Sorular: Aysu KOÇ – Hayatınızdan bahseder misiniz? Recep Seyhan — Amasya Taşova doğumluyum. Annem ve babamın olduğu tek odadan ibaret bir barakada doğdum. Çocukluğum mezra gibi bir…
  • RECEP SEYHAN İLE ÖYKÜYE DAİR SÖYLEŞİ
    RECEP SEYHAN ile ÖYKÜYE DAİR SÖYLEŞİ Sorular: Yusuf Alpaslan Özdemir (TEMMUZ dergisi/38) Edebiyatın toplumun ilgi alanında olduğunu sanmıyorum; dolayısıyla olmayan bir şeyin bir niteliğinden de söz edilemez.…
  • BAŞKASI
    “BAŞKASI” Emmanuel Levinas’ın “başkası” dediği biri var. “O” veya “diğeri” de denebilir. ‘Beriki’nin yok saydığı, onunla aynı ülkede bile bulunmak istemediği “başkası”… O eğer “başkası” ise onun…