• CWE-120: Buffer Copy without Checking Size of Input ('Classic Buffer Overflow')

Das Produkt kopiert einen Eingabepuffer in einen Ausgabepuffer, ohne zu überprüfen, ob die Größe des Eingabepuffers kleiner ist als die Größe des Ausgabepuffers, was zu einem buffer overflow führt.

CWE-120: Buffer Copy without Checking Size of Input ('Classic Buffer Overflow')

CWE ID: 120
Name: Buffer Copy without Checking Size of Input (‘Classic Buffer Overflow’)

Beschreibung

Das Produkt kopiert einen Eingabepuffer in einen Ausgabepuffer, ohne zu überprüfen, ob die Größe des Eingabepuffers kleiner ist als die Größe des Ausgabepuffers, was zu einem buffer overflow führt.

Erweiterte Beschreibung

Ein buffer overflow tritt auf, wenn ein Produkt versucht, mehr Daten in einen Puffer zu schreiben, als dieser fassen kann, oder wenn Daten außerhalb der Grenzen eines Puffers in einen Speicherbereich schreiben möchte. Die einfachste Art dieses Fehlers und die häufigste Ursache für buffer overflows ist der sogenannte “klassische” Fall, bei dem ein Puffer ohne Größenbeschränkung kopiert wird. Es existieren weitere Varianten, doch das Vorhandensein eines klassischen overflow deutet stark darauf hin, dass der Programmierer keine grundlegenden Sicherheitsvorkehrungen berücksichtigt.

Risikominderungsmaßnahmen

Maßnahme (Architecture and Design)

Effektivität: Unknown
Beschreibung: Sicherheitsprüfungen, die auf der Client-Seite durchgeführt werden, müssen unbedingt auch auf der Server-Seite dupliziert werden, um CWE-602 zu vermeiden. Angreifer können die Client-seitigen Prüfungen umgehen, indem sie Werte nach der Prüfung modifizieren oder den Client so verändern, dass die Client-seitigen Prüfungen vollständig entfernt werden. Anschließend würden diese modifizierten Werte an den Server übermittelt.

Maßnahme (Build and Compilation)

Effektivität: Unknown
Beschreibung: Die meisten Technologien zur Abmilderung von Buffer Overflows auf Compiler- oder Betriebssystemebene adressieren derzeit nur einen Teilbereich der Probleme und bieten selten vollständigen Schutz, selbst für diesen Teilbereich. Es ist bewährte Praxis, Strategien zu implementieren, um die Arbeitsbelastung eines Angreifers zu erhöhen, beispielsweise indem man ihn zwingt, einen unbekannten Wert zu erraten, der sich bei jeder Programmausführung ändert.

Maßnahme (Implementation)

Effektivität: Moderate
Beschreibung: Ersetze unbegrenzte Copy-Funktionen durch analoge Funktionen, die Längenargumente unterstützen, wie beispielsweise strcpy durch strncpy. Erstelle diese Funktionen, falls sie nicht verfügbar sind. Notizen: Dieser Ansatz ist weiterhin anfällig für Rechenfehler, einschließlich Problemen wie “off-by-one”-Fehlern (CWE-193) und fehlerhafter Berechnung von Buffer-Längen (CWE-131).

Maßnahme (Architecture and Design)

Effektivität: Unknown
Beschreibung: Wenn der Satz akzeptabler Objekte, wie beispielsweise Dateinamen oder URLs, begrenzt oder bekannt ist, erstellen Sie eine Zuordnung von einem Satz fester Eingabewerte (z. B. numerische IDs) zu den tatsächlichen Dateinamen oder URLs und verwerfen Sie alle anderen Inputs.

Maßnahme (Architecture and Design)

Effektivität: Unknown
Beschreibung: Führen Sie Ihren Code mit den minimal erforderlichen Berechtigungen aus [REF-76]. Erstellen Sie nach Möglichkeit isolierte Accounts mit eingeschränkten Berechtigungen, die ausschließlich für eine einzelne Aufgabe verwendet werden. So wird ein erfolgreicher Angriff nicht unmittelbar dem Angreifer Zugriff auf den Rest der Software oder ihrer Umgebung gewähren. Beispielsweise benötigen Datenbankanwendungen selten die Ausführung als Datenbankadministrator, insbesondere im Rahmen des täglichen Betriebs.