{"id":233399,"date":"2022-07-01T11:22:26","date_gmt":"2022-07-01T13:22:26","guid":{"rendered":"https:\/\/teknomers.com\/fr\/resoudre-lenigme-des-vulnerabilites-indirectes-corriger-les-vulnerabilites-indirectes-sans-casser-votre-arbre-de-dependance\/"},"modified":"2022-07-01T11:22:26","modified_gmt":"2022-07-01T13:22:26","slug":"resoudre-lenigme-des-vulnerabilites-indirectes-corriger-les-vulnerabilites-indirectes-sans-casser-votre-arbre-de-dependance","status":"publish","type":"post","link":"https:\/\/teknomers.com\/fr\/resoudre-lenigme-des-vulnerabilites-indirectes-corriger-les-vulnerabilites-indirectes-sans-casser-votre-arbre-de-dependance\/","title":{"rendered":"R\u00e9soudre l&#8217;\u00e9nigme des vuln\u00e9rabilit\u00e9s indirectes &#8211; corriger les vuln\u00e9rabilit\u00e9s indirectes sans casser votre arbre de d\u00e9pendance"},"content":{"rendered":"<p> <br \/>\n<\/p>\n<div id=\"articlebody\">\n<div class=\"separator\" style=\"clear: both;\"><img decoding=\"async\" alt=\"vuln\u00e9rabilit\u00e9s\" border=\"0\" data-original-height=\"380\" data-original-width=\"728\" src=\"https:\/\/thehackernews.com\/new-images\/img\/b\/R29vZ2xl\/AVvXsEhBz3IT6BU8eGspTJ_mqNmAFNjrhqryniEtc2585T1nSMNZzcIX730qaA1HrO7NlWBPSd9946O_RYaOEEx11UzzP-b6t8rLK5ZWhTw7jkND7kr6vypFg2t697iyhy074_yos1kdBx_0Z_4Vh9RkUrBr2zprivIXxJ4oDamfBrNoUJo2v7a2iDu-iohH\/s728-e1000\/flaw.jpg\" title=\"vuln\u00e9rabilit\u00e9s\"\/><\/div>\n<p><em>La correction des vuln\u00e9rabilit\u00e9s indirectes fait partie de ces t\u00e2ches complexes, fastidieuses et franchement ennuyeuses auxquelles personne ne veut vraiment s&#8217;atteler.  Personne sauf pour <\/em><a rel=\"nofollow noopener\" href=\"https:\/\/debricked.com\" target=\"_blank\"><em>D\u00e9briqu\u00e9<\/em><\/a><em>, il semble.  Bien s\u00fbr, il existe de nombreuses fa\u00e7ons de le faire manuellement, mais peut-il \u00eatre fait automatiquement avec un risque minimal de rupture des modifications\u00a0?  L&#8217;\u00e9quipe Debricked a d\u00e9cid\u00e9 de le d\u00e9couvrir. <\/em><\/p>\n<h2>Une for\u00eat pleine d&#8217;arbres fragiles<\/h2>\n<p>Alors, par o\u00f9 commencer ?<\/p>\n<p>Premi\u00e8rement, il doit y avoir un moyen de corriger la vuln\u00e9rabilit\u00e9, ce qui, pour les d\u00e9pendances indirectes, n&#8217;est pas une promenade de sant\u00e9.  Deuxi\u00e8mement, cela doit \u00eatre fait de mani\u00e8re s\u00fbre ou sans rien casser. <\/p>\n<p>Vous voyez, les d\u00e9pendances indirectes sont introduites profond\u00e9ment dans l&#8217;arborescence des d\u00e9pendances et il est tr\u00e8s difficile d&#8217;obtenir la version exacte que vous souhaitez.  Comme l&#8217;a dit un jour le responsable de la R&#038;D de Debricked, &#8220;<em>Vous tournez les boutons en jouant avec vos d\u00e9pendances directes et en priant Torvalds pour que les bons paquets indirects soient r\u00e9solus.  Lorsque Torvalds est en votre faveur, vous devez sacrifier un peu de stockage cloud \u00e0 l&#8217;oncle Bob pour vous assurer que les mises \u00e0 jour ne cassent pas votre application<\/em>.&#8221;<\/p>\n<p>En d&#8217;autres termes, il devrait vraiment y avoir un moyen plus simple et moins stressant de le faire. <\/p>\n<p>Dans cet article, nous vous expliquerons comment r\u00e9soudre manuellement les vuln\u00e9rabilit\u00e9s transitives et, vers la fin, nous vous montrerons la solution Debricked, qui vous permet de le faire automatiquement. <em>Si vous \u00eates vraiment int\u00e9ress\u00e9 par la solution, je vous sugg\u00e8re de commencer \u00e0 faire d\u00e9filer<\/em>. <\/p>\n<h3>Chirurgie de pr\u00e9cision sur votre arbre de d\u00e9pendance<\/h3>\n<p>Au cours de la phase de recherche du <a rel=\"nofollow noopener\" href=\"https:\/\/www.linkedin.com\/pulse\/how-neo4js-graph-database-can-remediate-vulnerabilities-debricked\/?trackingId=YMO013JqHRrXwtRsIGJuTw%3D%3D\" target=\"_blank\">projet de base de donn\u00e9es graphique<\/a>ou comment Debricked corrige aujourd&#8217;hui vos vuln\u00e9rabilit\u00e9s open source \u00e0 la vitesse de la lumi\u00e8re, l&#8217;\u00e9quipe est tomb\u00e9e sur <a rel=\"nofollow noopener\" href=\"https:\/\/itnext.io\/fixing-security-vulnerabilities-in-npm-dependencies-in-less-than-3-mins-a53af735261d\" target=\"_blank\">quelques articles<\/a> expliquant comment corriger les vuln\u00e9rabilit\u00e9s indirectes dans NPM. <\/p>\n<p>Comme indiqu\u00e9 dans l&#8217;article, le package &#8220;minimist&#8221; est affect\u00e9 par des vuln\u00e9rabilit\u00e9s, \u00e0 savoir <a rel=\"nofollow noopener\" href=\"https:\/\/debricked.com\/vulnerability-database\/vulnerability\/CVE-2021-44906\" target=\"_blank\">CVE-2021-44906<\/a> et <a rel=\"nofollow noopener\" href=\"https:\/\/debricked.com\/vulnerability-database\/vulnerability\/CVE-2020-7598\" target=\"_blank\">CVE-2020-7598<\/a>. <\/p>\n<p>Il s&#8217;agit de deux vuln\u00e9rabilit\u00e9s &#8220;Pollution prototype&#8221;, ce qui signifie que les arguments ne sont pas correctement filtr\u00e9s.  Heureusement, les responsables de `minimist` ont corrig\u00e9 ces vuln\u00e9rabilit\u00e9s dans la version 1.2.6. <\/p>\n<div class=\"separator\" style=\"clear: both;\"><img decoding=\"async\" alt=\"\" border=\"0\" data-original-height=\"477\" data-original-width=\"728\" src=\"https:\/\/thehackernews.com\/new-images\/img\/b\/R29vZ2xl\/AVvXsEhWtQmpvlQeajV8VyqQE1qBQDOSla435mEqZCkcb7TBeKTfyCfxD7-e9oHt1TyD0dSZ620a3lWsPodunNqhviT52NxYMVhRCXI1br8mL0fIvxy9EXmJY603umwMbwlI01PmE_GovRDoDCmrv9-2REVxq5LmmD0dTMto-hyoHiwL4A77BLoBkO33LI5Y\/s728-e100\/3.jpg\"\/><\/div>\n<p>Malheureusement, la version 7.1.0 de `mocha` r\u00e9sout `minimist` 0.0.8, qui se situe dans la plage vuln\u00e9rable de ces vuln\u00e9rabilit\u00e9s.  Comme l&#8217;a sugg\u00e9r\u00e9 l&#8217;auteur de <a rel=\"nofollow noopener\" href=\"https:\/\/itnext.io\/fixing-security-vulnerabilities-in-npm-dependencies-in-less-than-3-mins-a53af735261d\" target=\"_blank\">Cet article<\/a>ces vuln\u00e9rabilit\u00e9s peuvent \u00eatre corrig\u00e9es de diff\u00e9rentes mani\u00e8res. <\/p>\n<div class=\"separator\" style=\"clear: both;\"><img decoding=\"async\" alt=\"\" border=\"0\" data-original-height=\"282\" data-original-width=\"728\" src=\"https:\/\/teknomers.com\/fr\/wp-content\/uploads\/2022\/07\/Resoudre-lenigme-des-vulnerabilites-indirectes-corriger-les-vulnerabilites-indirectes.png\"\/><\/div>\n<h3>Mais!  Qu&#8217;en est-il des modifications avec rupture\u00a0?<\/h3>\n<p>La premi\u00e8re suggestion est de simplement d\u00e9clencher une mise \u00e0 jour de toutes les &#8220;d\u00e9pendances indirectes&#8221;, ce qui signifie que nous ne changerons pas r\u00e9ellement la version de `mocha`.  Pour effectuer cette mise \u00e0 jour, ex\u00e9cutez simplement `npm update`, supprimez votre fichier `npm.lock` et ex\u00e9cutez `npm install`.  Cela r\u00e9g\u00e9n\u00e8re l&#8217;arborescence des d\u00e9pendances avec la derni\u00e8re version possible (selon les contraintes) de vos d\u00e9pendances indirectes.  Avec cette m\u00e9thode, le risque de casser les changements est tr\u00e8s faible car vous ne mettez \u00e0 jour aucune de vos d\u00e9pendances racine, seulement vos d\u00e9pendances indirectes. <\/p>\n<p>Des modifications avec rupture se produisent lorsque la fonctionnalit\u00e9 ou l&#8217;interface du package n&#8217;est pas compatible avec les versions ult\u00e9rieures, ce qui signifie qu&#8217;une mise \u00e0 jour du package peut entra\u00eener la rupture de votre application.  Les changements de rupture courants sont la suppression de classe\/fonction, le changement d&#8217;arguments d&#8217;une fonction ou le changement de licence (attention \u00e0 celui-l\u00e0 !). <\/p>\n<p>Mais la vie n&#8217;est pas toujours aussi facile, et cette simple mise \u00e0 jour de l&#8217;arbre ne r\u00e9soudra pas la vuln\u00e9rabilit\u00e9.  Le probl\u00e8me est que `mkdirp` <a rel=\"nofollow noopener\" href=\"https:\/\/github.com\/isaacs\/node-mkdirp\/blob\/0.5.1\/package.json\" target=\"_blank\">a en fait verrouill\u00e9 sa version de `minimist` \u00e0 0.0.8<\/a>.  Cela signifie que les contributeurs de `mkdirp` sont arriv\u00e9s \u00e0 la conclusion qu&#8217;ils ne sont pas compatibles avec les nouvelles versions de `minimist`, et forcer la mise \u00e0 jour de `minimist` peut introduire des changements de rupture entre `mkdirp` et `minimist`. <\/p>\n<h2>Pensez\u2026 aux graphiques ! <\/h2>\n<p>Donc, la question \u00e0 un million de dollars est\u00a0: quelle version de \u00ab\u00a0moka\u00a0\u00bb doit \u00eatre utilis\u00e9e, qui \u00e0 son tour se transforme en une version s\u00fbre de \u00ab\u00a0minimist\u00a0\u00bb sans casser l&#8217;arbre de d\u00e9pendance\u00a0?  Il s&#8217;agit en fait d&#8217;un probl\u00e8me de graphe, qui a \u00e9t\u00e9 d\u00e9crit dans <a rel=\"nofollow noopener\" href=\"https:\/\/www.linkedin.com\/pulse\/how-neo4js-graph-database-can-remediate-vulnerabilities-debricked\/?trackingId=YMO013JqHRrXwtRsIGJuTw%3D%3D\" target=\"_blank\">Cet article<\/a>. <\/p>\n<p>Quel algorithme de graphe r\u00e9soudrait ce probl\u00e8me\u00a0?  La fa\u00e7on dont NPM r\u00e9sout les d\u00e9pendances peut \u00eatre un peu compliqu\u00e9e, car ils sont autoris\u00e9s \u00e0 &#8220;diviser&#8221; l&#8217;arborescence des d\u00e9pendances.  Cela signifie qu&#8217;ils peuvent avoir plusieurs versions d&#8217;une d\u00e9pendance pour s&#8217;assurer que nous avons toujours un arbre compatible.  Pour r\u00e9soudre la vuln\u00e9rabilit\u00e9, nous devons nous assurer que toutes les instances de `minimist` sont s\u00fbres en mettant \u00e0 jour toutes les racines qui peuvent se r\u00e9percuter sur `minimist`. <\/p>\n<p>L&#8217;algorithme utilis\u00e9 pour r\u00e9soudre ce probl\u00e8me s&#8217;appelle &#8220;All Max Paths Safe&#8221;.  En parcourant le graphique des d\u00e9pendances et en conservant le nombre maximal de versions, tout en supprimant toutes les autres versions de ce package \u00e0 chaque intersection, nous pouvons cr\u00e9er une repr\u00e9sentation approximative de notre arbre de d\u00e9pendances.  Si l&#8217;approximation est s\u00fbre, cela signifie que notre arbre r\u00e9el sera \u00e9galement s\u00fbr ! <\/p>\n<p>En ex\u00e9cutant cet algorithme pour toutes les versions potentielles de `mocha`, nous trouvons la plus petite mise \u00e0 jour pour corriger cette vuln\u00e9rabilit\u00e9.  Pour obtenir la vitesse que nous voulions pour cet algorithme, l&#8217;\u00e9quipe a d\u00fb cr\u00e9er un <a rel=\"nofollow noopener\" href=\"https:\/\/neo4j.com\/docs\/java-reference\/current\/extending-neo4j\/procedures\/#:~:text=A%20user%2Ddefined%20procedure%20is,the%20database%2C%20and%20return%20results.\" target=\"_blank\">Proc\u00e9dure Neo4j<\/a>, qui peut g\u00e9rer la recherche de plus de 100 versions root avec une profondeur de recherche de 30+ en ~150 millisecondes.  Rapide, hein ?<\/p>\n<p>Dans ce cas, nous n&#8217;avons pas besoin de chercher tr\u00e8s loin\u2026 car la version 7.1.1 de `mocha` est s\u00fbre\u00a0!  Il ne s&#8217;agit que d&#8217;une mise \u00e0 jour de correctif, ce qui indique que le risque de casser les modifications est tr\u00e8s faible.  Pour les cas moins complexes (comme cet exemple), &#8216;npm audit&#8217; peut vous aider avec sa fantastique commande &#8216;npm audit fix&#8217;. <\/p>\n<h2>Ne soyez pas ad hoc, entrez dans la fa\u00e7on de travailler pub-sous-humaine\u00a0! <\/h2>\n<p>Maintenant, si vous \u00eates arriv\u00e9 jusqu&#8217;ici (f\u00e9licitations, tr\u00e8s impressionnant) et que vous pensez, &#8220;cela semble vraiment complexe et repr\u00e9sente \u00e9norm\u00e9ment de travail&#8221;, ne vous inqui\u00e9tez pas &#8211; vous n&#8217;\u00eates pas le seul.  Heureusement, tout cela se produit de mani\u00e8re enti\u00e8rement automatique dans l&#8217;outil Debricked lorsque vous cliquez sur ce petit bouton\u00a0:<\/p>\n<div class=\"separator\" style=\"clear: both;\"><img decoding=\"async\" alt=\"\" border=\"0\" data-original-height=\"258\" data-original-width=\"728\" src=\"https:\/\/teknomers.com\/fr\/wp-content\/uploads\/2022\/07\/Resoudre-lenigme-des-vulnerabilites-indirectes-corriger-les-vulnerabilites-indirectes.jpg\"\/><\/div>\n<p>\u00c0 partir de maintenant, ceci est disponible pour Javascript.  Bient\u00f4t, le support sera \u00e9tendu \u00e0 Java, Golang, C#, Python et PHP. <\/p>\n<p>Si vous n&#8217;\u00eates pas encore un <a rel=\"nofollow noopener\" href=\"https:\/\/debricked.com\" target=\"_blank\">D\u00e9briqu\u00e9<\/a> utilisateur, qu&#8217;attendez-vous\u00a0?  C&#8217;est gratuit pour les d\u00e9veloppeurs individuels, les petites \u00e9quipes et les projets open source (et si vous \u00eates une grande organisation, n&#8217;ayez crainte. Il y a un essai gratuit g\u00e9n\u00e9reux). <a rel=\"nofollow noopener\" href=\"https:\/\/debricked.com\/app\/en\/register\" target=\"_blank\">Inscrivez-vous gratuitement ici<\/a>.<\/p>\n<p><\/p>\n<\/div>\n<p><br \/>\n<br \/><a href=\"https:\/\/thehackernews.com\/2022\/07\/solving-indirect-vulnerability-enigma.html\" rel=\"nofollow noopener\" target=\"_blank\">ttn-fr-57<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>La correction des vuln\u00e9rabilit\u00e9s indirectes fait partie de ces t\u00e2ches complexes, fastidieuses et franchement ennuyeuses auxquelles personne ne veut vraiment s&#8217;atteler. Personne sauf pour D\u00e9briqu\u00e9, il semble. Bien s\u00fbr, il existe de nombreuses fa\u00e7ons de le faire manuellement, mais peut-il \u00eatre fait automatiquement avec un risque minimal de rupture des modifications\u00a0? L&#8217;\u00e9quipe Debricked a d\u00e9cid\u00e9 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[9558,21152,4168,25646,4158,4165,4161,5572,133,84968,4157,4159,4171,4170,79726,65,4167,4160,4163,4162,11982,1181,4172,4169,4166,877,4164,12365],"class_list":["post-233399","post","type-post","status-publish","format-standard","hentry","category-technologie","tag-arbre","tag-casser","tag-comment-pirater","tag-corriger","tag-cyber-actualites","tag-cyber-attaques","tag-cyber-mises-a-jour","tag-dependance","tag-des","tag-indirectes","tag-lactualite-de-la-cybersecurite","tag-lactualite-de-la-cybersecurite-aujourdhui","tag-lactualite-des-hackers","tag-la-securite-des-informations","tag-lenigme","tag-les","tag-logiciel-malveillant-de-ransomware","tag-mises-a-jour-de-la-cybersecurite","tag-nouvelles-de-piratage","tag-nouvelles-de-pirates","tag-resoudre","tag-sans","tag-securite-informatique","tag-securite-internet","tag-violation-de-donnees","tag-votre","tag-vulnerabilite-logicielle","tag-vulnerabilites"],"_links":{"self":[{"href":"https:\/\/teknomers.com\/fr\/wp-json\/wp\/v2\/posts\/233399","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/teknomers.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/teknomers.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/teknomers.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/teknomers.com\/fr\/wp-json\/wp\/v2\/comments?post=233399"}],"version-history":[{"count":0,"href":"https:\/\/teknomers.com\/fr\/wp-json\/wp\/v2\/posts\/233399\/revisions"}],"wp:attachment":[{"href":"https:\/\/teknomers.com\/fr\/wp-json\/wp\/v2\/media?parent=233399"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/teknomers.com\/fr\/wp-json\/wp\/v2\/categories?post=233399"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/teknomers.com\/fr\/wp-json\/wp\/v2\/tags?post=233399"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}