faille de sécurité - veracode rapport - crlf injection
J'ai eu le veracode rapport pour mon application javaEE. Il avait une faille à tout enregistrement (à l'aide de log4j), j'ai donc ajouter le StringEscapeUtils.escapeJava(log)
à tous, mais veracode garde de leur déclaration que les failles de sécurité.
Est-ce une bonne solution?
Que puis-je faire?
C'est le rapport de l'info:
Titre:
Une mauvaise Sortie de Neutralisation pour les Journaux
Description:
Un appel de fonction pourrait entraîner un journal de forgeage attaque. Écrit unsanitized données fournies par l'utilisateur dans un fichier journal permet à un
l'attaquant de forger des entrées de journal ou d'injecter du contenu malveillant dans les fichiers journaux. Corrompu les fichiers journaux peuvent être utilisés pour couvrir une
l'attaquant des pistes ou comme un mécanisme de livraison pour une attaque sur un affichage de journal ou de traitement de l'utilitaire. Par exemple, si un site web
l'administrateur utilise un navigateur basé sur l'utilitaire de consulter les journaux, un cross-site scripting attaque pourrait être possible.
Recommandations:
Éviter directement l'incorporation de la saisie de l'utilisateur dans les fichiers journaux lorsque cela est possible. Désinfecter les données fournies par l'utilisateur utilisé pour construire journal
les entrées en utilisant un coffre-fort mécanisme de journalisation comme l'OWASP ESAPI Enregistreur, qui supprimera automatiquement
inattendu retours chariot et les sauts de ligne et peut être configuré pour utiliser les entités HTML de codage pour les non-alphanumériques
les données. Seulement rédigez votre propre liste noire de code lorsque cela est absolument nécessaire. Toujours valider l'entrée fourni par l'utilisateur pour assurer
qu'il est conforme au format attendu, à l'aide de données centralisée des routines de validation lorsque cela est possible.
Ils recommandent d'utiliser ESAPI, mais c'est un très gros projet, donc j'ai besoin de la solution la plus simple, la tht est pourquoi j'ai essayé avec de la Ficelle.escape 'StringEscapeUtils.escapeJava(log)'
Thx avancé!
OriginalL'auteur david | 2013-04-25
Vous devez vous connecter pour publier un commentaire.
Je suis à la tête de la Veracode de Sécurité de l'Application Consulting group, et peut répondre à votre question en détail. Le meilleur lieu pour que la conversation soit par le biais de [email protected] puisque la discussion peut impliquer des détails spécifiques au sujet de vos résultats que nous voulons probablement pour éviter de rendre publics.
La réponse courte est la StringEscapeUtils.escapeJava() est efficace pour éliminer typique CRLF risque, mais il n'est pas l'un des mécanismes de notre système reconnaît automatiquement car il existe des situations dans lesquelles il peut être insuffisant.
La Veracode système dispose d'un mécanisme pour le marquage de ces résultats de façon appropriée afin de ne pas causer de la confusion.
Veuillez contacter Veracode de Soutien ([email protected]), et nous allons pouvoir en parler en détail.
Meilleures salutations,
Jim.
OriginalL'auteur Jim.
Il y a deux questions de la troisième partie de ce rapport.
Tout d'abord, il y a le journal de l'injection à l'aide d'un caractère de saut de ligne à déborder dans un journal séparé de la ligne.
StringEscapeUtils.escapeJava
produit une sortie qui a des séparateurs et des caractères non-ASCII échappé, qui, en principe, d'assurer ce problème est résolu. Veracode ne sait pas que, même si - comme un scanner automatisé, il ne le sait pas assez sur ce que la méthode est en train de faire pour être en mesure de dire, donc, il doit le rapport, il pourrait encore être une vulnérabilité. Naturellement Veracode ne pouvez pas savoir à propos de chaque échapper la fonction dans la troisième partie de la bibliothèque de code.Journal d'injection peut également se produire lorsque vous utilisez votre propre séparateurs à l'intérieur d'un journal en ligne, par exemple
Bad thing happened with parameters {0} and {1}
. Dans ce cas, si un attaquant a la chaîne" and "
dans l'un des paramètres, vous ne seriez pas en mesure de recréer exactement laquelle des données en paramètre. La réponse ici est d'entourer les paramètres avec des séparateurs qui n'apparaissent pas dans la sortie de l'échappement de la fonction - par exemple mettre des guillemets autour de chaque valeur et l'utilisationescapeJava
pour échapper à la double caractère de devis dans la valeur.La deuxième attaque qui se passe en dehors de votre application, lorsque certains outil est utilisé pour afficher les journaux. Si cet outil a une vulnérabilité d'injection, puis des caractères de remplacement dans le journal de données peut devenir actif. L'exemple classique est celui de l'affichage des journaux dans une interface web pour les copies directement dans la page sans avoir à s'échapper, entraînant HTML injection et, par conséquent, cross-site-scripting dans le journal application de visualisation.
Si vous pouvez être sûr que vous êtes seulement l'affichage des journaux des outils qui ne souffrent pas de stupide bugs de ce genre, vous n'avez pas besoin de s'inquiéter à ce sujet.
Sinon, essayez d'échapper à tout métacaractères de langues que vous pensez peut-être touché. Généralement
<
et&
pour HTML. Si vous ne voulez pas être en HTML échapper à toute votre non-HTML les données de journal, une autre façon vous pourriez faire serait de remplacer ces caractères avec échappé équivalents comme\u003E
dans la sortie deescapeJava
.De nouveau, Veracode ne serez pas en mesure de travailler automatiquement que ce que vous faites est nécessairement en sécurité là-bas sorte que vous aurez à marquer ces rapports ignorés/traitée avec une fois que vous êtes heureux avec elle.
En effet. Cependant, de retour dans la journée, l'outil utilisé pour afficher le fichier journal " peut avoir été à savoir, auquel cas vous avez eu deux problèmes: tout d'abord les balises HTML dans un journal de texte à l'origine du fichier à découvrir en tant que text/html, et d'autre part les fichiers d'être vu au large de la machine locale de se retrouver dans la Zone poste de travail, qui était à ce moment très privilégié assez pour être capable d'exécuter du code arbitraire via ActiveX. Heureusement, à la fois MIME-sniffing et les autorisations de la Zone ont été apprivoisé depuis tellement de problèmes avec le HTML dans les fichiers journaux sont beaucoup plus rares.
L'utilisation d'IE pour afficher les fichiers journaux? C'est à peu près aussi intelligent que de mettre une balle dans un pistolet, regarder vers le bas le tonneau et le feu dans l'œil de voir si elle fonctionne.
OriginalL'auteur bobince
J'ai rencontré le même problème et je suis ignorant généralement cette faille pour une raison simple: Un enregistreur de me donne juste un journal d'événements. Il ne devrait pas s'en soucier mise en forme (exposer des données sensibles est un autre problème).
La solution est d'ajouter un filtrage adéquat/post-traitement dans la appender qui écrit le journal d'événements dans le fichier journal. À cette étape, vous pouvez supprimer les caractères spéciaux (
\0
,\r
- retour chariot,\b
- backspace,\x1b
- escape et\x7f
- supprimer) et remplacer\n
avec\n...
il est impossible d'injecter de faux journal de lignes dans le journal.Lorsque vous faites cela, vous pouvez ignorer tous ces défauts.
Aussi, si un administrateur utilise les mauvais outils de regarder les fichiers journaux (quelque chose qui exécute les séquences d'échappement,
\r
et retour), il devrait être congédié.OriginalL'auteur Aaron Digulla
Utilisation StringEscapeUtils.escapeHtml(log) pour éviter les injections HTML et qui pourrait résoudre votre problème.
ESAPI.encoder().encodeForHTML(raw)
afin de convaincre Veracode.OriginalL'auteur user3846770