Massenzuweisung

Massenzuweisung

Zwei zusätzliche JSON-Schlüssel, und der Rest liegt bei Ihnen.

Was ist Massenzuweisung?

Eine API kopiert jedes Feld in einem Anforderungstext in ein internes Objekt, ohne Liste der Felder, die ein Client festlegen darf. Der Token ist ehrlich und die Aufzeichnung gehört dem Anrufer. Was fehlt, ist eine Steuerung auf Feldebene. Sie senden ein normales Profilupdate, dann dasselbe Update mit zwei zusätzlichen JSON-Schlüsseln und der Server schreibt beide. Der Fix liest nur die Felder, die durch eine Profilbearbeitung geändert werden sollen. Eine Besitzüberprüfung oder ein Rollenschutz können eine Lücke auf Feldebene nicht schließen.

Was Sie lernen in Massenzuweisung

Massenzuweisung — Trainingsschritte

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. Die Änderung greift

    Das Speichern hat funktioniert. Anzeigename und Avatar sind geändert, alles andere ist unverändert geblieben.

  7. 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.

  8. 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.

  9. 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.

  10. 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