Η αρχιτεκτονική του navigation και τα Navigation Throttles

Στο επίκεντρο αυτής της έρευνας βρίσκεται η ανάλυση της ροής πλοήγησης (navigation flow) στο Chromium και ειδικότερα στα Navigation Throttles που εκτελούνται στο Browser Process. Ενώ ερευνούσε το enterprise χαρακτηριστικό Entra ID του Microsoft Edge, ο ερευνητής εντόπισε το throttle EdgeCAGuidanceNavigationThrottle, το οποίο διαχειρίζεται την καθοδήγηση χρηστών σε διαφορετικά User Profiles. Όταν το throttle ικανοποιεί τις συνθήκες, καλεί το εσωτερικό Navigation API του Chromium για να ξεκινήσει μια νέα πλοήγηση.

Δημιουργία του Sourceless Navigation UXSS Primitive

Η κρίσιμη παρατήρηση αφορά το πώς ο Chromium χειρίζεται τις κλήσεις της συνάρτησης Navigate() όταν δεν καθορίζεται ρητά το source_contents. Εάν η παράμετρος είναι NULL, ο browser χρησιμοποιεί αυτόματα την ενεργή καρτέλα (active tab) ως πηγή του Renderer. Με την κατάλληλη χρονική καθυστέρηση και αλλαγή καρτέλας, αυτό επιτρέπει την εκτέλεση Universal XSS (UXSS) σε οποιοδήποτε origin, παρακάμπτοντας πλήρως τους περιορισμούς Content Security Policy (CSP).

Παράκαμψη περιορισμών και αλυσίδα προϋποθέσεων

Η ενεργοποίηση του παραπάνω μηχανισμού απαιτούσε την υπέρβαση συγκεκριμένων εμποδίων:

  • Παράκαμψη του ελέγχου αξιόπιστου origin με χρήση window.open(...) από διαφορετικό παράθυρο.
  • Αξιοποίηση μιας σκληrokωδικοποιημένης λίστας επιτρεπόμενων διευθύνσεων (whitelisted URL) για την παράκαμψη του Popup Blocker.
  • Χρήση της δυνατότητας OneAuth για αυτόματη σύνδεση σε λογαριασμό MSA κατά την επίσκεψη σε ιστοσελίδες της Microsoft.
  • Εκμετάλλευση εσφαλμένης ρύθμισης CORS (CORS misconfiguration) στο assets.msn.com για την υποκλοπή του email του συνδεδεμένου χρήστη.

Sandbox escape μέσω Immersive Reader και File Write

Επειδή τα τυπικά privileged WebUIs (όπως τα edge:// ή chrome-untrusted://) απαγορεύουν την εκτέλεση JavaScript URLs μέσω της λίστας not_allowing_javascript_urls_schemes, ο ερευνητής στράφηκε στο custom πρόθεμα read:// του Immersive Reader, το οποίο δεν είχε συμπεριληφθεί στους περιορισμούς.

Μέσω αυτού του περιβάλλοντος, η συνάρτηση chrome.edgeFeedbackPrivate.zipDiagnosticLogFiles() επέτρεψε την εγγραφή αρχείων με χρήση NULL bytes στο filesystem. Με την αντικατάσταση του αρχείου protocols.json στο φάκελο AutoLaunchProtocolsComponent και την εξαναγκασμένη επανεκκίνηση του browser (edge://restart), ενεργοποιήθηκε ο handler του πρωτοκόλλου telnet://, οδηγώντας τελικά σε εκτέλεση κώδικα (ACE) μέσω DLL/binary side-loading.