{"id":238917,"date":"2022-07-01T11:09:51","date_gmt":"2022-07-01T11:09:51","guid":{"rendered":"https:\/\/teknomers.com\/es\/resolviendo-el-enigma-de-la-vulnerabilidad-indirecta-corrigiendo-las-vulnerabilidades-indirectas-sin-romper-su-arbol-de-dependencia\/"},"modified":"2022-07-01T11:09:51","modified_gmt":"2022-07-01T11:09:51","slug":"resolviendo-el-enigma-de-la-vulnerabilidad-indirecta-corrigiendo-las-vulnerabilidades-indirectas-sin-romper-su-arbol-de-dependencia","status":"publish","type":"post","link":"https:\/\/teknomers.com\/es\/resolviendo-el-enigma-de-la-vulnerabilidad-indirecta-corrigiendo-las-vulnerabilidades-indirectas-sin-romper-su-arbol-de-dependencia\/","title":{"rendered":"Resolviendo el enigma de la vulnerabilidad indirecta: corrigiendo las vulnerabilidades indirectas sin romper su \u00e1rbol de dependencia"},"content":{"rendered":"<p> <br \/>\n<\/p>\n<div id=\"articlebody\">\n<div class=\"separator\" style=\"clear: both;\"><img decoding=\"async\" alt=\"vulnerabilidades\" 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=\"vulnerabilidades\"\/><\/div>\n<p><em>La reparaci\u00f3n de vulnerabilidades indirectas es una de esas tareas complejas, tediosas y, francamente, aburridas que nadie quiere tocar.  Nadie excepto por <\/em><a rel=\"nofollow noopener\" href=\"https:\/\/debricked.com\" target=\"_blank\"><em>desmantelado<\/em><\/a><em>, parece.  Claro, hay muchas formas de hacerlo manualmente, pero \u00bfse puede hacer autom\u00e1ticamente con un riesgo m\u00ednimo de romper los cambios?  El equipo Debricked decidi\u00f3 averiguarlo. <\/em><\/p>\n<h2>Un bosque lleno de \u00e1rboles fr\u00e1giles<\/h2>\n<p>Entonces, \u00bfpor d\u00f3nde empiezas?<\/p>\n<p>En primer lugar, debe haber una forma de solucionar la vulnerabilidad, que, para las dependencias indirectas, no es un paseo por el parque.  En segundo lugar, debe hacerse de manera segura o sin que se rompa nada. <\/p>\n<p>Ver\u00e1, las dependencias indirectas se introducen en lo m\u00e1s profundo del \u00e1rbol de dependencias y es muy complicado llegar a la versi\u00f3n exacta que desea.  Como dijo una vez el director de I+D de Debricked, &#8220;<em>Est\u00e1 girando las perillas jugando con sus dependencias directas y rezando a Torvalds para que se resuelvan los paquetes indirectos correctos.  Cuando Torvalds est\u00e1 a tu favor, tienes que sacrificar algo de almacenamiento en la nube al t\u00edo Bob para asegurarte de que las actualizaciones no rompan tu aplicaci\u00f3n.<\/em>.&#8221;<\/p>\n<p>En otras palabras, realmente deber\u00eda haber una manera m\u00e1s f\u00e1cil y menos estresante de hacerlo. <\/p>\n<p>En este art\u00edculo, lo guiaremos a trav\u00e9s de c\u00f3mo la resoluci\u00f3n de vulnerabilidades transitivas se puede hacer manualmente y, hacia el final, le mostraremos la soluci\u00f3n Debricked, que le permite hacerlo autom\u00e1ticamente. <em>Si realmente solo est\u00e1 interesado en la soluci\u00f3n, le sugiero que comience a desplazarse<\/em>. <\/p>\n<h3>Cirug\u00eda de precisi\u00f3n en tu \u00e1rbol de dependencia<\/h3>\n<p>Durante la fase de investigaci\u00f3n del <a rel=\"nofollow noopener\" href=\"https:\/\/www.linkedin.com\/pulse\/how-neo4js-graph-database-can-remediate-vulnerabilities-debricked\/?trackingId=YMO013JqHRrXwtRsIGJuTw%3D%3D\" target=\"_blank\">proyecto de base de datos de grafos<\/a>o, c\u00f3mo Debricked corrige hoy sus vulnerabilidades de c\u00f3digo abierto a la velocidad de la luz, el equipo descubri\u00f3 <a rel=\"nofollow noopener\" href=\"https:\/\/itnext.io\/fixing-security-vulnerabilities-in-npm-dependencies-in-less-than-3-mins-a53af735261d\" target=\"_blank\">algunos art\u00edculos<\/a> explicando c\u00f3mo solucionar vulnerabilidades indirectas en NPM. <\/p>\n<p>Como se indica en el art\u00edculo, el paquete &#8220;minimista&#8221; se ve afectado por vulnerabilidades, a saber <a rel=\"nofollow noopener\" href=\"https:\/\/debricked.com\/vulnerability-database\/vulnerability\/CVE-2021-44906\" target=\"_blank\">CVE-2021-44906<\/a> y <a rel=\"nofollow noopener\" href=\"https:\/\/debricked.com\/vulnerability-database\/vulnerability\/CVE-2020-7598\" target=\"_blank\">CVE-2020-7598<\/a>. <\/p>\n<p>Ambas son vulnerabilidades de &#8220;contaminaci\u00f3n de prototipos&#8221;, lo que significa que los argumentos no se desinfectan adecuadamente.  Afortunadamente, los mantenedores de `minimist` corrigieron estas vulnerabilidades en la versi\u00f3n 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:\/\/teknomers.com\/es\/wp-content\/uploads\/2022\/07\/Resolviendo-el-enigma-de-la-vulnerabilidad-indirecta-corrigiendo-las-vulnerabilidades.jpg\"\/><\/div>\n<p>Desafortunadamente, `mocha` versi\u00f3n 7.1.0 resuelve `minimist` 0.0.8, que est\u00e1 dentro del rango vulnerable de estas vulnerabilidades.  Como sugiere el autor de <a rel=\"nofollow noopener\" href=\"https:\/\/itnext.io\/fixing-security-vulnerabilities-in-npm-dependencies-in-less-than-3-mins-a53af735261d\" target=\"_blank\">Este art\u00edculo<\/a>estas vulnerabilidades se pueden corregir de diferentes maneras. <\/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\/es\/wp-content\/uploads\/2022\/07\/Resolviendo-el-enigma-de-la-vulnerabilidad-indirecta-corrigiendo-las-vulnerabilidades.png\"\/><\/div>\n<h3>\u00a1Pero!  \u00bfQu\u00e9 pasa con los cambios de ruptura?<\/h3>\n<p>La primera sugerencia es simplemente desencadenar una actualizaci\u00f3n de todas las &#8220;dependencias indirectas&#8221;, lo que significa que en realidad no cambiaremos la versi\u00f3n de `mocha`.  Para realizar esta actualizaci\u00f3n, simplemente ejecute `npm update`, elimine su archivo `npm.lock` y ejecute `npm install`.  Esto regenera el \u00e1rbol de dependencias con la \u00faltima versi\u00f3n posible (seg\u00fan las restricciones) de sus dependencias indirectas.  Con este m\u00e9todo, el riesgo de interrumpir los cambios es muy bajo, ya que en realidad no actualiza ninguna de sus dependencias ra\u00edz, solo las indirectas. <\/p>\n<p>Los cambios importantes ocurren cuando la funcionalidad o la interfaz del paquete no es compatible con versiones anteriores, lo que significa que una actualizaci\u00f3n del paquete podr\u00eda causar que su aplicaci\u00f3n se rompa.  Los cambios de \u00faltima hora comunes son la eliminaci\u00f3n de clase\/funci\u00f3n, el cambio de argumentos a una funci\u00f3n o el cambio de licencia (\u00a1cuidado con eso!). <\/p>\n<p>Pero la vida no siempre es tan f\u00e1cil, y esta simple actualizaci\u00f3n del \u00e1rbol no resolver\u00e1 la vulnerabilidad.  El problema es que `mkdirp` <a rel=\"nofollow noopener\" href=\"https:\/\/github.com\/isaacs\/node-mkdirp\/blob\/0.5.1\/package.json\" target=\"_blank\">ha bloqueado su versi\u00f3n de `minimist` a 0.0.8<\/a>.  Esto significa que los contribuyentes de `mkdirp` llegaron a la conclusi\u00f3n de que no son compatibles con las versiones m\u00e1s nuevas de `minimist`, y forzar la actualizaci\u00f3n de `minimist` puede introducir cambios importantes entre `mkdirp` y `minimist`. <\/p>\n<h2>Piensa\u2026 \u00a1gr\u00e1ficos! <\/h2>\n<p>Entonces, la pregunta del mill\u00f3n es: \u00bfqu\u00e9 versi\u00f3n de `mocha` se debe usar, que a su vez se convierte en una versi\u00f3n segura de `minimist` sin romper el \u00e1rbol de dependencias?  Esto es en realidad un problema gr\u00e1fico, que se ha descrito en <a rel=\"nofollow noopener\" href=\"https:\/\/www.linkedin.com\/pulse\/how-neo4js-graph-database-can-remediate-vulnerabilities-debricked\/?trackingId=YMO013JqHRrXwtRsIGJuTw%3D%3D\" target=\"_blank\">Este art\u00edculo<\/a>. <\/p>\n<p>\u00bfQu\u00e9 algoritmo gr\u00e1fico resolver\u00eda este problema?  La forma en que NPM resuelve las dependencias puede ser un poco complicada, ya que se les permite &#8220;dividir&#8221; el \u00e1rbol de dependencias.  Esto significa que pueden tener m\u00faltiples versiones de una dependencia para asegurarse de que siempre tengamos un \u00e1rbol que sea compatible.  Para resolver la vulnerabilidad, debemos asegurarnos de que todas las instancias de `minimist` sean seguras actualizando todas las ra\u00edces que pueden filtrarse a `minimist`. <\/p>\n<p>El algoritmo utilizado para resolver este problema se llama &#8220;All Max Paths Safe&#8221;.  Recorriendo el gr\u00e1fico de dependencias y manteniendo las versiones m\u00e1ximas, mientras eliminamos todas las dem\u00e1s versiones de ese paquete en cada intersecci\u00f3n, podemos crear una representaci\u00f3n aproximada de nuestro \u00e1rbol de dependencias.  Si la aproximaci\u00f3n es segura, \u00a1eso significa que nuestro \u00e1rbol real tambi\u00e9n lo ser\u00e1! <\/p>\n<p>Al realizar este algoritmo para todas las versiones potenciales de `mocha`, encontramos la actualizaci\u00f3n m\u00e1s peque\u00f1a para corregir esta vulnerabilidad.  Para obtener la velocidad que quer\u00edamos para este algoritmo, el equipo tuvo que crear un algoritmo personalizado <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\">Procedimiento Neo4j<\/a>, que puede gestionar la b\u00fasqueda de m\u00e1s de 100 versiones ra\u00edz con una profundidad de b\u00fasqueda de m\u00e1s de 30 en ~150 milisegundos.  R\u00e1pido, \u00bfeh?<\/p>\n<p>En este caso, no tenemos que buscar muy lejos&#8230; \u00a1ya que 7.1.1 de `mocha` es seguro!  Esta es solo una actualizaci\u00f3n de parche, lo que indica que el riesgo de romper los cambios es muy bajo.  Para casos menos complejos (como este ejemplo), &#8216;npm audit&#8217; puede ayudarlo con su fant\u00e1stico comando &#8216;npm audit fix&#8217;. <\/p>\n<h2>\u00a1No sea ad-hoc, entre en la forma pub-sub-humana de trabajar! <\/h2>\n<p>Ahora, si llegaste hasta aqu\u00ed (felicidades, muy impresionante) y pensaste, &#8220;esto suena realmente complejo y requiere mucho trabajo&#8221;, no te preocupes, no eres el \u00fanico.  Por suerte, todo esto sucede de forma completamente autom\u00e1tica en la herramienta Debricked al hacer clic en este peque\u00f1o bot\u00f3n:<\/p>\n<div class=\"separator\" style=\"clear: both;\"><img decoding=\"async\" alt=\"\" border=\"0\" data-original-height=\"258\" data-original-width=\"728\" src=\"https:\/\/thehackernews.com\/new-images\/img\/b\/R29vZ2xl\/AVvXsEibI9-K1AMkP4jk6CTkPAq2HGwurV9FaWyMV8hrQx62pA2ZAEDWACSQJIoV6etiCuXSHaMgjh7TDMMTmaddAjoOkT5ujHRvuRyttc8bPrxh0Cmfghy6sIvawFhjrZSqOennFREaM3B9-T66gHav7S8LAz0vmBmygpRBH_5YwHNfAFi9wXrBR3tmwISZ\/s728-e100\/2.jpg\"\/><\/div>\n<p>A partir de ahora, esto est\u00e1 disponible para Javascript.  Pronto, el soporte se extender\u00e1 a Java, Golang, C#, Python y PHP. <\/p>\n<p>Si a\u00fan no eres un <a rel=\"nofollow noopener\" href=\"https:\/\/debricked.com\" target=\"_blank\">desmantelado<\/a> Usuario, \u00bfqu\u00e9 est\u00e1s esperando?  Es gratis para desarrolladores individuales, equipos m\u00e1s peque\u00f1os y proyectos de c\u00f3digo abierto (y si es una organizaci\u00f3n m\u00e1s grande, no se preocupe. Hay una prueba gratuita generosa). <a rel=\"nofollow noopener\" href=\"https:\/\/debricked.com\/app\/en\/register\" target=\"_blank\">Reg\u00edstrate gratis aqu\u00ed<\/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-es-57<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>La reparaci\u00f3n de vulnerabilidades indirectas es una de esas tareas complejas, tediosas y, francamente, aburridas que nadie quiere<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[4657,4656,5186,4661,4664,84932,5937,65180,4662,84931,84933,4668,246,4667,4654,4658,4659,4653,4655,4663,84930,432,4666,4665,1030,4014,4660,12260],"class_list":["post-238917","post","type-post","status-publish","format-standard","hentry","category-tecnologia","tag-actualizaciones-ciberneticas","tag-actualizaciones-de-seguridad-cibernetica","tag-arbol","tag-ataques-ciberneticos","tag-como-hackear","tag-corrigiendo","tag-dependencia","tag-enigma","tag-filtracion-de-datos","tag-indirecta","tag-indirectas","tag-la-seguridad-informatica","tag-las","tag-las-noticias-de-los-hackers","tag-noticias-ciberneticas","tag-noticias-de-hackers","tag-noticias-de-pirateria","tag-noticias-de-seguridad-cibernetica","tag-noticias-de-seguridad-cibernetica-hoy","tag-programa-malicioso-ransomware","tag-resolviendo","tag-romper","tag-seguridad-de-informacion","tag-seguridad-de-la-red","tag-sin","tag-vulnerabilidad","tag-vulnerabilidad-de-software","tag-vulnerabilidades"],"_links":{"self":[{"href":"https:\/\/teknomers.com\/es\/wp-json\/wp\/v2\/posts\/238917","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/teknomers.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/teknomers.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/teknomers.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/teknomers.com\/es\/wp-json\/wp\/v2\/comments?post=238917"}],"version-history":[{"count":0,"href":"https:\/\/teknomers.com\/es\/wp-json\/wp\/v2\/posts\/238917\/revisions"}],"wp:attachment":[{"href":"https:\/\/teknomers.com\/es\/wp-json\/wp\/v2\/media?parent=238917"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/teknomers.com\/es\/wp-json\/wp\/v2\/categories?post=238917"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/teknomers.com\/es\/wp-json\/wp\/v2\/tags?post=238917"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}