Question:
Est-ce vraiment une mauvaise configuration de sécurité pour afficher un numéro de version?
stormtrooper
2019-08-13 13:34:53 UTC
view on stackexchange narkive permalink

Notre application Web utilise un fichier HTML avec jQuery intégré à l'intérieur.Selon la licence jQuery ( https://jquery.org/license/), nous devons laisser l'en-tête de licence intact, y compris le numéro de version.

Notre client a signalé l'exposition de la combinaison produit et version comme un risque de sécurité. Curieusement, la version bootstrap dans le même fichier n'est pas signalée comme un risque de sécurité.

De nombreuses applications utilisent des bibliothèques avec des numéros de version à l'intérieur. Il est même possible d'obtenir les numéros de version en exécutant du code dans Firebug ou dans la Developer Console de Chrome.

Dans quelles circonstances cette "mauvaise configuration de sécurité" ( https://www.owasp.org/index. php / Top_10-2017_A6-Security_Misconfiguration) s'appliquent à l'affichage du numéro de produit et de version? Et comment pouvons-nous résoudre ce problème sans violer la licence jQuery?

Je pense que vous avez une erreur logique en ce que la divulgation d'informations est assimilée à une mauvaise configuration de sécurité.Ils ne sont en aucun cas identiques ou liés.
"* Curieusement, la version bootstrap dans le même fichier n'est pas signalée comme un risque de sécurité. *" Ils ont peut-être repéré au hasard le numéro de version de jQuery et l'ont signalé.Ou ils pourraient penser qu'il est redondant de pinailler chaque numéro de version qu'ils ont trouvé.Ou leur outil automatisé vient de repérer celui de jQuery.Tout comme les logiciels ne sont jamais exempts de bogues parce que le programmeur ne pense pas à tous les cas extrêmes ou ne connaît pas chaque bizarrerie (ou n'a peut-être pas assez de temps pour le faire), le pentesting est également une entreprise inexacte.
Supprimer le numéro de version du fichier de licence ne vous aiderait pas de toute façon, car un attaquant peut simplement vérifier manuellement la version que vous utilisez.
@MechMK1 pas si vous ajoutez du code inaccessible (comme `if (true === false) {}`) ou des espaces aléatoires quelque part / partout, alors leurs correspondants automatiques ne pourraient pas correspondre définitivement à une version.
@MonkeyZeus Si vous utilisez une correspondance exacte naïve, vous auriez raison.Cependant, si vous vérifiez un degré de similitude, de légères modifications apportées à jQuery 3.1.7 ressembleront toujours à 99,8% à jQuery 3.1.7.
@MechMK1 Il a été mentionné d'innombrables fois que si un attaquant vous cible spécifiquement, rien de tout cela n'a d'importance, surtout quand vous parlez de code envoyé au client comme JS, mais si vous essayez simplement d'éviter les script kiddies alors même la moindre obscurité "aide".La vraie mauvaise configuration de la sécurité utilise une version vulnérable.Même si vous n'utilisez pas une version vulnérable, il est extrêmement simple de faire en sorte que le navigateur utilise une version vulnérable.Honnêtement, si votre site Web est vulnérable à cause de JS, vous faites quelque chose de mal du point de vue de la sécurité.
@MonkeyZeus Oui, je suis conscient, mais ce n'était pas vraiment le point.Les Script Kiddies utilisent des outils automatisés bien conçus, pas des outils auto-écrits mal conçus.Chaque analyseur d'applications Web de base sera en mesure d'identifier une version modifiée de jQuery, donc tenter de l'obscurcir entraînera simplement des problèmes et aucun gain de sécurité.Bien que j'aimerais savoir comment vous amèneriez un navigateur à utiliser une version vulnérable de jQuery, si le site inclut une version sans vulnités connues.
@MechMK1 Copier + Coller + Entrer dans la fenêtre de votre console: `var script = document.createElement ('script');script.type = 'texte / javascript';script.src = 'https://ajax.googleapis.com/ajax/libs/jquery/1.2.3/jquery.min.js';document.head.appendChild (script);alert (jQuery.fn.jquery); `
Passer du temps à essayer de cacher les versions des bibliothèques côté client, au lieu de passer du temps à résoudre de vrais problèmes de sécurité, vous rend potentiellement plus vulnérable.
@MonkeyZeus Oui, mais vous ne pouvez le faire qu'à vous-même, pas aux autres.Vous ne pouvez pas, par exemple, me pousser à utiliser une version vulnérable de jQuery.
Je ne vois aucune indication sur https://jquery.org/license/ que le numéro de version doit rester intact.Il dit que l'en-tête du copyright doit ... tant que vous avez le `Copyright 2005, 2014 jQuery Foundation, Inc. et d'autres contributeurs;Publié sous la licence MIT;http: // jquery.org / license` Je ne m'attendrais pas à ce qu'ils sourcillent.
@ceejayoz Comme mentionné précédemment, cela ne vous aiderait de toute façon pas à masquer la version.
@MechMK1 Bien sûr, mais cela aiderait OP à retirer le scanner de sécurité du client.
@ceejayoz "Corriger" les problèmes pour empêcher le scanner de se plaindre est l'une des ** pires ** choses que vous puissiez faire.Bien sûr, supprimer une version dans un fichier de licence ne suffit pas, mais c'est une approche fondamentalement erronée.Des choses comme celles-ci sont la raison pour laquelle le bogue Debian PRNG est apparu.
@MechMK1 Tant qu'OP a une version sûre de jQuery, le résultat du scanner ici est un * faux positif *.Je ne préconise pas de dissimuler une version non sécurisée;Je dis que la divulgation de version signalée peut être traitée en toute sécurité de cette façon.
@ceejayoz Oui, c'est vrai, et dans ce cas précis, je n'y verrais pas de problème.Mais je dirais qu'en général, il vaut mieux apprendre à étiqueter les rapports comme des faux positifs, plutôt que de se précipiter et de mettre en œuvre une «solution».
@MechMK1 Très bien, je peux être d'accord avec cela.
Cinq réponses:
Sjoerd
2019-08-13 14:26:25 UTC
view on stackexchange narkive permalink

L'impact sur la sécurité de l'exposition du numéro de version est qu'un attaquant peut voir instantanément si votre version est vulnérable à une vulnérabilité connue. Par exemple, jQuery avant 3.4.0 est vulnérable à CVE-2019-11358, il est donc utile pour un attaquant de savoir si votre jQuery est 3.3.9 ou 3.4.1.

Cependant, avec JavaScript qui s'exécute dans le navigateur, le code source complet est accessible par l'attaquant, il est donc impossible de cacher si votre jQuery est vulnérable. Même si vous cachez la version, l'attaquant peut comparer le code, ou simplement essayer un exploit, pour déterminer si vous êtes vulnérable. Masquer le numéro de version peut le rendre un peu plus efficace, mais en réalité, cela ne fait pas grand-chose.

De plus, il existe d'autres moyens d'atténuer ce problème:

  • Restez au courant de la sécurité problèmes dans les bibliothèques que vous utilisez. Abonnez-vous à une liste de diffusion ou à une autre méthode de publication pour des problèmes de sécurité.
  • Mettez à jour les bibliothèques clientes chaque fois qu'un problème de sécurité est identifié.

Si vous avez toujours un non-vulnérable parce que vous mettez à jour régulièrement, ce n'est pas un problème que la version soit divulguée. Et vous pouvez dire à votre client que c'est ainsi que vous atténuez la divulgation d'informations.

D'accord, juste une petite note: "* Cacher le numéro de version peut le faire un peu plus de travail *" Je dirais que c'est un peu plus que "légèrement": afin de mapper le code à un numéro de version (afin de brancher celanuméro de version dans une recherche CVE), vous devez avoir un index de toutes les variantes (minifiées, peut-être avec différents packers) de toutes les versions de toutes les bibliothèques pertinentes.Un attaquant dédié peut le faire s'il soupçonne qu'il y aura une vulnérabilité exploitable, mais la plupart du temps, les vulnérabilités des bibliothèques côté client ne sont pas accessibles ou ont un impact limité.Je pense que peu d'attaquants s'en soucieraient.
@Luc Je dirais que c'est tout simplement inutile, vous pouvez y accéder via `$ .fn.jquery`, bien plus facile que de supprimer les commentaires qui peuvent de toute façon être illisibles dans la plupart des sources à cause de SOP.
@Kaiido Bien, je ne connaissais pas `$ .fn.jquery`.Je ne sais pas si c'est une coïncidence chanceuse ou s'il est courant que d'autres bibliothèques en aient également.En regardant la bibliothèque que je vois en deuxième lieu, Bootstrap, il [ne semble pas que] (https://stackoverflow.com/questions/15335537/how-to-identify-bootstrap-version) il existe une telle fonction pourcette.
@Luc si vous parlez du css, alors non, il n'y a pas quelque chose de disponible à partir de js (à part les commentaires).Mais chaque plug-in d'amorçage a sa propre VERSION accessible depuis le constructeur: https://stackoverflow.com/questions/43233588/how-can-i-get-bootstrap-version-via-javascript
-1
@echo il existe des outils spécialement conçus pour surveiller les vulnérabilités dans les composants tiers.Deux des leaders commerciaux du secteur sont actuellement Palamida et Black Duck, mais si vous effectuez une recherche sur Google, vous pouvez proposer une liste de produits plus récents à des prix différents (certains gratuits, mais nécessitant un travail manuel important) qui pourraient répondre à vos besoins.meilleur.
@Echo Ils ont généralement tous leurs propres listes de diffusion.Cependant oss-sec est une bonne liste de diffusion fourre-tout.
Quelqu'un peut-il me dire comment une bibliothèque côté client peut-elle être une vulnérabilité dans tous les cas?Pour qu'une attaque se produise, l'attaquant doit d'abord exécuter du code côté client.À part `eval (window.location.hash)` Je ne vois pas comment une bibliothèque qui manipule du HTML peut être vulnérable aux attaques sans que le site Web soit déjà compromis.
schroeder
2019-08-13 14:26:41 UTC
view on stackexchange narkive permalink

Connaître le numéro de version n'est pas une mauvaise configuration de sécurité. Le risque d'exposer les numéros de version est une "divulgation d'informations". Cela peut créer un danger si la connaissance de ces informations permet à un attaquant de créer un exploit pour une vulnérabilité dans cette version spécifique.

Même si la bibliothèque finit par contenir une vulnérabilité, il ne s'agit toujours pas d'un problème de configuration de sécurité. Ce serait "A9-Utiliser des composants avec des vulnérabilités connues".

Il semble donc que le client ait une compréhension incorrecte et rigide des risques et de la situation.

Tom
2019-08-14 09:38:59 UTC
view on stackexchange narkive permalink

Le fait d'exposer le numéro de version de quelque chose est un danger pour la sécurité.

Apparemment, cela rend le travail plus facile pour les attaquants, car s'ils connaissent la version de tout ce que vous exécutez, ils peuvent rechercher les vulnérabilités qui s'appliquent à cette version.

En fait, c'est ce que font les scanners de sécurité. Nessus et al ont une base de données intégrée de vulnérabilités par numéro de version. Donc, à moins de ne jamais vous scanner vous-même, cacher ces informations, c'est vous tirer une balle dans le pied.

Sauf que les scanners et les attaquants (qui utilisent des scanners, vous savez?) Ont d'autres moyens que un simple strcmp () pour déterminer le numéro de version de quelque chose. C'est un peu plus d'effort, et ne peut pas toujours identifier un nombre exact, mais aucun attaquant qui vaut quoi que ce soit ne confondra jQuery 3.3.0 avec jQuery 2.2.1

Les attaquants de niveau non-script-kiddie ont également plusieurs autres méthodes pour comprendre ce que vous exécutez, de la prise d'empreintes digitales au simple test automatique de quelques centaines d'exploits et à la vérification du travail.

Masquer le numéro de version vous donne une très petite quantité de sécurité supplémentaire. Si vous n'avez plus rien à faire, vous pouvez le faire ou non. Tant que vous avez de réels problèmes de sécurité à résoudre, passez votre temps sur ceux-ci.

Enfin, exposer le numéro de version n'est pas un cas de mauvaise configuration de sécurité. Si votre outil le signale comme tel, signalez ce bogue en amont afin que votre outil puisse être corrigé.

"* sauf si vous ne vous scannez jamais, cacher [les numéros de version], c'est vous tirer une balle dans le pied. *" Sauf qu'il existe une équipe de développement qui a fait le logiciel.Ils savent quelle version ils ont utilisée et peuvent y rechercher des vulnérabilités.Faire cela est aussi rare que d'exécuter des analyses de vulnérabilité sur vous-même (presque personne ne le fait non plus), mais si vous devez en choisir un, je préfère vérifier les numéros de version moi-même plutôt que de les exposer à tout le monde.Oui, les attaquants ciblés utiliseront d'autres moyens pour obtenir les informations, mais cela ne signifie pas que vous voulez faciliter la tâche pour eux ou pour les enfants du script.
Si vous êtes une cible facile pour les enfants de script, les numéros de version exposés sont le moindre de vos problèmes.Je suis d'accord que l'équipe de développement devrait vérifier les vulns, mais vous savez quoi?Ce ne sont pas des experts en sécurité et vous l'êtes.Il est judicieux d'exécuter des analyses au lieu de faire confiance à l'équipe de développement à ce sujet.Idéalement, vous feriez ** les deux **.
jfran3
2019-08-13 14:24:10 UTC
view on stackexchange narkive permalink

Je ne suis pas sûr à 100% s'il s'agit ou non d'une question en double. S'il doit être marqué comme tel, veuillez le faire mods, mais je pense que le conseil dans ce message particulier " Existe-t-il une version de base de jQuery qui n'a pas de vulnérabilité XSS" serait utile pour résoudre le problème problème pour vos clients.

L'un des principaux facteurs que vous devrez évaluer pour répondre à la question générale est de savoir si la solution de sécurité proposée est un bon retour sur investissement pour votre client. Vaut-il la peine d'écrire une exception dans la politique de sécurité, ou peut-être d'implémenter du code pour supprimer les numéros de version retournés (ou comme le note le commentateur peut potentiellement abandonner jQuery) pour atténuer le risque d'exposer le numéro de version? Dans de nombreux cas, ce ne sera pas le cas, mais dans d'autres, ce sera le cas, et tout dépendra de la situation individuelle. Cependant, vous devez absolument vérifier que les versions que vous utilisez ne sont pas déjà compromises en utilisant quelque chose comme cvedetails ou la NIST National Vulnerability Database.

Quant à savoir pourquoi Bootstrap n'est pas signalé, cela dépend probablement du scanner (que vous n'avez pas mentionné) et des tests que vous utilisez pour l'évaluation. Selon la logique de la mauvaise configuration de la sécurité OWASP, cela pourrait également être considéré comme une vulnérabilité et devrait / ne devrait pas être corrigé pour la même raison. Quoi qu'il en soit, exposer ces informations donne à tout attaquant potentiel un autre point de données à partir duquel effectuer des recherches et potentiellement identifier les vulnérabilités.

rackandboneman
2019-08-16 00:38:37 UTC
view on stackexchange narkive permalink

En fin de compte, le cacher est la sécurité par l'obscurité.

Ce qui est souvent décrié comme un comportement malavisé et inutile.

Ce que c'est, s'il est utilisé SUR SON PROPRE et CONTRE ATTAQUE CIBLEE.

Elle peut améliorer les mesures de sécurité "appropriées" en réduisant le risque que vous ne soyez pas ciblé en premier lieu par quiconque recherche encore une cible.

Cela minimise les RISQUES .

Une sécurité «correcte», c'est comme s'assurer que vos actions sont légales, la sécurité par l'obscurité, c'est comme toujours s'assurer de ne pas attirer l'attention gratuite de la police au cas où vous vous tromperiez sur la loi.



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 4.0 sous laquelle il est distribué.
Loading...