Est l'injection de code possible en Java?
aujourd'hui, vous pouvez lire beaucoup sur l'injection de code, d'exploits, de tampon de la pile et du tas débordements etc. conduisant à injecter et d'exécuter du code. Je me demande ce que cette histoire est pertinente pour Java.
Je sais, il n'y a pas de pointeurs en langage Java. Mais ne pas la JVM d'organiser les données en tas et /ou des piles?
Je sais il n'y a pas de fonction eval (comme en PHP) donc tu ne peux pas facilement utiliser un input en tant que Java-code. Je ne suis pas sûr de ce qui se passe sur le bytecode.
Je pense que XSS est possible, par exemple dans une application Java EE, lorsqu'il n'entrées sont filtrées. Mais n'est-ce pas plus un JavaScript injection, car l'injection de code s'exécute dans le navigateur, et non dans la JVM?
Donc le code qui les injections sont possibles avec java et qui ne le sont pas? Et est-ce vrai pour d'autres plate-forme Java langues, trop?
Merci d'avance.
OriginalL'auteur c0d3x | 2009-12-10
Vous devez vous connecter pour publier un commentaire.
Un programme java lui-même est plutôt bien de ne pas être vulnérable à l'injection de code. Cependant, tous les code natif qui prend en charge l'application est vulnérable à tous les différents types de l'injection de code - ce qui inclut la JVM, ainsi que toutes les parties du code dans l'application ou de ses bibliothèques.
Aussi, il y a un peu plus de choses à prendre en compte:
Rien où java est utilisé comme une passerelle pour d'autres systèmes sont possibles:
Injection SQL
XSS (qui est en fin de compte rien de plus que JavaScript Injection)
Si le programme java est lui-même un interpréteur/compilateur d'une certaine sorte, il pourrait être possible d'injecter du code dans votre langage interprété/programme compilé (ceci inclut l'utilisation de votre programme comme un compilateur java...)
Et bien sûr, si vous pouvez obtenir le programme java pour écrire un fichier sur le disque qui contient le code (que ce soit en natif, java ou autre), vous pourriez être en mesure d'obtenir qu'il soit exécuté par d'autres moyens (qui peut être une vulnérabilité différente dans votre application, le système d'exploitation ou une autre application) - ce n'est pas directe, injection de code, mais assez semblable, en effet.
OriginalL'auteur gha.st
Si l'application serveur crée bytecode lors de l'exécution (par exemple avec BCEL ou Javassist), et si cette création peut être influencée par la saisie de l'utilisateur, puis une injection de code est possible.
Toutefois, si l'application n'utilise pas de magie (qui devrait être de 99% de toutes les applications), il ne sera pas possible.
OriginalL'auteur akuhn
Vous pourriez écrire un web service qui a accepté un extrait de code Java, enveloppé dans une classe/déclaration de la méthode, enregistré sur le disque, a couru le compilateur sur elle et puis dynamiquement chargé et exécuté le résultat. Si l'injection de code est certainement possible.
Mais avec le typique implémentations Java, c'est peut-être pas très efficace, car il est relativement lourd processus de compilation (ça peut être pratique pour certaines applications).
L'injection de Code est très pertinent avec SQL parce que la "première approximation" de beaucoup de débutants est d'utiliser la concaténation de chaîne à insérer des variables dans un communiqué. Mais il a rarement des cultures comme une idée parmi les programmeurs Java. Donc, c'est la raison pour laquelle il n'est pas beaucoup d'un problème.
Si compilateurs Java est exposé, de poids léger, les services de la bibliothèque, alors vous auriez quelque chose de beaucoup plus près à l'équivalent de
eval
et, par conséquent, il pourrait commencer à devenir une préoccupation de premier plan."Si les compilateurs Java est exposé, de poids léger, les services de la bibliothèque": eh bien, ils sont déjà (découvrez javax.outils.JavaCompiler, java.sun.com/javase/6/docs/api/javax/tools/JavaCompiler.html). Mais encore une fois, pour l'injection de code de travail, l'application en vertu de l'attaque besoins de utilisation JavaCompiler, qui fort heureusement n'en ont pas.
-1 parce que la discussion de vulnérabilités est plutôt confuse...
Dans le troisième paragraphe, je dis "Mais il a rarement des cultures comme une idée parmi les programmeurs Java. Donc, c'est la raison pour laquelle il n'est pas beaucoup d'un problème." J'ai donc déjà faire le point de vous rendre dans deux de vos commentaires. Et dans votre commentaire à propos de la performance étant sans pertinence, je pense que vous êtes confus au sujet le problème - apps ne pas passer les intrants d'un interpréteur/compilateur afin de permettre à des exploits. Ils le font généralement à injecter des valeurs via la concaténation de chaîne. Et ils seront très probablement avoir des limites sur la façon de ralentir ou de poids lourds, cela peut être avant d'envisager une solution plus simple.
OriginalL'auteur Daniel Earwicker
Si c'était possible, Java serait déjà mort depuis longtemps.
D'autre part, les injections SQL sont très faciles à éviter en utilisant
PreparedStatement
pour stocker contrôlée par l'utilisateur d'entrée et de XSS est également très facile de les éviter en utilisant<c:out/>
pour (re)affichage commandé par l'utilisateur d'entrée à la page web.OriginalL'auteur BalusC
Il existe quelques façons dont le code Java peut être injecté dans une application telle que l'utilisation de l'API de script ou dynamique JSP comprend.
Le code ci-dessous permet à un utilisateur d'injecter de l'arbitraire de code Javascript en Java du moteur de script.
Dans ce cas, l'attaquant décide d'injecter du code qui crée un fichier sur le système de fichiers.
vérifier owasp site web pour plus d'exemples
OriginalL'auteur Badr Bellaj
Sauf si vous faites des choses étranges sur le serveur (comme la génération dynamique de code, etc), il est impossible de bo vulnérable pour l'injection de code.
Bien que je peux penser à un (vilain) situation où l'application crée dynamiquement une page JSP, basée sur la saisie de l'utilisateur. Que JSP sera traduit en code Java, qui est compilé en byte-code par le conteneur web, puis exécuté. Cela pourrait introduire un point d'injection. Mais en générant JSP dynamiquement normalement n'a pas de sens.
OriginalL'auteur AJK
Vous ne pouvez pas injecter de Java. Mais si vous n'êtes pas prudent, les gens pourraient injecter du code Javascript (c'est à dire XSS comme vous le mentionnez) ou SQL. Il y a des tas et des piles, mais pas moyen d'arriver à eux.
OriginalL'auteur rjmunro
Vous ne pouvez pas injecter de java, mais toutes les applications web sont vulnérables aux attaques de type XSS si l'entrée n'est pas correctement filtrée. Aussi une application qui interagit avec une base de données sql peut être vulnérable à une injection SQL. Pour éviter cela, vous voulez regarder dans les Requêtes Paramétrées.
OriginalL'auteur Jon