Salesforce Aura: Mögliche Sicherheitslücken bei der Anmerkung „Ohne Freigabe“
Seit 2010, Onapsis Research Labs konzentriert sich auf die kontinuierliche Analyse und Untersuchung von Entwicklungen bei geschäftskritischen Anwendungen, um neue Schwachstellen aufzudecken und zu identifizieren. Bis heute hat das Unternehmen über 800 Zero-Day-Schwachstellen entdeckt, und seine innovativen Forschungsergebnisse haben zu mehreren kritischen CERT-Warnungen geführt.
Bisher konzentrierte sich das Team ausschließlich auf On-Premise-Systeme von SAP und Oracle. Da geschäftskritische Unternehmensanwendungen jedoch zunehmend um cloud erweitert werden und Unternehmen für ihre Geschäftsabläufe zunehmend auf native SaaS-Anwendungen setzen, Onapsis Research Labs die Onapsis Research Labs ihre Forschungs- und Untersuchungsarbeit ausgeweitet und beziehen nun auch Schwachstellen in vielen dieser Anwendungen, wie beispielsweise Salesforce, mit ein.
Der Salesforce Winter ‘21-Patch für Aura sollte das Sicherheitsrisiko beheben, durch das jeder authentifizierte Benutzer die Möglichkeit hatte, Webdienste zu nutzen, die mit dem Dekorator @auraenabled bereitgestellt wurden. Onapsis Research Labs jedoch einige Sicherheitsbedenken hinsichtlich Aura festgestellt, auf die wir in diesem Blogbeitrag eingehen werden. Unsere Bedenken konzentrieren sich auf die Verwendung des Dekorators @auraenabled in Kombination mit der Annotation „without sharing“. Um die Salesforce-Dokumentation zu dieser Annotation zu zitieren: „Verwenden Sie die Schlüsselwörter ‚without sharing‘ bei der Deklaration einer Klasse, um sicherzustellen, dass die Freigaberegeln für den aktuellen Benutzer nicht durchgesetzt werden.“
Was ist eine Aura?
Aura ist ein UI-Framework, das in Salesforce zur Entwicklung von Webanwendungen verwendet wird. Aura-Komponenten bestehen aus mehreren Dateiteilen. Ausführliche Informationen zu allen Komponenten finden Sie in der Dokumentation. Der in JavaScript geschriebene Client-Side-Controller ist das Mittel, mit dem die Aura-Komponente die Logik implementiert, die zur Verarbeitung von Ereignissen in einer Anwendung mit eingebetteter Aura-Komponente erforderlich ist. Ein Beispiel hierfür ist eine Schaltfläche „Suchen“, über die Benutzer nach Kontaktnamen suchen können.
Der clientseitige Controller empfängt die Nachricht, wenn die Suchaktion ausgeführt wird, in Form von „Ereignissen“ und sendet die Informationen an den Server. Er hat keinen direkten Zugriff auf die Daten oder die Datenbank von Salesforce, sondern läuft auf dem Client (d. h. in einem Webbrowser). Er erstellt die entsprechenden HTTP-Anfragen mit den vom Benutzer bereitgestellten Informationen und sendet sie an eine andere Ressource: den serverseitigen Controller.
Clientseitige Controller sind JavaScript-Objekte, die Aktionen in Form von JavaScript-Funktionen implementieren. Da sie Teil des clientseitigen Controllers sind, werden sie als clientseitige Aktionen bezeichnet. Sie werden von der Aura-Komponente verwendet.
Der serverseitige Controller ist nicht Teil der Aura-Komponente. Technisch gesehen handelt es sich um eine Apex-Klasse, eine Vorlage zum Erstellen von Objekten, die von externen Ressourcen genutzt werden, genau wie bei einem Webdienst. Er wird mithilfe der @auraenabled-Annotation erstellt.
Sicherheitslücke bei der Anmerkung „Ohne Freigabe“
Nachdem wir nun Aura erläutert haben, wollen wir die Sicherheitslücke skizzieren, die wir bei der Verwendung von @auraenabled in Kombination mit der Annotation „without sharing“ entdeckt haben.
Nehmen wir zum Beispiel einen angelegten Salesforce-Benutzer mit einem Profil, das keinen Zugriff auf das Standardobjekt „Kontakt“ hat. Mit anderen Worten: Dieser Benutzer sollte keinen Zugriff auf Kontakte in Salesforce haben. Das bedeutet: Wenn der Benutzer einen Namen in das Suchfeld für Kontakte eingibt und die Funktion ausführt, werden keine Kontakte angezeigt. Der serverseitige Controller verhindert, dass die Kontakte für den Benutzer sichtbar sind, da dieser nicht über die Berechtigung verfügt, Kontakte einzusehen.
Ungeachtet des Profils dieses Benutzers werden jedoch Kontakte zurückgegeben, wenn das Schlüsselwort „without sharing“ zum Server-Side Controller hinzugefügt wird und der Benutzer diese Suche durchführt. Dieses Ergebnis ist besorgniserregend, da es bedeutet, dass Kontakte – selbst wenn der Benutzer keine Zugriffsrechte auf Kontakte hat – aufgrund des vorhandenen Schlüsselworts „without sharing“ dennoch freigegeben werden. Es findet keine Berechtigungsprüfung statt, um zu überprüfen, ob der Benutzer diesen Zugriff haben sollte; die Freigabe wird einfach aktiviert.
Das Schlüsselwort „without sharing“ ist ein gefährlicher Modifikator, der mit äußerster Vorsicht verwendet werden sollte, da er jedem Benutzer den Zugriff auf Funktionen ermöglicht, unabhängig von seinen Berechtigungen. Das Hinzufügen dieses Tags zu einer beliebigen Apex-Klasse kann zu komplizierten Problemen führen; wenn jedoch eine Methode dieser Klasse mit @auraenabled versehen ist, können noch größere Sicherheitsprobleme entstehen. Aus diesem Grund hat Salesforce den „Aura-enabled“-Scanner entwickelt.
Der Aura-fähige Scanner
Der AuraEnabledScanner hilft Entwicklern und Administratoren dabei, alle Klassen innerhalb einer Organisation aufzulisten, die mindestens eine Methode enthalten, die @auraenabled verwendet. Darüber hinaus hebt er jene Klassen hervor, auf die nicht ohne Weiteres zugegriffen werden sollte, und ermöglicht über eine benutzerfreundliche Oberfläche die Konfiguration der Zugriffsberechtigungen.
Obwohl es eine Methode gibt, diese Sicherheitslücke zu beheben, ist die Konfiguration all dieser Berechtigungen – insbesondere in Produktionsumgebungen – eine anspruchsvolle Aufgabe. Ein Unternehmen kann Dutzende oder sogar Hunderte von Methoden haben, die mit @auraenabled gekennzeichnet sind. Dies führt zu einem unglaublich komplexen Prozess, bei dem festgelegt werden muss, welche Benutzer Zugriff auf welche Klassen haben sollen, und sichergestellt werden muss, dass alle Benutzer und Klassen in die Analyse einbezogen werden.
Es ist wichtig zu beachten, dass Fehlkonfigurationen und Sicherheitslücken entstehen können, wenn Administratoren unter Zeitdruck Whitelist-Konfigurationen erstellen, um ein Sicherheitsproblem zu beheben. Manchmal fehlt es Administratoren und Entwicklern an der nötigen Zeit, um die richtigen Werte korrekt einzustellen, und sie greifen daher möglicherweise auf die Standardoption zurück, alles hinzuzufügen, nur um das System zum Laufen zu bringen. Es ist von entscheidender Bedeutung, diese Korrekturmaßnahmen mit Sorgfalt durchzuführen.
Wenn Sie mehr über Onapsis und Salesforce erfahren möchten, lesen Sie unseren Blog oder sehen Sie sich unser On-Demand-Webinar zum Thema Cybersicherheit und Compliance für Salesforce an.
