Mass Assignment
Zwei zusätzliche JSON-Schlüssel – und den Punktestand bestimmen Sie selbst.
Was ist Mass Assignment?
Eine API kopiert jedes Feld aus dem Request-Body in ein internes Objekt, ohne zu prüfen, welche Felder der Client setzen darf. Das Token ist unverfälscht, und der Datensatz gehört dem Aufrufer. Es fehlt eine Kontrolle auf Feldebene. Sie senden erst eine normale Profiländerung, dann dieselbe Anfrage mit zwei zusätzlichen JSON-Schlüsseln – und der Server übernimmt beide. Die Lösung liest nur die Felder, die eine Profiländerung tatsächlich ändern darf. Eine Eigentümerprüfung oder eine Rollenprüfung schließt diese Lücke auf Feldebene nicht.
Was Sie lernen in Mass Assignment
- Mass Assignment erkennen: Eine API bindet jedes Feld aus dem Body der Client-Anfrage an ein gespeichertes Objekt — ein Client kann damit Felder setzen, die er nie kontrollieren sollte, indem er sie der Anfrage hinzufügt
- Es von der fehlerhaften Autorisierung auf Objektebene (ein fremdes Objekt erreichen) und von einer Rechteausweitung durch Token-Fälschung (Manipulation der eigenen Zugangsdaten) unterscheiden; hier ist das Token ehrlich und das Objekt korrekterweise das des Aufrufers, und es fehlt die Kontrolle auf Feldebene
- Nachvollziehen, wie aus einer legitimen Profiländerung Betrug wird, sobald der Handler vom Client gelieferte Felder schreibt, die nur ein interner Prozess setzen sollte – etwa den Punktestand oder die Stufe eines Mitglieds
- Den Fix anwenden: das blinde Binden des kompletten Bodys durch eine ausdrückliche Allowlist der Felder ersetzen, die eine Operation schreiben darf — und jeden anderen Schlüssel ignorieren
- Verstehen, warum eine Allowlist besser ist als eine Denylist und warum der gepatchte Endpunkt mit 200 durchgeht und dabei die nicht beschreibbaren Felder verwirft — und jeden Handler zum Anlegen und Ändern auf dasselbe blinde Binden prüfen
Mass Assignment — Trainingsschritte
-
Ein ganz normales Mitglied
Perklane ist eine Prämien-App für den Einzelhandel: Mitglieder sammeln Punkte für ihre Einkäufe und lösen sie in der App gegen Geschenkkarten ein. Bob hat sich mit einer Wegwerf-Identität als ganz normales Mitglied registriert, um auszuloten, wie weit ein gewöhnliches Konto kommt. Sein Konto ist nichts Besonderes: ein einfacher Mitglieds-Zugang mit einem Token, das sein eigenes Profil lesen und ändern darf. Er öffnet die Entwicklerkonsole, um zu sehen, was ihm die Konto-API liefert.
-
Ein Objekt, zwei Arten von Feldern
Bobs Profilkarte zeigt die Felder, die er ändern darf, und direkt daneben die Werte, die die App über ihn führt. Die API-Referenz zeigt, wie die App dieses Profil liest und speichert.
-
Das eigene Profil lesen
Zuerst ruft Bob den Endpunkt genau so auf, wie er gedacht ist: Er fragt bei der API sein eigenes Profil ab und schickt dabei sein eigenes Mitglieds-Token im Authorization-Header mit — exakt so, wie es auch die App tut.
-
Sein Profil, jedes Feld
Der Server liefert genau das, was er soll: Bobs eigenes Profil — er hat schließlich mit seinem eigenen Token seinen eigenen Datensatz angefragt. Daran ist nichts falsch. Der Zuschnitt dieses Datensatzes lohnt allerdings einen genaueren Blick.
-
Eine ganz normale Änderung vornehmen
Bob nutzt die Funktion zunächst so, wie sie gedacht ist: eine schlichte Profiländerung. Er stellt die Anfrage auf die Speichermethode um und schickt einen neuen Anzeigenamen und einen neuen Avatar — genau die beiden Felder, die das Profilformular tatsächlich anbietet.
-
Die Änderung greift
Das Speichern hat funktioniert. Anzeigename und Avatar sind geändert, alles andere ist unverändert geblieben.
-
Die Änderung im Profil sehen
Bevor er weitergeht, macht Bob das, was jedes Mitglied nach dem Speichern tun würde: Er lädt seine Kontoseite neu. Die Seite liest genau das zurück, was das Speichern in seinen Datensatz geschrieben hat.
-
Die Felder ergänzen, die das Formular nie zeigt
Gleiche Anfrage, gleiches Token, gleicher Endpunkt. Bob lässt Anzeigenamen und Avatar im Body stehen und ergänzt zwei weitere Schlüssel — exakt die Feldnamen, die ihm der Leseaufruf geliefert hat: den Punktestand und die Stufe. Wenn das Speichern alles einarbeitet, was ankommt, schreibt es auch diese beiden.
-
Der Punktestand, den er nie verdient hat
Alles davon ist durchgegangen. In Bobs eigenem Profil stehen jetzt eine halbe Million Punkte und die Stufe Platinum — gesetzt durch nichts weiter als zwei zusätzliche Schlüssel in einer Profiländerung.
-
Das Ergebnis im Profil sehen
Die API hat mit 200 geantwortet, doch Bob will es so sehen, wie es jedes Mitglied sehen würde. Er lädt seine eigene Konto-Konsole neu: Die Seite liest genau das zurück, was das Speichern in seinen Datensatz geschrieben hat.
Abdeckung der Sicherheits-Frameworks
OWASP API Top 10
- API6:2019 Mass Assignment
CWE
- CWE-915 Improperly Controlled Modification of Dynamically-Determined Object Attributes
CIS Controls
- CIS 16 Application Software Security
NIST CSF
- PR.AT-02 Individuals in specialized roles are provided with awareness and training so that they possess the knowledge and skills to perform relevant tasks with cybersecurity risks in mind
- PR.PS Platform Security