Sichere Programmierung: Das Problem der benutzerdefinierten Berechtigungen

Bei der Entwicklung für Mobilgeräte müssen Anwendungen häufig bestimmte Berechtigungen vom System anfordern. Sie benötigen möglicherweise Zugriff auf die Kontakte des Benutzers, die Bluetooth-Verbindung oder die Möglichkeit, SMS-Nachrichten zu versenden. Alle genannten Berechtigungen sind Plattformberechtigungen, die vom Android-Framework definiert werden.
Es gibt jedoch Fälle, in denen diese nicht ausreichen und die Anwendung ihre eigenen benutzerdefinierten Berechtigungen definieren muss. Ich verwende unser eigenes Unternehmen als Beispiel. Secure Code Warrior könnte eine App erstellen, die private Daten als Teil eines Profils speichert, einschließlich der Leistung des Benutzers auf der SCW-Plattform. Wir möchten einer anderen Sicherheitsschulungs-App, sagen wir DevTrainer, erlauben, diese Daten zu verwenden, wenn der Benutzer ihnen die Erlaubnis dazu erteilt. Da es sich um sensible Daten handelt, möchte der Benutzer sicherlich nicht, dass jeder darauf zugreifen kann, aber die SCWApp sollte sie auch nicht vollständig verbergen und schützen, da sie nützlich sein könnten. Wir möchten dem Benutzer also die Kontrolle darüber überlassen. Hier kommen benutzerdefinierte Berechtigungen ins Spiel.
Die SCWApp erstellt eine benutzerdefinierte Berechtigung, DevTrainer fordert diese Berechtigung an und der Benutzer kann entscheiden, ob er dies zulassen möchte oder nicht. Dies ist eine gängige Praxis und eine gute Möglichkeit, den Zugriff auf Anwendungen auf einer Whitelist zu beschränken.
Leider gibt es einige unintuitive Verhaltensweisen bei benutzerdefinierten Berechtigungen, die sie aus Sicherheitssicht riskant machen. Konkret können benutzerdefinierte Berechtigungen von jeder App jederzeit definiert werden, wobei das Prinzip „Wer zuerst kommt, mahlt zuerst“ gilt – und diese Strategie hat einige Konsequenzen.
Für das folgende Szenario definieren wir zwei App-Profile, die wir oben vorgestellt haben (alle diese Anwendungen sind fiktiv und dienen nur zu Demonstrationszwecken):
1. SCWApp: die App, die eine benutzerdefinierte Berechtigung definiert und eine Komponente mithilfe dieser Berechtigung schützt.
2. DevTrainer: diese App definiert dieselbe Berechtigung wie die SCWApp und erklärt dem Benutzer, dass sie diese Berechtigung erhalten möchte.
Dies ist ein häufiges Szenario, das als „Peer Apps Case“ bezeichnet wird. Wäre die DevTrainer-App nur ein Plugin für die SCWApp, müsste sie die benutzerdefinierte Berechtigung nicht definieren. Die Annahme ist in diesem Fall, dass die SCWApp vor DevTrainer installiert wird und kein unerwartetes Verhalten auftritt. Wenn der Benutzer DevTrainer jedoch zuerst installiert, wird er nicht über die Berechtigungsanfrage informiert. Installiert der Benutzer später die SCWApp, wird DevTrainer die Berechtigung nicht rückwirkend erteilt, sodass die Versuche der DevTrainer-App, die geschützte Komponente zu verwenden, fehlschlagen.
Hier kommt der „Peers App Case“ ins Spiel. In manchen Fällen kann man nicht davon ausgehen, dass eine App vor der anderen installiert wird. Wenn beispielsweise Facebook und Twitter beide die Komponenten des jeweils anderen nutzen möchten, müssen sie die benutzerdefinierten Berechtigungen des anderen definieren.
Hier wird es jedoch kompliziert. Wenn die DevTrainer-App zuerst installiert wird, wird der Benutzer nicht über die Anfrage für die benutzerdefinierte Berechtigung informiert. An diesem Punkt besitzt DevTrainer die benutzerdefinierte Berechtigung und kann auf die geschützte Komponente zugreifen, obwohl der Benutzer nicht informiert wurde.
Es wird noch komplizierter. Die DevTrainer-App kann die Schutzstufe der Berechtigungen ändern. Android verwendet nicht die Schutzstufe des Verteidigers, sondern die zuerst definierte Schutzstufe. Das bedeutet, dass die App, die zuerst installiert wurde, diese definieren kann. Wenn DevTrainer also die Berechtigungsstufe auf „normal“ ändert, müssen zukünftige Apps, die diese Berechtigung anfordern, nicht vom Benutzer bestätigt werden, sondern erhalten automatisch Zugriff.
Dieses Szenario wurde durch die Erklärung dieses Problems auf dem cwac-security github inspiriert.
Die „Wer zuerst kommt, mahlt zuerst“-Strategie hat gefährliche Konsequenzen. Wenn man dieses Verhalten nicht kennt, trifft man als Entwickler möglicherweise Sicherheitsentscheidungen auf Basis nicht vertrauenswürdiger Eingaben und erlaubt unbeabsichtigt Apps den Zugriff auf sensible Daten oder geschützte Dienste. Um mehr darüber zu erfahren, wie man Sicherheitsentscheidungen durch nicht vertrauenswürdige Eingaben vermeidet, besuchen Sie unsere Plattform. Dieses Verhalten wurde ab Android 5.0 (Lollipop) geändert. Da jedoch derzeit mehr als 22 % der Android-Geräte noch mit einer älteren Android-Version laufen, ist es wichtig, die Risiken des ursprünglichen Verhaltens in Ihrer App zu mindern. Prüfen Sie beim ersten Start Ihrer App, ob die Berechtigung bereits definiert wurde, und ergreifen Sie entsprechende Maßnahmen, um Sicherheitsrisiken zu beheben.
Viel Erfolg beim Programmieren und bis nächste Woche!
Durch die Definition benutzerdefinierter Berechtigungen kann eine App ihre Ressourcen und Funktionen für andere Apps freigeben.
https://developer.android.com/guide/topics/permissions/defining.html
Kontrollieren Sie KI-gestützte Entwicklung, bevor sie in Produktion geht
Bewerten Sie KI-gestützte Risiken, setzen Sie Richtlinien für sicheren Code direkt beim Commit durch und beschleunigen Sie die sichere Bereitstellung über Ihren gesamten SDLC hinweg.
Weitere Blogs entdecken
Erhalten Sie Zugang zu Experteninhalten über sichere Programmierung, KI-Governance und Software-Risikomanagement.
%252520%252520(3).avif)
Supercharged Security Awareness: How Tournaments are Inspiring Developers at Erste Group
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

Security as culture: How Blue Prism cultivates world-class secure developers
Learn how Blue Prism, the global leader in intelligent automation for the enterprise, used Secure Code Warrior's agile learning platform to create a security-first culture with their developers, achieve their business goals, and ship secure code at speed

Eine Sicherheitskultur: Wie Sage sein Champions-Programm aufgebaut hat
Erfahren Sie, wie Sage die Sicherheit durch einen flexiblen, beziehungsorientierten Ansatz gestärkt, über 200 Security Champions ausgebildet und eine messbare Risikoreduzierung erzielt hat.

Cybersecurity Awareness Month 2026: Das Verständnis von KI-Sicherheit ist entscheidend für die Unternehmensverteidigung
Wir haben einen Punkt erreicht, an dem die meisten führenden KI-Unternehmen öffentlich eine weltweite Verlangsamung der KI-Entwicklung gefordert haben, damit die Sicherheitsvorkehrungen Schritt halten können. Doch die Wahrheit ist: Ernsthafte Sicherheitsprobleme sind bereits Realität geworden. Dies bringt unzählige Sicherheitsverantwortliche und Führungsteams in eine dringliche Lage, da die finanziellen Kosten und Risiken durch die Implementierung von KI stetig steigen.

Enabler 8: Branding für Ihr Programm
Ein Programm für sicheres Programmieren braucht mehr als nur großartige Inhalte, um erfolgreich zu sein. Enabler 8 zeigt, wie Branding die Teilnahme zu einem begehrten, statusorientierten Erlebnis macht.
.avif)
Jeder Mitarbeiter steht jetzt an vorderster Front der KI-Cybersicherheit
Die Unternehmenslandschaft wandelt sich mit einer Geschwindigkeit, die kaum jemand vorhergesehen hat, bis es zu spät war. Wir haben offiziell die Schwelle von handgeschriebenem Code und einfacher Copilot-Unterstützung hin zur Ära des Agentic Development Lifecycle (ADLC) überschritten. Während autonome KI-Agenten eine beispiellose Effizienz in vielen Bereichen versprechen, bringen sie auch eine völlig neue Klasse von Sicherheits- und Regulierungsrisiken mit sich.
Sichere KI-gestützte Entwicklung vor dem Release
Erkennen Sie Entwicklerrisiken, setzen Sie Richtlinien durch und verhindern Sie Schwachstellen über den gesamten Softwareentwicklungszyklus hinweg.