Java ont des débordements de tampon?
Java ont des débordements de tampon?
Si oui pouvez-vous me donner des scénarios?
- Certaines fonctions de la bibliothèque (mise en œuvre en code natif) ont été connus pour avoir de bugs. En particulier, dans le Java 5 beaucoup d'exploits en 2D, du son ou de la couleur des profils ont été connus.
Vous devez vous connecter pour publier un commentaire.
Depuis Java Chaînes sont basés sur des tableaux de char et Java vérifie automatiquement les limites du tableau, les dépassements de mémoire tampon ne sont possibles que dans des scénarios:
Géré des langages tels que Java et C# n'ont pas ces problèmes, mais le spécifique des machines virtuelles (JVM/CLR/etc) qui fait exécuter le code peut.
Pour toutes fins utiles, non.
Java a tableau la vérification des limites qui va vérifier que les données ne peuvent pas être accessibles à partir de la zone à l'extérieur de l'allocation d'un tableau. Quand on essaie d'accéder à la zone qui est au-delà de la taille de la matrice, un
ArrayOutOfBounds
exception sera levée.Si il y a un tampon de saturation, c'est probablement d'un bug dans la Machine Virtuelle Java, et est, à ma connaissance, pas le comportement souhaité est écrit dans le Langage Java, Spécifications, ni la Machine Virtuelle Java Spécifications.
Un dépassement de tampon dans le sens strict de remplacer la pile ou le tas lui-même nécessiterait soit:
Un dépassement de tampon dans le sens que vous avez le code à l'aide d'un tampon et de votre code est responsable de l'analyse correctement, mais ne parviennent pas à le faire est possible.
Par exemple, Vous pourriez écrire un analyseur XML et quelqu'un pourrait vous fournir avec un mal formé (ou légitime, mais rare) demande, en raison de la conception de votre analyseur écrase déjà validé des données avec certains de charge utile qui serait la cause de votre application à mal se comporter.
Cette dernière forme est moins probable, mais un mal écrit chaîne sql nettoyage de la fonction largement distribué qui ont eu un problème comme ce serait une invitation à la cible.
Oui et non. Non, dans le sens que vous ne peut pas vraiment créer, à tort, de vous ouvrir à une vulnérabilité de dépassement de tampon parce que c'est une mémoire gérée par le modèle. Cependant, il peut y avoir des vulnérabilités de type débordement de mémoire tampon dans la JVM et JDK. Voir ce Secunia consultatif:
http://secunia.com/advisories/25295
Ou voir ces vieux avis sur plusieurs JDK et JRE vulnérabilités:
Entier et les Vulnérabilités de type Débordement de mémoire Tampon dans l'Environnement d'Exécution Java (JRE) "unpack200" POT Déballage de l'Utilitaire Peut Conduire à une Escalade de Privilèges https://download.oracle.com/sunalerts/1020225.1.html
De multiples vulnérabilités ont été identifiées dans Sun Java Development Kit (JDK) et l'Environnement d'Exécution Java (JRE). https://security.gentoo.org/glsa/200705-23
Java (et .Net) des machines virtuelles attraper code qui tente d'écrire en dehors de la mémoire réservée. Les Applications qui ne gèrent pas correctement, il peut causer des problèmes de sécurité. Si les utilisateurs malveillants peuvent déclencher des exceptions par la saisie d'une entrée non valide ils peuvent faire des attaques par déni de service par exemple.
Comme cela a déjà été souligné, en Java, en tant que langue, la vérification des limites sur tous les accès à la mémoire, et si il y a une erreur ici, la JVM est en faute et non pas le programme. Toutefois, il convient de noter, ce qui est un argument similaire à des fuites de mémoire en Java, tandis que pas possible de casser la pile, un ArrayOutOfBoundsException au mauvais endroit, ce qui n'est pas traitée correctement, peut-être encore en fin de vissage de votre système.
Il est possible qu'une méthode pour écrire en valide les entrées d'un tableau qu'il n'a pas l'intention d', généralement par le biais de dépassement d'entier.
Par exemple n'est pas suffisant pour vérifier les limites:
IIRC,
StringBuffer
une fois eu un bug comme ça, mais il n'y avait pas quelque chose d'intéressant que vous pourriez faire avec elle.Vous pourrait éventuellement provoquer un débordement de mémoire tampon dans un programme Java si vous avez été en utilisant le Java Native Interface (JNI) et de l'installation d'invoquer le code externe, et le code externe avait un problème exploitable. C'est assez rare, puisque la plupart des applications éviter l'utilisation de JNI, si possible.
L'une des principales caractéristiques de JAVA est la Sécurité. Les programmes écrits dans des langages interprétés sont pas enclin à le débordement de la mémoire tampon exploiter, mais vous pouvez toujours causer un dépassement de tampon dans l'Interpréteur lui-même.
Bien qu'il sera difficile. De la même façon Python est un langage interprété et est à l'abri de débordement de la mémoire tampon.