Iframes in XSS, CSP and SOP
Iframes στο XSS
Υπάρχουν 3 τρόποι για να υποδείξετε το περιεχόμενο μιας σελίδας που έχει ενσωματωθεί σε ένα iframe:
Μέσω του
src
που υποδεικνύει μια διεύθυνση URL (η διεύθυνση URL μπορεί να είναι διαφορετικής προέλευσης ή ίδιας προέλευσης)Μέσω του
src
που υποδεικνύει το περιεχόμενο χρησιμοποιώντας το πρωτόκολλοdata:
Μέσω του
srcdoc
που υποδεικνύει το περιεχόμενο
Πρόσβαση σε μεταβλητές γονέα και παιδί
Εάν αποκτήσετε πρόσβαση στο προηγούμενο html μέσω ενός http server (όπως python3 -m http.server
), θα παρατηρήσετε ότι όλα τα scripts θα εκτελεστούν (καθώς δεν υπάρχει καμία CSP που να το αποτρέπει)., ο γονέας δεν θα μπορεί να αποκτήσει πρόσβαση στη μεταβλητή secret
μέσα σε οποιοδήποτε iframe και μόνο τα iframes if2 & if3 (τα οποία θεωρούνται ίδιου site) μπορούν να αποκτήσουν πρόσβαση στο secret στο αρχικό παράθυρο.
Παρατηρήστε ότι το if4 θεωρείται να έχει προέλευση null
.
Iframes με CSP
Παρακαλώ, παρατηρήστε ότι στις παρακάτω παρακάμψεις η απάντηση στην ενσωματωμένη σελίδα δεν περιέχει κανέναν κεφαλίδα CSP που να αποτρέπει την εκτέλεση του JS.
Η τιμή self
του script-src
δεν θα επιτρέψει την εκτέλεση του κώδικα JS χρησιμοποιώντας το πρωτόκολλο data:
ή το χαρακτηριστικό srcdoc
.
Ωστόσο, ακόμα και η τιμή none
του CSP θα επιτρέψει την εκτέλεση των iframes που τοποθετούν ένα URL (πλήρες ή μόνο το μονοπάτι) στο χαρακτηριστικό src
.
Επομένως, είναι δυνατό να παρακάμψετε το CSP μιας σελίδας με:
Παρατηρήστε πώς η προηγούμενη CSP επιτρέπει μόνο την εκτέλεση του inline script.
Ωστόσο, μόνο τα if1
και if2
scripts θα εκτελεστούν, αλλά μόνο το if1
θα έχει πρόσβαση στον γονικό κρυφό κώδικα.
Επομένως, είναι δυνατόν να παρακάμψετε μια CSP αν μπορείτε να ανεβάσετε ένα αρχείο JS στον διακομιστή και να το φορτώσετε μέσω iframe ακόμα και με script-src 'none'
. Αυτό μπορεί πιθανώς να γίνει και με κατάχρηση ενός same-site JSONP endpoint.
Μπορείτε να δοκιμάσετε αυτό με τον παρακάτω σενάριο όπου ένα cookie κλέβεται ακόμα και με script-src 'none'
. Απλά εκτελέστε την εφαρμογή και αποκτήστε πρόσβαση μέσω του προγράμματος περιήγησής σας:
Άλλα Payloads που βρέθηκαν στον άγριο
Iframe sandbox
Το περιεχόμενο μέσα σε ένα iframe μπορεί να υπόκειται σε επιπλέον περιορισμούς μέσω της χρήσης του χαρακτηριστικού sandbox
. Από προεπιλογή, αυτό το χαρακτηριστικό δεν εφαρμόζεται, πράγμα που σημαίνει ότι δεν υπάρχουν περιορισμοί.
Όταν χρησιμοποιείται, το χαρακτηριστικό sandbox
επιβάλλει αρκετούς περιορισμούς:
Το περιεχόμενο θεωρείται ότι προέρχεται από μια μοναδική πηγή.
Οποιαδήποτε προσπάθεια υποβολής φορμών αποκλείεται.
Η εκτέλεση σεναρίων απαγορεύεται.
Η πρόσβαση σε ορισμένα APIs απενεργοποιείται.
Αποτρέπεται η αλληλεπίδραση των συνδέσμων με άλλα περιβάλλοντα περιήγησης.
Η χρήση προσθέτων μέσω των ετικετών
<embed>
,<object>
,<applet>
ή παρόμοιων δεν επιτρέπεται.Αποτρέπεται η πλοήγηση του κύριου περιβάλλοντος περιήγησης του περιεχομένου από το ίδιο το περιεχόμενο.
Αποκλείονται λειτουργίες που ενεργοποιούνται αυτόματα, όπως η αναπαραγωγή βίντεο ή η αυτόματη εστίαση των ελέγχων φόρμας.
Η τιμή του χαρακτηριστικού μπορεί να αφεθεί κενή (sandbox=""
) για να εφαρμοστούν όλοι οι προαναφερθέντες περιορισμοί. Εναλλακτικά, μπορεί να οριστεί ως μια λίστα τιμών χωρισμένων με κενό που απαλλάσσει το iframe από ορισμένους περιορισμούς.
Iframes στο SOP
Ελέγξτε τις παρακάτω σελίδες:
pageBypassing SOP with Iframes - 1pageBypassing SOP with Iframes - 2pageBlocking main page to steal postmessagepageSteal postmessage modifying iframe locationLast updated