Ein Sicherheitsforscher entdeckte eine Remote-Code-Execution-Lücke auf den Entwickler-Dokumentationsseiten von Google. Beim Kartieren des OAuth-Ablaufs, der über diese Seiten hinweg geteilt wird, bemerkte der Forscher, dass der Endpunkt /oauth2authorize ein ungewöhnlich großes Flask-Session-Cookie setzte, etwa 1.200 Byte, weit mehr, als ein CSRF-Token und eine Rücksprung-URL benötigen. Flask-Session-Cookies sind signiert, aber nicht verschlüsselt, sodass ihr Inhalt von jedem gelesen werden konnte, der ein solches Cookie besaß.
Das Dekodieren des Cookies offenbarte ein pickle-serialisiertes Objekt, das Googles OAuth-client_id und client_secret im Klartext enthielt. Der Forscher stellte fest, dass das client secret zugleich als Flask-SECRET_KEY diente, das heißt, derselbe Wert hielt die Signatur und prüfte sie. Da der Signaturschlüssel im Cookie selbst offenlag, konnte der Forscher gültige Signaturen offline neu berechnen und beliebige Sitzungsdaten fälschen.
Der Callback-Endpunkt liest die OAuth-Ablaufdaten aus der Sitzung und übergibt sie an pickle.loads. Mit einer gefälschten Sitzung hätte ein Angreifer eine bösartige pickle-Nutzlast einschleusen können, was dies zu einem nicht authentifizierten Pfad für Remote Code Execution machte. Der Forscher verifizierte das Problem sicher mit einer Nutzlast, die lediglich time.sleep auslöste, und vermied so jegliche Befehle auf Googles Produktionssystemen.
Der Fund zeigt, wie die Speicherung von Geheimnissen in clientseitigen Sitzungsdaten und die Deserialisierung nicht vertrauenswürdiger pickle-Daten sich zu einer kritischen Schwachstelle verstärken können. Der Fehler brachte eine Prämie von 90.000 $ ein.
Quelle: Hacker News · Zusammengefasst von HeadlinesBriefing