Kunde B ändert den Abschlag von Kunde A. Sitzung gültig, Token gültig, Antwort 200 OK. Nichts an dieser einen Anfrage ist technisch falsch. Falsch ist nur, dass der Vertrag Kunde A gehört.
Diese Fehlerklasse heißt in der OWASP API Security Top 10 (2023) Broken Object Level Authorization, kurz API1, und sie ist in Kundenportalen, Ladepunkt-Backends und Einspeise-APIs von Versorgern die Schwachstelle mit der direktesten Folge: Sie berührt Abrechnung, Kundendaten und Netzentgelte. Sichtbar wird sie erst, wenn man zwei Identitäten gegeneinander führt. Dieser Beitrag zeigt fünf typische Angriffsketten, für jede den konkreten Testfall und die Korrektur, und was Sie diese Woche selbst tun können.
Der Beweis ist ein Paar
Ein einzelnes 200 OK beweist nichts. Die Anwendung könnte die Änderung stillschweigend verworfen haben. Belegt ist eine Schwachstelle erst durch drei Anfragen: die Referenz, den Übergriff und die Gegenprobe mit der richtigen Identität.
# 1 Referenz: A liest den eigenen Abschlag
GET /vertraege/V-100234/abschlag
Bearer <Token A>
→ 200 {"betrag": 89.00}
# 2 Übergriff: B ändert den Abschlag von A
PATCH /vertraege/V-100234/abschlag
Bearer <Token B> {"betrag": 1.00}
→ 200 {"betrag": 1.00} erwartet: 403
# 3 Gegenprobe: A liest erneut
GET /vertraege/V-100234/abschlag
Bearer <Token A>
→ 200 {"betrag": 1.00} von B geändert
Pfade und Werte sind beispielhaft. Entscheidend ist Schritt 3: Erst die Gegenprobe zeigt, dass B den Zustand von A wirklich verändert hat. Dieselben drei Anfragen sind später der Retest. Wenn die Korrektur greift, endet Schritt 2 mit 403 oder 404 und Schritt 3 zeigt wieder 89,00.
Die Vertragsnummer V-100234 muss B dafür nicht erraten. Sie steht auf jeder Rechnung, jedem Abschlagsplan und oft im Betreff einer E-Mail. Eine Kennung, die auf Papier steht, ist öffentlich. Sicherheit darf nie davon abhängen, dass sie geheim bleibt.
Was der Test von Ihnen braucht
Den Paartest kann nur führen, wer mehrere Identitäten mit eigenen Objekten hat. Das ist der einzige Teil, den der Versorger vorbereiten muss, und er wird einmal eingerichtet und dann für jeden Lauf genutzt.
| Rolle | Identitäten | Eigene Testobjekte |
|---|---|---|
| Kunde | A und B | je ein Testvertrag mit Testzähler |
| Installateur | zwei Betriebe | je eine angemeldete Testanlage |
| Mitarbeiter | ein Konto | Zugriff auf beide Testkunden |
| Partner-API | zwei Mandanten | je ein API-Schlüssel mit eigenem Scope |
Schreibende Tests treffen nur diese Objekte, nie echte Kunden. Gegen diese Identitäten läuft dann die Frage, die jede der fünf Ketten trägt: Darf diese Identität dieses Objekt mit dieser Funktion berühren?
Fünf Angriffsketten mit Testfall
1. Zählerstände und Abschläge fremder Kunden
Was passiertDie API prüft nicht, ob Zähler oder Vertrag dem Aufrufer gehören, oder sie prüft es nur im Frontend. B liest den Verbrauch von A, meldet einen Zählerstand für den Zähler von A oder setzt dessen Abschlag. Oft akzeptiert derselbe Endpunkt Felder, die das Formular nie sendet. OWASP API1 und API3.
FolgeAbrechnungen auf manipulierten Werten und offengelegte Verbrauchsdaten, im Ernstfall eine Meldung nach Art. 33 DSGVO.
TestfallDas Paar von oben, für Lesen und Schreiben. Zusätzlich sendet B an den eigenen Vertrag Felder wie status, tarif oder einen rückdatierten Zählerstand und prüft, ob sie übernommen werden.
KorrekturDen Besitz in jeder Objektabfrage serverseitig prüfen, mit der Kunden-ID aus dem Token, nie aus der Anfrage. Schreibbare Felder je Endpunkt als Allowlist festlegen.
2. Kontoübernahme über die Vertragsverknüpfung
Was passiert„Vertrag verknüpfen“ verlangt als Besitznachweis nur Kundennummer und Zählernummer, beide stehen auf der Rechnung. Unterscheidet die Antwort gültige von ungültigen Kombinationen, wird der Endpunkt zum Orakel. Lässt sich danach die Kontakt-E-Mail ändern und ein Passwort-Reset auslösen, ist das Konto übernommen, mit Zugriff auf IBAN, Umzug und Kündigung. OWASP API2 und API6.
FolgeGekündigte Lieferverträge und umgeleitete Gutschriften. Der Versorger erfährt davon oft erst durch die Beschwerde des Kunden.
TestfallAn eigenen Testverträgen drei Varianten senden: beide Nummern richtig, Kundennummer richtig und Zählernummer falsch, beide falsch. Unterscheiden sich Meldung, Statuscode oder Antwortzeit, ist das Orakel belegt. Dann prüfen, ob Versuche begrenzt werden und ob E-Mail- und IBAN-Änderung eine zweite Bestätigung verlangen. Nie durch Ausprobieren gegen echte Kundennummern.
KorrekturEine einheitliche Antwort für jeden Fehlversuch, eine Begrenzung je Konto und Quelle, und kritische Änderungen nur mit Bestätigung über einen Kanal, der vor der Verknüpfung schon bestand, etwa einen Code per Brief.
3. Ladepunkt-Backends
Was passiertDas Backend nimmt WebSocket-Verbindungen von Ladepunkten nach OCPP an, die Ladepunkt-Kennung steht oft in der Verbindungsadresse und auf dem Gerät. OCPP 1.6-J kennt drei Sicherheitsprofile. Profil 1 hat weder Transportverschlüsselung noch Serverauthentisierung, Profil 3 bindet den Ladepunkt an ein Client-Zertifikat.
FolgeEin fremder Client übernimmt die Verbindung eines Ladepunkts, oder Nutzer B stoppt die Ladung von Nutzer A. Ladepunkte fallen aus, Ladevorgänge landen auf fremden Rechnungen.
TestfallIm Testmandanten mit Simulator: eine zweite Verbindung mit derselben Kennung aufbauen und prüfen, ob sie die erste verdrängt. Einen unbekannten Ladepunkt anmelden. Prüfen, welches Profil das Backend tatsächlich erzwingt, nicht welches konfiguriert sein soll. Über die App-API als B die laufende Ladung von A abfragen und stoppen.
KorrekturProfil 2 oder 3 erzwingen und die Kennung an das Credential binden. Jede Sitzungsfunktion prüft, wem die Ladung gehört.
4. Prosumer-, PV- und Direktvermarkter-APIs
Was passiertPortale für Anlagenregistrierung und Einspeisedaten haben mehrere Rollen (Betreiber, Installateur, Direktvermarkter), mehrere Mandanten und API-Schlüssel mit Scopes. Ein Fehler in der Mandantentrennung legt fremde Anlagendaten offen oder öffnet vergütungsrelevante Felder wie Leistung und Inbetriebnahmedatum. OWASP API1, API3 und API5.
FolgeFalsche Vergütungszahlungen, die sich nur mühsam zurückfordern lassen, und Anlagendaten, die für Betreiber und Direktvermarkter Geschäftsgeheimnisse sind.
TestfallMit dem Schlüssel von Mandant 2 die Anlage von Mandant 1 lesen. Als Installateur die Leistung einer Anlage ändern, deren Zuordnung dem Betreiber vorbehalten ist. Einen Lese-Schlüssel gegen einen schreibenden Endpunkt senden.
KorrekturDen Mandanten aus dem Credential ableiten, nie aus einem Parameter. Feldrechte je Rolle serverseitig festlegen und Scopes an jedem Endpunkt prüfen.
5. Steuerbare Verbrauchseinrichtungen nach § 14a EnWG
Was passiertWer eine Wärmepumpe, einen privaten Ladepunkt oder einen Speicher als steuerbare Verbrauchseinrichtung anmeldet, erhält reduzierte Netzentgelte (Festlegung BK8-22/010-A der Bundesnetzagentur). Lässt das Installateurs- oder Kundenportal ein nicht existierendes oder mehrfach angemeldetes Gerät zu, gibt es den Vorteil ohne Anspruch. Kann ein Installateur fremde Geräte abmelden oder erreicht eine Portalidentität Steuerfunktionen, wird es ernster.
FolgeEntgangene Netzentgelte und eine Netzplanung mit steuerbarer Last, die es nicht gibt.
TestfallDasselbe Testgerät zweimal anmelden, an zwei Marktlokationen. Als Installateur 2 das Gerät von Installateur 1 abmelden. Prüfen, welche Funktionen eine Portalidentität im Steuerpfad erreicht. Nur am Berechtigungsmodell und an Testkomponenten, nie mit Steuerbefehlen im Produktivnetz.
KorrekturGeräte gegen Marktlokation und Installateursbindung prüfen, Dubletten serverseitig abweisen, Steuerfunktionen von Portalrollen strikt trennen.
Wann testen: nach jedem Release, das Rollen oder Objekte ändert
Alle fünf Ketten entstehen mit einer Änderung: ein neues Feld, ein neuer Endpunkt, eine neue Rolle. Beim jährlichen Pentest bleibt eine solche Lücke im Mittel sechs Monate offen und ausnutzbar. Mit einem Test nach jedem Release sind es Tage plus die eigene Behebungszeit.
So sieht das in der Praxis aus. Das Kundenportal bekommt am Dienstag die Funktion „Abschlag ändern“. Am Mittwoch liegt der Befund vor, mit genau dem Anfragepaar von oben. Die Entwicklung ergänzt die Besitzprüfung, am Donnerstag wiederholt der Retest dieselben drei Anfragen, Schritt 2 endet mit 403, die Korrektur geht in Betrieb.
Was Sie diese Woche tun können
- Eine Anwendung wählen. Die, die am häufigsten geändert wird und deren Fehler Geld berühren: meist das Kundenportal oder seine API.
- Zwei Testkunden anlegen. Je ein Testvertrag mit Testzähler, dazu ein Mitarbeiterkonto. Das ist die Grundlage für jeden Paartest, manuell wie autonom.
- Kennungen inventarisieren. Welche Kunden-, Vertrags-, Zähler- und Ladepunktnummern stehen auf Rechnung, Typenschild oder QR-Code? Diese Liste behandeln Sie als öffentlich.
- Den Paartest einmal selbst führen. In der Testumgebung, mit den beiden Testkunden: einen Endpunkt mit Objektkennung im Pfad nehmen, die Anfrage als A in den Entwicklerwerkzeugen des Browsers kopieren und mit dem Token von B wiederholen. Gegenprobe als A. Das dauert eine Viertelstunde und zeigt, wo Ihr Portal steht.
- Eine Frage in den Release-Prozess schreiben. „Ändert dieses Release Rollen, Objekte oder Zustandsübergänge?“ Bei Ja wird getestet, bevor die Lücke Monate alt wird.
- Den Retest zum Abnahmekriterium machen. Eine Korrektur gilt erst als geschlossen, wenn dieselbe belegte Anfrage abgewiesen wird.
Kurz gesagt
Jede einzelne Anfrage ist gültig. Der Fehler zeigt sich erst im Vergleich zweier Identitäten. Testen Sie deshalb in Paaren, belegen Sie jeden Befund mit der Gegenprobe, und testen Sie nach jedem Release, das Rollen oder Objekte ändert.
SQUR führt diese Paartests autonom: Der Agent erkundet Funktionen und Objektbeziehungen, führt jede gefundene Funktion mit fremden Identitäten erneut aus und liefert jede bestätigte Schwachstelle mit dem Anfragepaar, das sie belegt, in 24 Stunden.
Der Fachbeitrag für Energieversorger
Wie Sie daraus einen Takt für ein ganzes Portfolio ableiten, was Sie von einem Anbieter Autonomer Pentests verlangen sollten und wie der Nachweis gegenüber Aufsicht und Geschäftsleitung aussieht, steht im Fachbeitrag „Autonome Pentests für Energieversorger: Sicherheit im Takt Ihrer Releases“, mit Checkliste und Rechenblatt für das Expositionsfenster.