Iframes in XSS, CSP and SOP
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Υπάρχουν 3 τρόποι για να υποδείξετε το περιεχόμενο μιας σελίδας που είναι ενσωματωμένη σε iframe:
Μέσω src
που υποδεικνύει μια διεύθυνση URL (η διεύθυνση URL μπορεί να είναι διασυνοριακή ή ίδια προέλευση)
Μέσω src
που υποδεικνύει το περιεχόμενο χρησιμοποιώντας το πρωτόκολλο data:
Μέσω srcdoc
που υποδεικνύει το περιεχόμενο
Accesing Parent & Child vars
Αν αποκτήσετε πρόσβαση στο προηγούμενο html μέσω ενός http server (όπως το python3 -m http.server
) θα παρατηρήσετε ότι όλα τα scripts θα εκτελούνται (καθώς δεν υπάρχει CSP που να το αποτρέπει)., ο γονέας δεν θα μπορεί να έχει πρόσβαση στη μεταβλητή secret
μέσα σε οποιοδήποτε iframe και μόνο τα iframes if2 & if3 (τα οποία θεωρούνται ότι είναι στον ίδιο ιστότοπο) μπορούν να έχουν πρόσβαση στο secret στο αρχικό παράθυρο.
Σημειώστε πώς το if4 θεωρείται ότι έχει null
προέλευση.
Παρακαλώ, σημειώστε πώς στις παρακάτω παρακάμψεις η απάντηση στη σελίδα που είναι ενσωματωμένη σε iframe δεν περιέχει κανένα CSP header που να αποτρέπει την εκτέλεση JS.
Η τιμή self
του script-src
δεν θα επιτρέψει την εκτέλεση του JS κώδικα χρησιμοποιώντας το πρωτόκολλο data:
ή το χαρακτηριστικό srcdoc
.
Ωστόσο, ακόμη και η τιμή none
του CSP θα επιτρέψει την εκτέλεση των iframes που βάζουν μια διεύθυνση URL (ολόκληρη ή απλώς τη διαδρομή) στο χαρακτηριστικό src
.
Επομένως, είναι δυνατόν να παρακαμφθεί το CSP μιας σελίδας με:
Σημειώστε ότι η προηγούμενη CSP επιτρέπει μόνο την εκτέλεση του inline script.
Ωστόσο, μόνο τα scripts if1
και if2
θα εκτελούνται αλλά μόνο το if1
θα μπορεί να έχει πρόσβαση στο γονικό μυστικό.
Επομένως, είναι δυνατόν να παρακαμφθεί μια CSP αν μπορείτε να ανεβάσετε ένα αρχείο JS στον διακομιστή και να το φορτώσετε μέσω iframe ακόμη και με script-src 'none'
. Αυτό μπορεί πιθανώς να γίνει επίσης εκμεταλλευόμενοι ένα endpoint JSONP της ίδιας τοποθεσίας.
Μπορείτε να το δοκιμάσετε με το παρακάτω σενάριο όπου ένα cookie κλέβεται ακόμη και με script-src 'none'
. Απλώς εκτελέστε την εφαρμογή και αποκτήστε πρόσβαση σε αυτήν με τον περιηγητή σας:
Το περιεχόμενο μέσα σε ένα iframe μπορεί να υποβληθεί σε επιπλέον περιορισμούς μέσω της χρήσης του χαρακτηριστικού sandbox
. Από προεπιλογή, αυτό το χαρακτηριστικό δεν εφαρμόζεται, πράγμα που σημαίνει ότι δεν υπάρχουν περιορισμοί.
Όταν χρησιμοποιείται, το χαρακτηριστικό sandbox
επιβάλλει αρκετούς περιορισμούς:
Το περιεχόμενο αντιμετωπίζεται σαν να προέρχεται από μια μοναδική πηγή.
Οποιαδήποτε προσπάθεια υποβολής φορμών αποκλείεται.
Η εκτέλεση σεναρίων απαγορεύεται.
Η πρόσβαση σε ορισμένα APIs είναι απενεργοποιημένη.
Αποτρέπει τους συνδέσμους από το να αλληλεπιδρούν με άλλα περιβάλλοντα περιήγησης.
Η χρήση plugins μέσω των <embed>
, <object>
, <applet>
ή παρόμοιων ετικετών απαγορεύεται.
Η πλοήγηση του περιεχομένου στο ανώτατο επίπεδο περιβάλλοντος περιήγησης από το ίδιο το περιεχόμενο αποτρέπεται.
Χαρακτηριστικά που ενεργοποιούνται αυτόματα, όπως η αναπαραγωγή βίντεο ή η αυτόματη εστίαση των ελέγχων φόρμας, αποκλείονται.
Η τιμή του χαρακτηριστικού μπορεί να αφεθεί κενή (sandbox=""
) για να εφαρμοστούν όλοι οι παραπάνω περιορισμοί. Εναλλακτικά, μπορεί να οριστεί σε μια λίστα συγκεκριμένων τιμών διαχωρισμένων με κενά που εξαιρούν το iframe από ορισμένους περιορισμούς.
Ελέγξτε τις παρακάτω σελίδες:
Bypassing SOP with Iframes - 1Bypassing SOP with Iframes - 2Blocking main page to steal postmessageSteal postmessage modifying iframe locationLearn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)