FlawOpen

flawopen.com/Mass Assignment/Erklärt

Mass Assignment: Risiken und sichere Feldfreigaben

CWE-915: Improperly Controlled Modification of Dynamically-Determined Object AttributesReferenzseite
Kurzantwort

Stell dir ein Modell als Formular mit Nutzerfeldern und Bedienelementen für Mitarbeitende vor. Den gesamten Request zu binden lässt Kunden auch Eigentümer, Freigabe oder Rolle setzen. Lege editierbare Felder serverseitig fest und autorisiere Datensatz und Aktion getrennt.

VULNERABLE
# Rails: request keys reach model attributes
User.new(params[:user])

// Node / Mongoose: request object used as update
await User.findByIdAndUpdate(id, req.body);

// Express + Sequelize: request object used as create values
await User.create(req.body);

# Django: request keys passed as model fields
User.objects.create(**request.POST.dict())
FIXED
# Rails — permit only user-editable fields
attrs = params.require(:user).permit(:name, :email)
user = User.new(attrs)

// Node — construct an allowlisted update
const { name, email } = req.body;
await User.findByIdAndUpdate(id, { name, email });

# Django — explicit ModelForm fields
class UserForm(ModelForm):
    class Meta:
        model = User
        fields = ["name", "email"]

// .NET — bind a DTO, then map explicitly
user.Name = input.Name;
user.Email = input.Email;

Warum serverseitige Allowlisten wichtig sind

Eine Sperrliste wie „alles außer role“ versagt, wenn ein neues sensibles Feld hinzukommt. Bei einer Allowlist bleiben neue Felder gesperrt, bis sie ausdrücklich freigegeben werden. Rails Strong Parameters weisen nicht erlaubte Attribute bei der Massenzuweisung zurück; der Controller muss Felder dennoch auf die Aktion beschränken. DTO, Serializer oder Formular mit Feldliste schaffen dieselbe Grenze.

Eine Allowlist begrenzt Request-Attribute, berechtigt aber nicht zur Datensatzänderung. Beschränke den Datensatz auf den authentifizierten Principal, autorisiere die Aktion und trenne privilegierte Änderungen.

Kategorien sensibler Felder

Prüfe Modellattribute, verschachtelte Serializer und Update-Endpunkte auf:

Häufige Fragen

Ist das dasselbe wie Prototype Pollution?

Das sind verschiedene Schwächen. Mass Assignment setzt unerwartete Attribute auf einem erstellten oder aktualisierten Objekt. Prototype Pollution verändert Prototyp-Eigenschaften und kann die Suche anderer Objekte beeinflussen. Unsicheres Merge kann dazu führen; Mass Assignment hängt von der Nutzung der Eigenschaften ab. Siehe Prototype Pollution.

Verhindert GraphQL das Problem?

Nein. Eine Mutation kann ein zu breites Eingabeobjekt annehmen. Beschränke Eingabetypen auf editierbare Felder und prüfe Objekt und Aktion im Resolver oder Service.

Schützen serverseitige Formulare?

Nein. Das Formular beschränkt keinen HTTP-Client. Behandle Felder als nicht vertrauenswürdig, prüfe die Struktur serverseitig und akzeptiere nur Aktionsfelder.

Quellen

Siehe auch Serverless State Bleed: Benutzerdaten pro Anfrage isolieren PHP == und Magic-Hash-Vergleiche Ist Rusts unsafe-Block weiterhin speichersicher? Ist strncpy() sicherer als strcpy()? CWE vs. CVE: Was ist der Unterschied?