Πώς χάραξα το ίδιο το σύστημα παρακολούθησης σφαλμάτων της Google για 15.600 $ σε bounties

Εύκολα σφάλματα για μετρητά

Έχετε ακούσει ποτέ για το Google Issue Tracker; Πιθανώς όχι, εκτός εάν είστε υπάλληλος της Google ή προγραμματιστής που ανέφερε πρόσφατα σφάλματα στα εργαλεία Google. Και ούτε το είχα, έως ότου παρατήρησα ότι οι αναφορές ευπάθειας μου αντιμετωπίζονταν τώρα ανοίγοντας ένα νέο νήμα εκεί, εκτός από τις συνήθεις ειδοποιήσεις μέσω email.

Άρχισα αμέσως να προσπαθώ να το σπάσω.

Λοιπόν, τι ακριβώς είναι αυτός ο ιστότοπος; Σύμφωνα με την τεκμηρίωση, το Issue Tracker (που ονομάζεται εσωτερικά Buganizer System) είναι ένα εργαλείο που χρησιμοποιείται εσωτερικά στην Google για την παρακολούθηση σφαλμάτων και αιτημάτων λειτουργιών κατά την ανάπτυξη προϊόντων. Είναι διαθέσιμο εκτός Google για χρήση από εξωτερικούς δημόσιους και συνεργαζόμενους χρήστες που πρέπει να συνεργαστούν με ομάδες της Google σε συγκεκριμένα έργα.

Με άλλα λόγια, όταν κάποιος έχει πρόβλημα με ένα προϊόν Google, πηγαίνει στο πρόγραμμα παρακολούθησης προβλημάτων . Έχει νόημα, σωστά; Εμείς, ως εξωτερικοί χρήστες, βλέπουμε μόνο την κορυφή του παγόβουνου: Ένα μικρό σύνολο προ-εγκεκριμένων κατηγοριών και ζητήματα όπου κάποιος στο Google πρόσθεσε ρητά έναν εξωτερικό λογαριασμό, όπως αναφορές ευπάθειας . Αλλά πόσες πληροφορίες βρίσκονται κάτω από την επιφάνεια;

Παρατηρώντας αριθμητικά αναγνωριστικά που έχουν εκχωρηθεί στα πιο πρόσφατα δημόσια νήματα, μπορούμε εύκολα να εκτιμήσουμε πόση χρήση αποκτά αυτό το εργαλείο εσωτερικά. Υπάρχουν περίπου 2000–3000 ζητήματα ανά ώρα που ανοίγονται κατά τη διάρκεια των ωρών εργασίας στο Mountain View και μόνο το 0,1% είναι δημόσια. Φαίνεται ότι μια διαρροή δεδομένων σε αυτό το σύστημα θα είχε πολύ μεγάλο αντίκτυπο. Ας το σπάσουμε!

Προσπάθεια # 1: Λήψη λογαριασμού υπαλλήλου Google

Ένα από τα πρώτα πράγματα που παρατήρησα κατά την ανακάλυψη του εντοπισμού προβλημάτων ήταν η δυνατότητα συμμετοχής σε συζητήσεις στέλνοντας email σε μια ειδική διεύθυνση, η οποία μοιάζει με αυτό:

buganizer-system + componentID + issueID @ google.com

(στο οποίο το στοιχείοID είναι ένας αριθμός που αντιπροσωπεύει μια κατηγορία και το issueID είναι ένα μοναδικό αναγνωριστικό για το νήμα στο οποίο απαντάτε)

Αυτό μου θύμισε ένα πρόσφατο εύρημα που ονομάζεται Ticket Trick, το οποίο επέτρεψε στους χάκερ να διεισδύσουν στα συστήματα συνομιλίας των οργανώσεων, αξιοποιώντας αυτό το είδος συστήματος ηλεκτρονικού ταχυδρομείου. Λαμβάνοντας υπόψη ότι πρόκειται για διεύθυνση ηλεκτρονικού ταχυδρομείου @ google.com , προσπάθησα να εγγραφώ στην ομάδα Slack της Google χρησιμοποιώντας τη και η σελίδα επιβεβαίωσης που έδειξα πολύ ελπιδοφόρα:

Δυστυχώς, κανένα email από το Slack δεν εμφανίστηκε ποτέ.

Το επόμενο καλύτερο πράγμα που θα μπορούσα να σκεφτώ ήταν να αποκτήσω έναν λογαριασμό Google με μια κύρια διεύθυνση ηλεκτρονικού ταχυδρομείου @ google.com , ο οποίος ελπίζω να μου δώσει κάποια επιπλέον προνόμια στο Buganizer. Δεν έπρεπε να επιτρέπεται η εγγραφή ενός τέτοιου λογαριασμού εκτός της Google:

Ωστόσο, βρήκα μια μέθοδο για να παρακάμψω αυτό το φίλτρο: Εάν εγγραφώ με οποιαδήποτε άλλη ψεύτικη διεύθυνση ηλεκτρονικού ταχυδρομείου, αλλά δεν κατάφερα να επιβεβαιώσω τον λογαριασμό κάνοντας κλικ σε έναν σύνδεσμο που ελήφθη μέσω email, μου επιτρέπεται να αλλάξω τη διεύθυνση ηλεκτρονικού ταχυδρομείου μου χωρίς περιορισμούς. Χρησιμοποιώντας αυτήν τη μέθοδο, άλλαξα το email ενός νέου λογαριασμού Google σε [email protected].

Λίγο αργότερα, έλαβα το μήνυμα επιβεβαίωσης ως μήνυμα στην αντίστοιχη σελίδα έκδοσης:

Ομορφη! Έκανα κλικ στο σύνδεσμο επιβεβαίωσης, συνδεθήκαμε στο Issue Tracker και…

Έκανα ανακατεύθυνση στη σελίδα εταιρικής σύνδεσης. Και όχι, τα διαπιστευτήρια του λογαριασμού μου Google δεν λειτούργησαν εκεί. Φαλακρό.

Παρ 'όλα αυτά, αυτός ο λογαριασμός μου έδωσε πολλά επιπλέον οφέλη σε άλλα μέρη στο Διαδίκτυο, συμπεριλαμβανομένης της δυνατότητας να κάνω μια βόλτα (δωρεάν, ίσως;), οπότε εξακολουθούσε να είναι ένα πρόβλημα ασφάλειας που άνοιξε πολλές πόρτες για κακόβουλους χρήστες.

Αποδεκτό: 11 ώρες | Bounty: 3.133,7 $ | Προτεραιότητα: P1

Προσπάθεια # 2: Ενημέρωση σχετικά με εσωτερικά εισιτήρια

Μια άλλη δυνατότητα εντοπισμού ζητημάτων που τράβηξε τα μάτια μου ενώ εξοικειώθηκα με το περιβάλλον χρήστη είναι η δυνατότητα αστέρι αντικειμένων. Η εμφάνιση ενός προβλήματος σημαίνει ότι ενδιαφέρεστε για το πρόβλημα που συζητάτε και θέλετε να λαμβάνετε ειδοποιήσεις μέσω ηλεκτρονικού ταχυδρομείου κάθε φορά που κάποιος προσθέτει ένα σχόλιο.

Το ενδιαφέρον πράγμα που παρατήρησα σχετικά με αυτήν τη λειτουργικότητα ήταν η ξεχωριστή έλλειψη σφαλμάτων όταν προσπαθούσα να τη χρησιμοποιήσω σε θέματα που δεν έχω πρόσβαση. Οι κανόνες ελέγχου πρόσβασης δεν φαινόταν ποτέ να εφαρμόζονται σε αυτό το τελικό σημείο, επομένως συνδέθηκα στον δεύτερο λογαριασμό μου και προσπάθησα να προσθέσω αστέρι σε μια αναφορά ευπάθειας από τον κύριο λογαριασμό μου αντικαθιστώντας το Αναγνωριστικό ζητήματος στο αίτημα. Στη συνέχεια, είδα αυτό το μήνυμα, που σημαίνει ότι η δράση ήταν επιτυχής:

1 άτομο έχει αστέρι με αυτό το ζήτημα.

Θα μπορούσε να είναι τόσο εύκολο να κατασκοπεύσετε ανοιχτές ευπάθειες Google; Γρήγορα δημοσίευσα ένα σχόλιο για το ζήτημα για να δω αν ο λογαριασμός μου με τον φανταστικό εισβολέα θα ειδοποιηθεί για αυτό.

Αλλά πάλι, κανένα email δεν εμφανίστηκε ποτέ.

Για κάποιο λόγο που πραγματικά δεν θυμάμαι, αποφάσισα να κάνω κάποιες περαιτέρω δοκιμές σε αυτό. Έλαβα λοιπόν ένα πρόσφατο αναγνωριστικό έκδοσης και παρέκτεινα μια σειρά από μερικές χιλιάδες αναγνωριστικά που θα συμπέσουν με τα πιο πρόσφατα ζητήματα στη βάση δεδομένων. Στη συνέχεια τα αστέρι όλα.

Σε λίγα λεπτά, τα εισερχόμενά μου μοιάζουν με αυτό:

Η πρώτη μου σκέψη κατά το άνοιγμα των εισερχομένων ήταν «Τζάκποτ!».

Ωστόσο, μετά από στενότερη επιθεώρηση, δεν υπήρχε τίποτα ιδιαίτερα ενδιαφέρον σε αυτά τα θέματα. Προφανώς, μπορούσα να παρακολουθήσω μόνο συνομιλίες που σχετίζονται με τη μετάφραση, όπου οι άνθρωποι θα συζητούσαν τους καλύτερους τρόπους για να μεταφέρουν το νόημα μιας φράσης σε διαφορετικές γλώσσες.

Σκέφτηκα ακόμη και να μην το αναφέρω για μερικές ώρες, ελπίζοντας ότι θα βρω έναν τρόπο να κλιμακώσω τη σοβαρότητα. Στο τέλος, συνειδητοποίησα ότι η ομάδα ασφαλείας της Google πιθανότατα θα ενδιαφερόταν να βρει πιθανές περιστρεφόμενες μεθόδους και παραλλαγές, γι 'αυτό έστειλα τις λεπτομέρειες.

Αποδεκτό: 5 ώρες | Bounty: 5.000 $ | Προτεραιότητα: P0

Προσπάθεια # 3: Το παιχνίδι τελείωσε

Όταν επισκέπτεστε το Issue Tracker ως εξωτερικό χρήστη, το μεγαλύτερο μέρος της λειτουργικότητάς του αφαιρείται, αφήνοντάς σας εξαιρετικά περιορισμένα δικαιώματα. Εάν θέλετε να δείτε όλα τα ωραία πράγματα που μπορούν να κάνουν οι υπάλληλοι της Google, μπορείτε να αναζητήσετε τελικά σημεία API στα αρχεία JavaScript. Ορισμένες από αυτές τις λειτουργίες είναι απενεργοποιημένες εντελώς, άλλες απλώς κρύβονται στη διεπαφή.

Κατά το σχεδιασμό αυτής της περιορισμένης έκδοσης του συστήματος, κάποιος ήταν αρκετά καλός για να αφήσει μια μέθοδο για να καταργήσουμε τον εαυτό μας από τη λίστα των CC, σε περίπτωση που χάσουμε το ενδιαφέρον μας για ένα ζήτημα ή δεν θέλουμε να λαμβάνουμε πλέον email για αυτό. Αυτό θα μπορούσε να επιτευχθεί στέλνοντας ένα αίτημα POST ως εξής:

POST /action/issues/bulk_edit HTTP/1.1
{ "issueIds":[ 67111111, 67111112 ], "actions":[ { "fieldName":"ccs", "value":"[email protected]", "actionType":"REMOVE" } ]}

Ωστόσο, παρατήρησα κάποια παραβίαση εδώ που οδήγησαν σε ένα τεράστιο πρόβλημα:

  1. Ακατάλληλος έλεγχος πρόσβασης: Δεν υπήρχε ρητός έλεγχος ότι ο τρέχων χρήστης είχε πραγματικά πρόσβαση στα ζητήματα που καθορίστηκαν issueIdsπριν επιχειρήσει να εκτελέσει τη συγκεκριμένη ενέργεια.
  2. Σιωπηλή αποτυχία : Εάν δώσατε μια διεύθυνση ηλεκτρονικού ταχυδρομείου που δεν ήταν επί του παρόντος στη λίστα CC, το τελικό σημείο θα επιστρέψει ένα μήνυμα που θα δηλώνει ότι το email είχε αφαιρεθεί με επιτυχία.
  3. Πλήρεις λεπτομέρειες ζητήματος ως απάντηση: Εάν δεν εμφανίστηκαν σφάλματα κατά τη διάρκεια της ενέργειας, ένα άλλο μέρος του συστήματος υπέθεσε ότι ο χρήστης είχε τα κατάλληλα δικαιώματα. Έτσι, κάθε λεπτομέρεια σχετικά με το δεδομένο αναγνωριστικό προβλήματος θα επιστρέφεται στο σώμα απόκρισης HTTP.

Τώρα μπορούσα να δω λεπτομέρειες για κάθε ζήτημα στη βάση δεδομένων αντικαθιστώντας issueIdsτο παραπάνω αίτημα. Λοταρία!

Προσπάθησα να δω μόνο μερικά διαδοχικά αναγνωριστικά και μετά επιτέθηκα σε έναν άσχετο λογαριασμό για να επιβεβαιώσω τη σοβαρότητα αυτού του προβλήματος.

Ναι, μπορούσα να δω λεπτομέρειες σχετικά με τις αναφορές ευπάθειας, καθώς και όλα τα άλλα που φιλοξενούνται στο Buganizer.

Ακόμα χειρότερα, θα μπορούσα να διαχωρίσω δεδομένα σχετικά με πολλά εισιτήρια σε ένα μόνο αίτημα, οπότε η παρακολούθηση όλης της εσωτερικής δραστηριότητας σε πραγματικό χρόνο πιθανώς δεν θα είχε προκαλέσει περιορισμούς τιμών.

Έστειλα αμέσως τα στοιχεία εκμετάλλευσης στην Google και η ομάδα ασφαλείας τους είχε απενεργοποιήσει το επηρεαζόμενο τελικό σημείο μία ώρα αργότερα. Εντυπωσιακός χρόνος απόκρισης!

Αποδεκτό: 1 ώρα | Bounty: 7.500 $ | Προτεραιότητα: P0

Όταν άρχισα να κυνηγώ για αυτήν τη διαρροή πληροφοριών, υποθέτω ότι θα ήταν το Holy Grail των σφαλμάτων της Google, επειδή αποκαλύπτει πληροφορίες για κάθε άλλο σφάλμα (για παράδειγμα, το HackerOne πληρώνει τουλάχιστον 10.000 $ για κάτι παρόμοιο).

Αλλά αφού το βρήκα, συνειδητοποίησα γρήγορα ότι ο αντίκτυπος θα ελαχιστοποιηθεί, επειδή όλα τα επικίνδυνα τρωτά σημεία εξουδετερώνονται εντός της ώρας.

Είμαι πολύ χαρούμενος με τα επιπλέον μετρητά και ανυπομονώ να βρω σφάλματα σε άλλα προϊόντα Google.