CWE ID: 502
Name: Deserialization of Untrusted Data
Das Produkt deserialisiert nicht vertrauenswürdige Daten, ohne ausreichend sicherzustellen, dass die resultierenden Daten gültig sind. Dies stellt ein erhebliches security risk dar, da es potenziell zu arbitrary code execution und data corruption führen kann. Eine fehlende oder unzureichende input validation in diesem Prozess öffnet die Tür für malicious payloads und untergräbt die system integrity.
Effektivität: Unknown
Beschreibung: Nutzen Sie, sofern verfügbar, die Signing/Sealing-Funktionen der Programmiersprache, um sicherzustellen, dass deserialisierte Daten nicht verfälscht wurden. Beispielsweise könnte ein Hash-basierter Message Authentication Code (HMAC) verwendet werden, um die Integrität der Daten zu gewährleisten und Manipulationen auszuschließen. Eine Implementierung von digital signatures oder sealed objects könnte ebenfalls in Betracht gezogen werden, um die data integrity zu erhöhen und tampering zu verhindern.
Effektivität: Unknown
Beschreibung: Beim Deserialisieren von Daten sollte ein neues Objekt erzeugt und mit den deserialisierten Daten befüllt werden, anstatt direkt in ein bestehendes Objekt zu deserialisieren. Dies stellt sicher, dass die Daten einen sicheren Input Validation-Prozess durchlaufen und die verwendeten Funktionen als sicher gelten können. Dieser Ansatz minimiert das Risiko von injection attacks und erhöht die robustness der Anwendung.
Effektivität: Unknown
Beschreibung: Definieren Sie explizit ein finales object()
-Objekt, um eine Deserialisierung zu verhindern. Dies dient als zusätzliche Schutzebene und erschwert Angreifern die Ausnutzung von Deserialisierungs-Vulnerabilitäten. Die Implementierung sollte sicherstellen, dass keine weiteren Attribute oder Methoden hinzugefügt werden können, um die Integrität des Objekts zu gewährleisten.
Effektivität: Unknown
Beschreibung: Vermeiden Sie die Verfügbarkeit unnötiger Typen oder gadgets (eine Sequenz von Instanzen und Methodenaufrufe, die sich während des Deserialisierungsprozesses selbst ausführen können, häufig in Bibliotheken zu finden), die für bösartige Zwecke genutzt werden könnten. Dies begrenzt das Potenzial für unbeabsichtigte oder unautorisierte Typen und gadgets, die von einem Angreifer ausgenutzt werden können. Fügen Sie nur akzeptable Klassen zu einer allowlist hinzu. Beachten Sie: Neue gadgets werden ständig entdeckt, daher ist dies allein keine ausreichende Abschwächung.
Effektivität: Unknown
Beschreibung: Setzen Sie Kryptographie für die Daten oder den Code zum Schutz ein. Es ist jedoch wichtig zu beachten, dass dies weiterhin eine client-side security darstellt. Dies ist riskant, da, wenn der Client kompromittiert wird, die auf dem Client implementierte Sicherheit (die Kryptographie) umgangen werden kann.
Serialization und Deserialization beziehen sich auf den Prozess, bei dem programminterne, objektbezogene Daten in ein Format verpackt werden, das eine externe Speicherung oder Übertragung ermöglicht (serialization), um anschließend die serialisierten Daten zu extrahieren und das ursprüngliche Objekt zu rekonstruieren (deserialization).