it-swarm.com.de

Hat Java Pufferüberläufe?

Hat Java Pufferüberläufe? Wenn ja, können Sie mir Szenarien geben?

90
ecleel

Da Java Strings auf char-Arrays basieren und Java automatisch die Array-Grenzen überprüft, sind Pufferüberläufe nur in ungewöhnlichen Szenarien möglich:

  1. Wenn Sie nativen Code über JNI aufrufen
  2. In der JVM selbst (normalerweise in C++ geschrieben)
  3. Der Interpreter oder JIT-Compiler funktioniert nicht richtig
102

Verwaltete Sprachen wie Java und C # haben diese Probleme nicht, aber die spezifischen virtuellen Maschinen (JVM/CLR/etc), auf denen der Code tatsächlich ausgeführt wird, können dies.

24
Brian Rasmussen

Für alle Absichten und Zwecke, nein.

Java hat array bounds checking , das prüft, ob auf Daten außerhalb des zugewiesenen Arrays nicht zugegriffen werden kann. Wenn versucht wird, auf einen Bereich zuzugreifen, der über die Größe des Arrays hinausgeht, wird eine ArrayOutOfBounds - Ausnahme ausgelöst.

Wenn es einen Pufferüberlauf gibt, liegt dies wahrscheinlich an einem Fehler in der Java Virtual Machine und ist meines Wissens nicht das beabsichtigte Verhalten, das in der Java Sprachspezifikationen noch die Java Spezifikationen der virtuellen Maschine.

13
coobird

Ja und nein. Nein, Sie können sich nicht irrtümlich einer Pufferüberlauf-Sicherheitsanfälligkeit aussetzen, da es sich um ein verwaltetes Speichermodell handelt. In der JVM und im JDK können jedoch Pufferüberlauf-Schwachstellen auftreten. Siehe diesen Secunia-Hinweis:

http://secunia.com/advisories/25295

Oder lesen Sie diese alten Hinweise zu mehreren früheren JDK- und JRE-Sicherheitslücken:

  • Sicherheitsanfälligkeiten in der Java Runtime Environment (JRE)) "unpack200" JAR-Entpackungsdienstprogramm können zu einer Eskalation von Berechtigungen führen https://download.Oracle.com/sunalerts/ 1020225.1.html

    Ganzzahl- und Pufferüberlauf-Schwachstellen in der Java Runtime Environment (JRE) mit dem Entpacken von Applets und Java Web Start-Anwendungen mit dem JAR-Entpackungsdienstprogramm "unpack200" können u Nicht vertrauenswürdiges Applet oder Anwendung zum Eskalieren von Berechtigungen: Ein nicht vertrauenswürdiges Applet kann sich beispielsweise selbst Berechtigungen zum Lesen und Schreiben lokaler Dateien oder zum Ausführen lokaler Anwendungen erteilen, auf die der Benutzer zugreifen kann, der das nicht vertrauenswürdige Applet ausführt.

    Sun bedankt sich bei "regenrecht" für die Zusammenarbeit mit dem iDefense VCP ( http://labs.idefense.com/vcp/ ) und Chris Evans von Google, die uns auf diese Probleme aufmerksam gemacht haben.

  • In Sun Java Development Kit (JDK)) und Java Runtime Environment (JRE). https: //security.gentoo) wurden mehrere Sicherheitslücken identifiziert .org/glsa/200705-2

    Das Fujitsu-Sicherheitsteam hat eine nicht näher bezeichnete Sicherheitsanfälligkeit gemeldet, die eine "falsche Verwendung von Systemklassen" zur Folge hat. Darüber hinaus hat Chris Evans vom Google-Sicherheitsteam einen Ganzzahlüberlauf gemeldet, der zu einem Pufferüberlauf im ICC-Parser für JPG- oder BMP Dateien und einem falschen open () -Aufruf an/dev/tty geführt hat bei der Verarbeitung bestimmter BMP Dateien.

9
BobbyShaftoe

Ein Pufferüberlauf im strengen Sinne des Überschreibens des Stapels oder des Heaps selbst würde Folgendes erfordern:

  1. Ein Fehler im Framework (diese haben in der Vergangenheit existiert und können durchaus wieder vorkommen)
  2. Die Verwendung von JNI (im Wesentlichen nicht mehr mit verwaltetem Code)

Ein Pufferüberlauf in dem Sinne, dass Sie Code haben, der einen Puffer verwendet, und Ihr Code für das korrekte Parsen verantwortlich ist, dies jedoch nicht tut, ist möglich. Zum Beispiel könnten Sie einen XML-Parser schreiben und jemand könnte Ihnen eine fehlerhafte (oder legitime, aber ungewöhnliche) Anfrage senden, die aufgrund des Designs Ihres Parsers zuvor validierte Daten mit Nutzdaten überschreibt, die dazu führen würden, dass sich Ihre Anwendung schlecht verhält.

Diese letztere Form ist weniger wahrscheinlich, aber eine schlecht geschriebene SQL-String-Bereinigungsfunktion, die weit verbreitet ist und ein Problem wie dieses hat, ist ein einladendes Ziel.

9
ShuggyCoUk

Virtuelle Java- (und .Net-) Maschinen fangen Code ab, der versucht, außerhalb des reservierten Speichers zu schreiben. Anwendungen, die dies nicht korrekt handhaben, können dennoch Sicherheitsprobleme verursachen. Wenn böswillige Benutzer durch Eingabe ungültiger Eingaben Ausnahmen auslösen können, können sie beispielsweise Denial-of-Service-Angriffe ausführen.

4
Mendelt

Es ist möglich, dass eine Methode in gültige Einträge eines Arrays schreibt, für das sie nicht vorgesehen war, normalerweise durch einen Ganzzahlüberlauf.

Zum Beispiel ist das Folgende nicht ausreichend, um Grenzen zu überprüfen:

/* !! WRONG !! */ 0 <= off && 0 <= len && off+len <= buff.length /* !! WRONG !! */

IIRC, StringBuffer hatte einmal einen solchen Fehler, aber es gab nichts Interessantes, was man damit machen konnte.

Wie bereits erwähnt, beschränkt Java als Sprache die Überprüfung aller Speicherzugriffe, und wenn hier ein Fehler auftritt, ist die JVM fehlerhaft und nicht das Programm. Wie auch immer Es ist zu beachten, dass dies ein ähnliches Argument ist wie Speicherverluste in Java. Obwohl es nicht möglich ist, den Stapel zu zerschlagen, kann eine ArrayOutOfBoundsException an der falschen Stelle, die nicht korrekt behandelt wird, Ihr System immer noch kaputt machen.

3
falstro

Sie könnten möglicherweise einen Pufferüberlauf in einem Java) - Programm verursachen, wenn Sie die Funktion Java Native Interace (JNI) zum Aufrufen von externem Code und des externen Codes verwenden Es gab ein ausnutzbares Problem. Dies ist eher ungewöhnlich, da die meisten Anwendungen die Verwendung von JNI nach Möglichkeit vermeiden.

2
Tim Howland

Eine der Schlüsselfunktionen von Java ist die Sicherheit. In interpretierten Sprachen geschriebene Programme sind nicht anfällig für den Pufferüberlauf-Exploit. Sie können jedoch immer einen Pufferüberlauf in Interpreter selbst verursachen. Dies ist jedoch schwierig Ebenso ist Python ebenfalls eine interpretierte Sprache und vor Pufferüberlauf geschützt.

1