Controles de seguridad en la cadena de suministro de JavaScript

This ad is not shown to multipass and full ticket holders
React Summit US
React Summit US 2025
November 18 - 21, 2025
New York, US & Online
The biggest React conference in the US
Learn More
In partnership with Focus Reactive
Upcoming event
React Summit US 2025
React Summit US 2025
November 18 - 21, 2025. New York, US & Online
Learn more
Bookmark
Rate this content

La omnipresencia del software de código abierto y la baja barrera de entrada en npmjs están sirviendo como catalizador para los incidentes de seguridad en la cadena de suministro que están impactando continuamente a los desarrolladores de JavaScript. ¿Qué podemos hacer para protegernos?

This talk has been presented at JSNation 2022, check out the latest edition of this JavaScript Conference.

FAQ

Los desarrolladores desempeñan un papel clave en la seguridad del ecosistema de JavaScript, ya que están involucrados en todo el proceso de construcción de software, desde la elección de dependencias hasta la implementación de medidas de seguridad.

La seguridad de la cadena de suministro en el código abierto se refiere a la protección de los software y paquetes frente a la inserción de código malicioso en cualquier punto del proceso de desarrollo, desde el control de código fuente hasta la compilación y distribución.

Ken Thompson demostró cómo la confianza puede ser explotada en la tecnología mediante su famoso experimento en el que agregó una puerta trasera en el compilador de Unix, lo que revela la importancia de verificar todas las etapas del proceso de compilación.

La instalación de un paquete promedio de npm involucra confiar en aproximadamente 79 dependencias de terceros, lo que subraya la complejidad y los riesgos de seguridad asociados.

Se puede mejorar la seguridad utilizando herramientas que analizan y aplican políticas específicas sobre los archivos de bloqueo, como evitar fuentes no seguras y revisar cuidadosamente todas las contribuciones, especialmente las relacionadas con cambios en archivos de bloqueo.

Es crucial no permitir ni recibir contribuciones a los archivos de bloqueo sin una revisión exhaustiva, ya que estos archivos pueden ser manipulados para introducir código malicioso sin ser detectado fácilmente.

Un ataque de confusión de dependencias ocurre cuando se suplantan paquetes privados con otros maliciosos en registros públicos. Se puede prevenir asegurando una configuración adecuada de los registros de paquetes y utilizando herramientas de seguridad que monitorean las dependencias.

Liran Tal
Liran Tal
28 min
16 Jun, 2022

Comments

Sign in or register to post your comment.
Video Summary and Transcription
Esta charla analiza los desafíos de seguridad en el ecosistema de JavaScript, incluida la seguridad en la cadena de suministro, la manipulación de archivos de bloqueo y la ejecución arbitraria de comandos. Destaca los riesgos de las actualizaciones ciegas y los comentarios ocultos en el código. La charla también aborda los ataques de confusión de dependencias y la importancia de establecer un modelo de amenazas para las aplicaciones de Node.

1. Introducción a la seguridad del ecosistema de JavaScript

Short description:

Gracias por acompañarme hoy. Soy Yaron Tal, un defensor del desarrollo en Snyk. Compartiré historias del mundo real sobre el papel de los desarrolladores en el ecosistema de seguridad y el estado de la seguridad en el ecosistema de JavaScript. Cuando haces un npm install, es normal sentir preocupación. Proporcionaré controles de seguridad para mitigar los riesgos. Instalar un paquete promedio de npm implica confiar en numerosos mantenedores y dependencias. Esta preocupación no es nueva y se ha discutido durante décadas, como se demuestra en el ensayo de Ken Thompson sobre la confianza en la confianza.

Y ahora... Bueno, gracias a todos por acompañarme hoy. Mi nombre es Yaron Tal y soy un defensor del desarrollo en Snyk. Voy a hablar sobre varias historias que ocurren en el ecosistema de JavaScript, en el cual estoy involucrado en varias partes a través de mi trabajo en Snyk, tratando de ayudar a los desarrolladores, a ti y a mí, a todos nosotros, a construir software seguro, enviarlo, ya sea en tu CI o IDE o lo que sea.

Es una forma realmente genial de interactuar y comprometer a los desarrolladores. Pero a través de ese trabajo, también hago muchas cosas con una comunidad, que es a través del proyecto de seguridad de OS, o tal vez a través de cosas como la seguridad de la fundación de Node, triaje de vulnerabilidades y mucho trabajo en torno al código abierto. Y eso me ayuda a tener una imagen clara de lo que está sucediendo, hacia dónde van las cosas.

Entonces, dicho esto, hoy me gustaría compartir con ustedes algunas historias del mundo real y contarles cómo los desarrolladores como ustedes desempeñan un papel fundamental y clave en el ecosistema de seguridad e incluso en los incidentes de seguridad que han ocurrido recientemente. También, cuál es el estado actual de la seguridad y la seguridad de la cadena de suministro en el código abierto y el ecosistema de JavaScript.

Ahora, me doy cuenta de que esto probablemente todos lo relacionan de una manera muy emocional, ¿verdad, cuando haces un npm install? ¿Sí? Así que estoy aquí para decirles que está bien. Estás sintiendo algo que todos nosotros sentimos antes de hacer un npm install, y esta charla en su conjunto básicamente tratará sobre por qué te sientes así, pero también te dará algunas medidas preventivas, algunos controles de seguridad que puedes tener y agregar mañana en tu equipo para poder mitigar los riesgos en torno a las cosas que suceden allí.

Así que ese sentimiento que tienes, si puedes relacionarte con eso, se basa en una investigación científica fundamental. Uno de esos casos hace un par de años nos mostró cómo cuando instalamos el paquete promedio de npm, depositamos mucha confianza en los mantenedores y las dependencias de terceros que estamos trayendo. Al instalar el paquete promedio de npm, probablemente estás confiando en alrededor de 79 dependencias de terceros y 39 mantenedores. Eso es mucho. Eso significa que probablemente habrá mucho ruido y potencialmente dolor para tal vez también remediar algunas de estas cosas. Pero esta es la verdad de las cosas.

Y también estoy aquí para decirles que esta no es una preocupación nueva. De hecho, todo este asunto de dónde depositamos nuestra confianza como desarrolladores y cuánto debemos confiar, qué debemos confiar exactamente, es algo de lo que se ha hablado hace casi 40 años. Esta persona llamada Ken Thompson, es un desarrollador galardonado con el premio Turing, y en realidad fue a crear este ensayo llamado Reflexiones sobre la confianza en la confianza. Recomiendo encarecidamente leerlo, pero solo te daré la idea de lo que realmente significa.

Esta persona se fue y dijo: quiero mostrarte lo que significa confiar en las personas. Y luego agregó una puerta trasera al programa de inicio de sesión de Unix. Pero, por supuesto, la gente revisa el código, ¿verdad? En el código abierto. Entonces, continuó esta cadena agregando la puerta trasera al compilador que luego compila el programa de inicio de sesión y luego lo inyectará. Pero bueno, la gente también revisa el código del compilador. Bueno, ¿cómo se compilan los compiladores? Necesitas un punto de entrada para empezar. Y así que en realidad fue y agregó esa puerta trasera.

2. Información sobre Open Source y la seguridad de la cadena de suministro

Short description:

Eso es algo que Rojan quería mostrarnos como un experimento de cómo funciona esto. Lo agregó al compilador que luego compila el programa de inicio de sesión de Unix. Revela por qué la confianza es importante y cuánto más debemos avanzar. El Open Source es genial y usarlo es una herramienta de productividad. Necesitamos entender el regalo del Open Source y la historia de la seguridad de la cadena de suministro. No se trata solo de las dependencias de NPM, sino también de todo el proceso de construcción de software y los puntos de integración.

Eso es algo que Rojan quería mostrarnos como un experimento de cómo funciona esto. Lo agregó al compilador que luego compila el programa de inicio de sesión de Unix. Entonces, si revisas el programa de inicio de sesión de Unix y si revisas el compilador, en ese punto ya no lo verás. Porque aún necesitas un compilador binario para luego compilar todo eso. Y ahí es donde ocurren las cosas. Ahí es donde se inserta la puerta trasera.

Una visión muy interesante que revela cómo el software tiene características y cómo las transmite a otros programas específicos de los que se genera. Así que recomiendo encarecidamente leer esto. Pero nos muestra por qué la confianza es importante y cuánto más debemos avanzar para depositar esa confianza en algún lugar.

Aún así, el Open Source es genial. Y no podemos negar el hecho de que para construir software hoy en día, necesitamos usar software de Open Source, incluso cuando tal vez el programa que construimos no sea Open Source en sí mismo, tal vez la mitad de él o lo que sea. Pero esa es un poco la realidad. Y por supuesto, ¿por qué no? ¿Por qué no usar software de Open Source, verdad? Porque en realidad lo que realmente queremos no es reinventar la rueda. Queremos usar el trabajo que han hecho personas geniales, y luego podemos tomar ese trabajo y usarlo para practicar. Y esta es una gran herramienta de productividad.

Así que a estas alturas, estoy bastante seguro de que estamos alcanzando esa marca de dos millones en NPM. No sé. Es asombroso para nosotros, para todos ustedes aquí, ayudándonos a promover el software de Open Source. Pero al mismo tiempo, debemos entender y reconocer este regalo que se nos ha dado, que el Open Source ha sido dado al mundo, y lo que realmente significa. Entonces, todos esos paquetes, son esencialmente el suministro. Esto es parte de la historia de la seguridad de la cadena de suministro. Y es relativamente fácil pensar para nosotros que todas esas seguridades de la cadena de suministro pueden ser dependencias de NPM. Pero en realidad no es solo eso. De hecho, si retrocedemos hasta los conceptos básicos de cómo se construye el software, podemos ver que tenemos varios puntos de conexión a lo largo del camino. Entonces, eres un desarrollador, estás construyendo algo, tal vez lo estás subiendo a GitHub. Esa es básicamente tu control de origen, luego se desencadena una compilación, luego hay alguna salida de eso. Tal vez eso es esencialmente un paquete o tal vez se está lanzando a algún CDN o lo que sea. Y estás usando algún software de Open Source a través del proceso de compilación. Entonces, todo eso es básicamente cómo estamos construyendo software. Pero aquí están los puntos de integración de lo que la seguridad de la cadena de suministro significa en el nivel más básico.

3. Seguridad de la cadena de suministro y manipulación de archivos de bloqueo

Short description:

Los desarrolladores están siendo objetivo de vehículos de distribución de malware y ataques dirigidos para robar tokens. Instalar un paquete de NPM puede ser arriesgado. Discutamos medidas preventivas, comenzando con la manipulación de archivos de bloqueo. En 2019, revelé posibles problemas de seguridad con los archivos de bloqueo. Una solicitud de extracción puede incluir un troyano oculto en el package.json y el archivo de bloqueo. El archivo de bloqueo de yarn a menudo se ignora, pero representa una amenaza.

Esencialmente, cualquiera de estos puntos de intersección puede insertar código malicioso, como hemos visto. Por ejemplo, el compromiso hipócrita de Linux que ha estado ocurriendo, creo que fue el año pasado con un incidente de una universidad que lo había insertado para hacer el punto de, ya sabes, Ken Thompson, si quieres relacionarlo con eso. Y comprometer el control de origen es algo que está sucediendo. Por ejemplo, el control de código fuente de PHP no se gestionaba en GitHub y alguien pudo acceder a los servidores Git de PHP y potencialmente modificar el código. Eso son millones de servidores que se ejecutan en Internet y obteniendo, ya sabes, las puertas traseras o los troyanos de eso. Y hay más y más, alguien puede modificar nuestro código, su compilación podría estar comprometida, tal vez no estamos, ya sabes, construyendo esas acciones de GitHub correctamente con las mejores prácticas. Tal vez estás usando una dependencia defectuosa como hemos visto con EventStream. Tal vez, el resultado real de lo que construyes, lo que tus consumidores realmente obtienen, en realidad no pasa por los procesos formales de CI/CD, lo cual es una historia de seguridad muy relacionada para nosotros en el ecosistema porque CodeCup fue parte de este problema donde el binario fue cambiado detrás de escena. Todo esto es cómo se está construyendo el software hoy en día y esta es toda la historia de seguridad de la cadena de suministro. El paquete de NPM es parte de ello, pero no es todo. Aún así, creo que estamos viendo que los desarrolladores están siendo objetivo en este momento y desde hace algunos años, si no más, como vehículos de distribución de malware o simplemente como objetivos de ataques dirigidos para robar todos nuestros tokens para NPM y para GitHub y para todo lo demás porque lo que tenemos en nuestras computadoras portátiles son, bueno, tenemos secretos para producción, ¿verdad?, y claves de acceso para entornos de preparación y todas esas cosas. Entonces, si instalas un paquete de NPM, eso es como si hiciera algo malo, deberías preocuparte por eso. Dicho esto, esta especie de introducción, vamos a hablar sobre algunas medidas preventivas, como qué puedes hacer, qué podemos hacer como controles de seguridad para este ecosistema. Comenzando con algo que he hecho en el pasado, que es la manipulación de archivos de bloqueo y Myle, que ha estado aquí abriendo la sesión hoy sobre Yarn 4, ha hablado de esto y de los aspectos de seguridad de los gestores de paquetes y cómo se está mitigando ahora. En 2019, revelé investigaciones sobre posibles problemas de seguridad con los archivos de bloqueo y tiene que ver con los archivos de bloqueo en Yarn y NPM y lo que sea, básicamente cómo se gestionan. Así que tomemos un enfoque práctico y veamos qué significa esto realmente. Esta es una captura de pantalla de cómo abrí una solicitud de extracción a un repositorio. Estoy bastante seguro de que todos pueden reconocer lo que está sucediendo aquí. Básicamente, no hay ningún cambio de código que haya propuesto, pero esta solicitud de extracción aún incluye un paquete malicioso. Aquí hay un troyano oculto en esta solicitud de extracción. Y este es todo el código de la solicitud de extracción, solo esto. Package JASON y el archivo de bloqueo. Entonces, ¿qué está pasando realmente allí? Porque parece que esto no es un tipo de ataque de usurpación de identidad porque esos nombres de paquetes son legítimos. Las versiones coinciden. Y si estuvieras ejecutando algo como sneak en una integración de git, te diría que al hacer una solicitud de extracción, realiza una verificación y ninguna de estas bibliotecas y versiones específicas introduce nuevas vulnerabilidades. Entonces, en esencia, todo parece estar bien aquí, ¿verdad? Bien. Bueno, aquí hay un archivo de bloqueo de yarn, que todos ignoramos amablemente, ¿verdad? Porque, ¿quién quiere revisar este código? Yo no. Así como no quiero revisar las expresiones regulares, ¿verdad? Esto no se supone que sea legible por humanos ni consumible por humanos. Aún así, esto representa una amenaza. Veamos qué es. Expandí esto y, ya sabes, este es mi archivo de bloqueo.

4. Mitigando los riesgos del gestor de paquetes

Short description:

Cuando se realiza una solicitud de extracción a un proyecto, puedo utilizar una función de los gestores de paquetes como npm y Yarn para instalar paquetes de fuentes no convencionales. Esto plantea un riesgo ya que los paquetes maliciosos pueden introducir scripts de post-instalación que ejecutan comandos arbitrarios en tu máquina. Para mitigar esto, propongo realizar un análisis de calidad del archivo de bloqueo y aplicar políticas de confianza. Además, es recomendable evitar contribuciones a los archivos de bloqueo y automatizar la gestión de dependencias a través de bots.

Y si comenzaras a revisar esto, y puedes ver que hay un cambio de línea de aproximadamente 5,000 o lo que sea, esto es bastante largo. Así que desplazaré un poco hacia abajo y trataré de revisarlo juntos. Desplazarse, desplazarse, desplazarse. De acuerdo. ¿Lo ves? ¿Ves el problema? Aún no. Casi. Ahí vamos. De acuerdo. Todo lo que necesito hacer cuando doy esa solicitud de extracción a un proyecto es utilizar esta función realmente genial de los gestores de paquetes en, ya sabes, como npm y Yarn, que básicamente nos permite instalar paquetes de cosas realmente extrañas como un gist de GitHub. Como el tarble, básicamente los commits principales de un repositorio de control de origen. Así que puedo hacer eso. Una vez que tenga la verificación de integridad y todo lo demás esté correcto, puedo seguir adelante y empujar esto en mi solicitud de extracción o puedo cambiar la fuente de ms, no de npm, sino de mi propio GitHub, e instalarlo, y estoy diciendo que este es un paquete malicioso porque una vez que lo instales, puedo introducir algunos scripts de post-instalación que ejecutarán algunos comandos y puedo instalar lo que quiera en tu máquina. ¿Cómo mitigamos esto? Aquí es donde revelé esta investigación y se me ocurrió la idea de realizar un análisis de calidad del archivo de bloqueo. Así que una de esas cosas, todos usamos linters para diferentes cosas, como JS lint para la calidad de tu código y código limpio o lo que quieras usarlo, lo cual es genial. Este es otro que probablemente deberías considerar agregar porque esencialmente te brinda la capacidad de decir que tu archivo de bloqueo debe tener políticas de confianza específicas. Por ejemplo, incluso sin relación con el origen de donde proviene algo, el host permitido aquí. Pero tal vez algún software se esté instalando desde una conexión HTTP que permite a las personas realizar ataques de intermediario. Así que quieres tener esta política de confianza y así es como lo haces. Úsalo en tu CI o tus charlas previas a la copia o lo que estés usando, pero esencialmente quieres tener más medidas de mitigación. Además de tal vez usar esto, debes tener en cuenta dos cosas aquí, ¿verdad? En primer lugar, probablemente no quieras permitir ni recibir contribuciones a los archivos de bloqueo debido a este problema porque, realísticamente, ninguno de nosotros va a revisar realmente esas líneas de código de un archivo de bloqueo. Así que no abramos esta puerta en primer lugar. Y también en lo que respecta a cómo gestionamos las dependencias, básicamente quieres poder delegar toda esta gestión de dependencias a algunos bots porque son buenos en eso y pueden, ya sabes, generar esas solicitudes de extracción automáticas para nosotros. Así que eso es otra cosa que debemos tener en cuenta.

5. Ejecución arbitraria de comandos en NPM

Short description:

La ejecución arbitraria de comandos es una característica de los gestores de paquetes como NPM. Esto expone a los usuarios al riesgo de instalar paquetes maliciosos o módulos comprometidos. En enero de 2022, se envió una versión maliciosa del paquete 'callers' de NPM al registro, poniendo en riesgo a los usuarios.

Continuando. La ejecución arbitraria de comandos para todos nosotros. Eso es como una característica de los gestores de paquetes. Es increíble. Veamos. NPM install callers. Voy a copiar y pegar eso en mi terminal pero... Sí. Tal vez debería tomar unos segundos antes de ejecutar ese comando. Y debería hacerlo, porque esto realmente sucede. NPM, como gestor de paquetes, permite que cualquier dependencia a lo largo del árbol, sin importar cuán grande o pequeña sea, ejecute comandos antes o después de que algo en ese árbol se instale. Y así, si continuara e hiciera NPM install callers en el día, cuando realmente se envió una versión maliciosa de callers al registro de NPM, estaría exponiéndome a paquetes maliciosos o tal vez a módulos comprometidos, mantenedores y cosas así. Así que esto realmente sucedió. En enero de 2022, en caso de que te lo hayas perdido, si hubieras instalado NPM callers, eso es algo que habría sucedido.

6. Impacto del paquete Callers sabotado

Short description:

Callers, un paquete ampliamente utilizado en el ecosistema de JavaScript, fue saboteado por su propio mantenedor, introduciendo una vulnerabilidad de denegación de servicio. Incluso si no utilizas directamente Callers, puede ser una dependencia de otros paquetes en los que confías. Este problema afectó a frameworks populares como AWS CDK y Salesforce, causando interrupciones en los flujos de trabajo. Para mitigar esto, al usar NPM, agrega --ignore-scripts a tus comandos para evitar la ejecución de código arbitrario, aunque puede romper algunas instalaciones.

Pero profundicemos un poco para comprender qué está sucediendo. Y callers ha sido saboteado por su propio mantenedor para ejecutar algo, no entraré en detalles, pero eso ha estado sucediendo, puedes ver que no ha tenido ninguna descarga en los últimos dos años. No, como, lo siento, no ha tenido nuevas versiones en los últimos dos años. Pero de repente se ha lanzado una nueva versión de parche, y en este momento, muy, muy rápidamente, solo en los últimos siete días, ha obtenido alrededor de 100K de descargas para usuarios finales que descargan esta versión. ¿Qué está pasando con esta versión que todos esos 100,000 usuarios han estado descargando, tal vez tú y yo? Veamos.

Básicamente, ese código saboteado introduce una denegación de servicio en este paquete. Si has utilizado callers de alguna manera, es posible que tu aplicación se haya roto debido a esto. También puedes ir y ver el repositorio de GitHub, donde sugieren a las personas que participen y sugieran formas más eficientes de hacer bucles infinitos. Muy recomendado. Open source, ¿verdad? Increíble. Recibimos muchos comentarios al respecto. Y podrías pensar, como callers, no lo estoy usando en mi proyecto, como, nunca lo he visto, ¿verdad? Excepto que estás en el ecosistema de JavaScript. No lo estás usando. Hasta donde sabes. Pero ¿has verificado si alguna de tus dependencias lo está utilizando? Bueno, aquí tienes un ejemplo, un ejemplo real de por qué esto es tan impactante. Si estuvieras utilizando AWS CDK de Amazon, habrías sido, ya sabes, objetivo de esto. Porque AWS CDK lo utiliza no solo. Muchos otros paquetes también lo utilizan. Algunos de ustedes pueden conocer, como Salesforce, como una herramienta de prueba, como un framework de testing. Todos ellos utilizan este paquete en algún lugar del árbol. Y si lo hubieras tenido, habría roto tus flujos de trabajo. Todo el árbol de dependencias es realmente grande. Y callers es impactante. No entraré en detalles. Pero te diré que este es un problema muy grave que ocurrió en el ecosistema. Entonces, ¿qué podemos hacer para mitigar esto? Una de las primeras cosas es, por supuesto, si haces una instalación de NPM, por favor, por favor, por favor agrega --ignore-scripts. Agrega esos guiones, posiblemente a cada comando de NPM que ejecutes, o a tu archivo NPM o C. Nadie puede ejecutar comandos arbitrarios en tu máquina. El inconveniente es que podría romper algunas cosas, como si estás instalando Node sass o algo así, podría necesitar ejecutar alguna compilación nativa. Podría romperse.

7. Working Around Blind Upgrades and Vulnerabilities

Short description:

Entonces, necesitas encontrar una solución para estos problemas. Pero la mayoría de nosotros probablemente no necesitemos confiar en todo y en todos por defecto, lo cual es una inseguridad. ¿Qué tal evitar actualizaciones ciegas? Otra cosa que he estado viendo, sabes, al hablar con desarrolladores todo el tiempo. Como, tienen en su CI cosas como ejecutar una actualización de NPM, ejecutar un comando de verificación de actualización de NPM, y básicamente lo están ejecutando en CI, porque quieren poder, en CI, siempre actualizar a la última versión y probar que ninguno de los paquetes en los que dependen haya roto su código. Entonces, ¿por qué querrías hacerte esto a ti mismo? Entonces, necesitas pensar en cómo hacer esto bien, ¿verdad? No con una actualización, sino con contexto. El número cuatro es lo que ves no es lo que ejecutas. Es uno de mis favoritos.

Entonces, necesitas encontrar una solución para estos problemas. Pero la mayoría de nosotros probablemente no necesitemos confiar en todo y en todos por defecto, lo cual es una inseguridad. ¿Qué tal evitar actualizaciones ciegas?

Otra cosa que he estado viendo, sabes, al hablar con desarrolladores todo el tiempo. Como, tienen en su CI cosas como ejecutar una actualización de NPM, ejecutar un comando de verificación de actualización de NPM, y básicamente lo están ejecutando en CI, porque quieren poder en CI siempre actualizar a la última versión y probar que ninguno de los paquetes en los que dependen haya roto su código. Lo cual, quiero decir, es comprensible por qué lo hacen, pero te expone nuevamente a una gran cantidad de problemas que podrían estar sucediendo. Incidentes de seguridad como confusiones de dependencias y un montón de otras cosas, como, por qué querrías estar ahí. Si hubieras hecho eso en tu CI y ese CI se estuviera ejecutando en esos días en los que callers estaba fuera, donde NodeIPC estaba fuera, todos esos incidentes de seguridad, estarías obteniendo automáticamente esas versiones maliciosas. Entonces, ¿por qué querrías hacerte esto a ti mismo?

Entonces, necesitas pensar en cómo hacer esto bien, ¿verdad? No con una actualización, sino con contexto. Lo cual significa, por favor, nuevamente, usa esos bots automatizados. Puedes usar GitHub o sneak, lo que quieras. Pero úsalos para agilizar esas actualizaciones de paquetes. No a través de un método que les dé acceso completo a tu máquina. De hecho, algunos de ellos pueden protegerte. Por ejemplo, con sneak, lo que hemos hecho es realizar actualizaciones de NPM para tus paquetes. No solo por razones de seguridad, sino también porque están desactualizados. Pero cuando lo hacemos, si Node IPC o callers 141 acaban de salir ayer, no te damos inmediatamente esas actualizaciones. De hecho, hemos investigado una serie de incidentes de seguridad que ocurrieron en el pasado. Y lo que estaba sucediendo allí y cuánto tiempo le llevó al ecosistema solucionarlos. Y es por eso que tenemos este retraso inherente de aproximadamente 21 días antes de sugerir una nueva versión actualizada del paquete. Entonces, si algo malicioso está sucediendo en este momento, no recibirás ese paquete malicioso al día siguiente, antes de que todos hayan tenido tiempo de react a esto.

El número cuatro es lo que ves no es lo que ejecutas. Es uno de mis favoritos. Sé cuántos de ustedes han oído hablar del ataque de origen troyano. Pero vamos a analizar un poco de código. Aquí hay un poco de código que tomé de un middleware de Fastify. Es como un ejemplo de Node JS. Puedes echarle un vistazo por un segundo, mirarlo y decirme dónde ves la vulnerabilidad. ¿Está en el primer párrafo, en el segundo párrafo, en el tercer párrafo, está todo bien? Por supuesto, ustedes son desarrolladores, ¿qué estoy pensando? Solo lo resaltaré y lo encontrarás de inmediato.

8. Hidden Comments and Trojan Source Attacks

Short description:

Este código tiene un problema con la forma en que está escrito. Los caracteres de control en las cadenas pueden ocultar comentarios y cambiar la lógica del código. Investigaciones recientes sobre ataques de origen troyano han llevado a mejoras en las advertencias en herramientas como VS Code y GitHub. Las opciones de mitigación incluyen el uso de la extensión Speak en VS Code o un complemento de ESLint.

¿Lo encontraste? Bien. Veamos qué está pasando. De hecho, este código tiene un problema. El problema no está en el código en sí. El problema está en cómo está escrito el código. No estoy hablando de errores lógicos o malas comprobaciones. Lo que estás viendo aquí no es lo que el compilador o el intérprete de JavaScript van a ver. De hecho, si quiero enfocarme en esto y darte una forma diferente de ejecutarlo, puedo copiarlo y pegarlo en VS Code, ejecutarlo, aquí tienes un ejemplo. Mismo código. ¿Qué cambió? Nada. Si lo ejecuto, me dirá que eres un administrador. ¿Pero por qué? Esto es semánticamente incorrecto. ¿Por qué sucede esto? Sucede porque lo que no estás viendo, lo que tu IDE no te está diciendo y cuando revisas tal vez un código fuente en GitHub, lo que no estás viendo es esto. No ves que tiene caracteres de control en UDF que en realidad están cambiando la forma en que se muestran las cadenas. Y lo que estás viendo en realidad es un comentario oculto dentro del código. Y eso cambia toda la lógica de cómo funciona el código. Incluso si recibes esto como una contribución de código y lo apruebas porque está bien. Pero nos estábamos perdiendo todo esto. Afortunadamente, esta investigación sobre ataques de origen troyano, que ocurrió en el último año, se ha divulgado de manera responsable. En este momento, si revisas cosas en, ya sabes, VS Code, si usas, por ejemplo, la extensión Speak, o si revisas código en GitHub, todas esas ya han adoptado, cuando suceden cosas así, te muestran un mensaje de advertencia en la parte superior que te dice que potencialmente hay, ya sabes, caracteres de control aquí, echa un vistazo a esto, y hacen que sea visible. Pero antes no era así, y solo descargué una versión antigua de Atom de hace un año y te mostré la copia exacta de cómo funciona esto.

Entonces, algunas ideas para mitigarlo. Ahí vamos. Me gusta ese perro. En general, me gustan los perros, así que encaja. Entonces, los ataques de origen troyano, ¿verdad? Tenemos algunas formas de mitigarlos y, básicamente, lo que queremos hacer es poder mitigarlos lo más rápido posible. Nuevamente, ya tienes esto en los IDE de VSCode y cosas así. Y puedes hacer esto y usar eso o puedes usar un complemento de ESLint que escribí y no importa qué versión de VS Code estés usando, versiones o IDE, simplemente los detectará y te informará sobre esto.

A continuación, evitando la confusión de dependencias. Vamos a ver qué significa realmente esto.

9. Dependency Confusion and Mitigation

Short description:

Esta investigación destaca los riesgos de gestionar incorrectamente las dependencias y el potencial de ataques de confusión de dependencias. Mitigar esto es fácil con herramientas como Snyk, que escanea el archivo package JSON y los commits de Git en busca de vulnerabilidades. Gracias a todos por asistir a mi charla y recuerden escribir código seguro.

Lo explicaré rápidamente hacia el final. Esta ha sido una investigación que ha estado en marcha en el ecosistema durante bastante tiempo y muchos probadores de penetración reales la han utilizado para intentar ingresar a los sistemas internos de las empresas debido a la forma incorrecta en que gestionan las dependencias y la configuración a su alrededor.

Hay mucho de esto, no entraré en cómo funciona todo esto, pero básicamente la confusión de dependencias se origina cuando los paquetes privados alojados internamente por una empresa no se encuentran en el registro de NPM. Ese espacio está abierto y disponible para que cualquiera se registre y luego una mala configuración podría permitir que alguien tome ese espacio de nombres, agregue código malicioso como un comando de instalación de NPM y lo ejecute en tu máquina. ¿Cómo se mitiga esto? Bueno, hay muchas herramientas bastante simples hoy en día. Pero si haces cosas como, nuevamente, actualizar NPM o gestionar manualmente tus dependencias, hay muchas posibilidades de que seas vulnerable a esos ataques de confusión de dependencias. Así que, nuevamente, no hagas esto. Ves que es un tema recurrente en diferentes tipos de ataques. Mitigar esto es bastante fácil si quieres usar una de esas herramientas. Así que la creamos en ese momento. Se llama Snyk. La idea es que escanea tu archivo package JSON. Incluso escanea tus commits de Git para entender cuándo insertaste un paquete privado y cómo se relaciona eso en términos de tiempo con lo que está en NPM. Te dará este tipo de advertencias donde potencialmente estás vulnerable o tal vez hay una forma sospechosa de algún paquete que existe. Pero no estamos seguros si es malicioso o no.

Con todo eso dicho, muchas gracias. Vamos a tiempo. Gracias a todos por venir a mi charla y espero que todos escriban código seguro. APLAUSOS. Muchas gracias. Creo que todos estaban tomando notas. ¿Verdad? De lo contrario, compartiré las diapositivas después. Gracias. Preguntando por un amigo. Comparte las diapositivas. Si aún tienes preguntas, colócalas en Slido para que pueda leerlas desde la pantalla aquí. Entonces, para elegir una, ¿qué piensas sobre la seguridad introducida por características como MPM ignora los scripts cuando un módulo de nodo puede acceder a DFS en cualquier momento durante – en tiempo de ejecución? Sí. Excelente pregunta. Hay algunas discusiones al respecto.

10. Node Foundation and Threat Model Discussion

Short description:

La Fundación Node, ahora la Fundación OpenJS, tiene un grupo de trabajo de seguridad en el ecosistema. Son transparentes y abiertos en GitHub, permitiendo discusiones y llamadas mensuales. Hay una discusión actual sobre establecer un modelo de amenazas para las aplicaciones de Node. La compartimentalización o departamentalización de las capacidades de los módulos o aplicaciones es una solución potencial. Esta es una amenaza real que debe abordarse.

En realidad, se ha hecho: la Fundación Node, o hoy la Fundación OpenJS, tiene un grupo de trabajo de seguridad en el ecosistema, por lo que también podrías unirte a eso, y todo eso se gestiona de manera muy transparente y abierta en GitHub, por lo que realmente puedes unirte a las discusiones, las llamadas mensuales, etc. Ahora hay una discusión reciente sobre establecer un modelo de amenazas para las aplicaciones de Node, algo así como esto está relacionado con toda la demostración versus Node.js, en términos de aspecto de seguridad. Así que se está discutiendo allí. Una de mis ideas, por supuesto, sería genial si hay una forma de que podamos, en esencia, ser capaces de compartimentar o departamentalizar todas las capacidades de tal vez módulos específicos, tal vez toda la aplicación o lo que sea, pero esta es una amenaza real de todos modos, independientemente de NPM. Y así, esto es algo bueno que todavía necesitamos solucionar. Muy bien, y ¿Snyk planea...? Vaya, las cosas se están moviendo. ¿Se puede usar Snyk para automatizar las comprobaciones de seguridad en CI/CD? Sí, eso es algo bastante genial donde si simplemente... Así que no lo dije antes, pero Snyk es gratuito, puedes usarlo con la seguridad y lo que quieras. Y básicamente, cuando conectas tu repositorio de git con Snyk, esa será probablemente la experiencia más productiva que puedas tener, porque en ese punto, no necesitas ejecutarlo en CI tú mismo. Agregamos los ganchos de comprobación, escaneamos específicamente las nuevas vulnerabilidades, si las solicitudes de extracción existentes agregan vulnerabilidades existentes o no, si quieres que falle, supervisaremos la aparición de nuevas vulnerabilidades, por lo que todo el proceso y no necesitas... Hay una CLI y demás, pero no necesitas todo eso, también automatizaremos las solicitudes de extracción para solucionar problemas por ti, por lo que esa será una integración ideal. Buena pregunta también. Me perdí algo de tu presentación, no sé, la llamada de XKCD sobre las dependencias que son gestionadas por una sola persona en Nebraska por años. Eso es para una charla diferente sobre el mantenimiento de código abierto... Creo que también está relacionado con la seguridad, ¿verdad? Además de verificar nuestro código y asegurarnos de que no estemos haciendo nada menos inteligente, también debemos apoyar el código abierto de manera que sea más sostenible. ¿Qué piensas al respecto? Debemos hacerlo, debemos hacerlo. Quiero apoyar el código abierto de cualquier manera que pueda, así que estoy a favor de eso. ¿Snyk tiene un programa especial para los mantenedores de código abierto, para que puedan obtener créditos o algo así? Sí, de hecho, acabamos de concluir en mayo, algo así como esta campaña de amor de Snyk JS donde investigamos muchas de las dependencias de JavaScript que usamos y fuimos al perfil de GitHub de ellas y las patrocinamos. Eso es lo que hicimos. Eso es realmente emocionante. Gracias. ¿Dónde podemos obtener más información al respecto? Solo busca en Google Snyk JS love, creo que lo encontrarás. Genial, muchas gracias por tu charla. Gracias a las personas que hacen preguntas. Vamos a... Hay un stand de Snyk, puedes venir y preguntarme en el stand. Sí, y hablando del stand, también te unirás a la pequeña caja negra donde puedes hacer más preguntas, ¿verdad? Oh, cierto. Sí, sí. Porque en realidad, tal vez nuestras personas remotas también estén ansiosas por hacerte preguntas. Espero que no estén ansiosas. Así que definitivamente únete a eso. Bueno, tal vez no ansiosas, pero aún interesadas. Así que por favor únete también al stand de preguntas y respuestas allí. Sí.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Elevando Monorepos con los Espacios de Trabajo de npm
DevOps.js Conf 2022DevOps.js Conf 2022
33 min
Elevando Monorepos con los Espacios de Trabajo de npm
Top Content
NPM workspaces help manage multiple nested packages within a single top-level package, improving since the release of NPM CLI 7.0. You can easily add dependencies to workspaces and handle duplications. Running scripts and orchestration in a monorepo is made easier with NPM workspaces. The npm pkg command is useful for setting and retrieving keys and values from package.json files. NPM workspaces offer benefits compared to Lerna and future plans include better workspace linking and adding missing features.
Es una jungla ahí fuera: ¿Qué está pasando realmente dentro de tu carpeta Node_Modules?
Node Congress 2022Node Congress 2022
26 min
Es una jungla ahí fuera: ¿Qué está pasando realmente dentro de tu carpeta Node_Modules?
Top Content
The talk discusses the importance of supply chain security in the open source ecosystem, highlighting the risks of relying on open source code without proper code review. It explores the trend of supply chain attacks and the need for a new approach to detect and block malicious dependencies. The talk also introduces Socket, a tool that assesses the security of packages and provides automation and analysis to protect against malware and supply chain attacks. It emphasizes the need to prioritize security in software development and offers insights into potential solutions such as realms and Deno's command line flags.
El estado de la autenticación sin contraseña en la web
JSNation 2023JSNation 2023
30 min
El estado de la autenticación sin contraseña en la web
Passwords are terrible and easily hacked, with most people not using password managers. The credential management API and autocomplete attribute can improve user experience and security. Two-factor authentication enhances security but regresses user experience. Passkeys offer a seamless and secure login experience, but browser support may be limited. Recommendations include detecting Passkey support and offering fallbacks to passwords and two-factor authentication.
La filosofía de Yarn
DevOps.js Conf 2022DevOps.js Conf 2022
31 min
La filosofía de Yarn
Let's talk about React and TypeScript, Yarn's philosophy and long-term relevance, stability and error handling in Yarn, Yarn's behavior and open source sustainability, investing in maintenance and future contributors, contributing to the JavaScript ecosystem, open-source contribution experience, maintaining naming consistency in large projects, version consistency and strictness in Yarn, and Yarn 4 experiments for performance improvement.
5 Formas en las que Podrías Haber Hackeado Node.js
JSNation 2023JSNation 2023
22 min
5 Formas en las que Podrías Haber Hackeado Node.js
Top Content
The Node.js security team is responsible for addressing vulnerabilities and receives reports through HackerOne. The Talk discusses various hacking techniques, including DLL injections and DNS rebinding attacks. It also highlights Node.js security vulnerabilities such as HTTP request smuggling and certification validation. The importance of using HTTP proxy tunneling and the experimental permission model in Node.js 20 is emphasized. NearForm, a company specializing in Node.js, offers services for scaling and improving security.
Política de Seguridad de Contenido con Next.js: Mejorando la Seguridad de tu Sitio Web
React Summit US 2023React Summit US 2023
9 min
Política de Seguridad de Contenido con Next.js: Mejorando la Seguridad de tu Sitio Web
Top Content
Lucas Estevão, a Principal UI Engineer and Technical Manager at Avenue Code, discusses how to implement Content Security Policy (CSP) with Next.js to enhance website security. He explains that CSP is a security layer that protects against cross-site scripting and data injection attacks by restricting browser functionality. The talk covers adding CSP to an XJS application using meta tags or headers, and demonstrates the use of the 'nonce' attribute for allowing inline scripts securely. Estevão also highlights the importance of using content security reports to identify and improve application security.

Workshops on related topic

Masterclass Práctica: Introducción a Pentesting para Aplicaciones Web / APIs Web
JSNation US 2024JSNation US 2024
148 min
Masterclass Práctica: Introducción a Pentesting para Aplicaciones Web / APIs Web
Featured Workshop
Gregor Biswanger
Gregor Biswanger
En esta masterclass práctica, estarás equipado con las herramientas para probar efectivamente la seguridad de las aplicaciones web. Este curso está diseñado tanto para principiantes como para aquellos que ya están familiarizados con las pruebas de seguridad de aplicaciones web y desean ampliar su conocimiento. En un mundo donde los sitios web juegan un papel cada vez más central, asegurar la seguridad de estas tecnologías es crucial. Comprender la perspectiva del atacante y conocer los mecanismos de defensa apropiados se han convertido en habilidades esenciales para los profesionales de TI.Esta masterclass, dirigida por el renombrado entrenador Gregor Biswanger, te guiará a través del uso de herramientas de pentesting estándar de la industria como Burp Suite, OWASP ZAP y el marco profesional de pentesting Metasploit. Aprenderás a identificar y explotar vulnerabilidades comunes en aplicaciones web. A través de ejercicios prácticos y desafíos, podrás poner en práctica tu conocimiento teórico y expandirlo. En este curso, adquirirás las habilidades fundamentales necesarias para proteger tus sitios web de ataques y mejorar la seguridad de tus sistemas.
De 0 a Autenticación en una hora con ReactJS
React Summit 2023React Summit 2023
56 min
De 0 a Autenticación en una hora con ReactJS
WorkshopFree
Kevin Gao
Kevin Gao
La autenticación sin contraseña puede parecer compleja, pero es simple de agregar a cualquier aplicación utilizando la herramienta adecuada. Hay múltiples alternativas que son mucho mejores que las contraseñas para identificar y autenticar a tus usuarios, incluyendo SSO, SAML, OAuth, Magic Links, One-Time Passwords y Authenticator Apps.
Mientras abordamos los aspectos de seguridad y evitamos errores comunes, mejoraremos una aplicación JS de pila completa (backend Node.js + frontend React) para autenticar a los usuarios con OAuth (inicio de sesión social) y One Time Passwords (correo electrónico), incluyendo:- Autenticación de usuarios - Gestión de interacciones de usuarios, devolviendo JWTs de sesión / actualización- Gestión y validación de sesiones - Almacenamiento seguro de la sesión para solicitudes de cliente posteriores, validación / actualización de sesiones- Autorización básica - extracción y validación de reclamaciones del token JWT de sesión y manejo de autorización en flujos del backend
Al final del masterclass, también exploraremos otros enfoques de implementación de autenticación con Descope, utilizando SDKs de frontend o backend.
Principales Diez Vulnerabilidades de Seguridad OWASP en Node.js
JSNation 2024JSNation 2024
97 min
Principales Diez Vulnerabilidades de Seguridad OWASP en Node.js
Workshop
Marco Ippolito
Marco Ippolito
En este masterclass, cubriremos las diez vulnerabilidades más comunes y riesgos de seguridad críticos identificados por OWASP, que es una autoridad confiable en Seguridad de Aplicaciones Web.Durante el masterclass, aprenderás cómo prevenir estas vulnerabilidades y desarrollar la capacidad de reconocerlas en aplicaciones web.El masterclass incluye 10 desafíos de código que representan cada una de las vulnerabilidades más comunes de OWASP. Se proporcionarán pistas para ayudar a resolver las vulnerabilidades y pasar las pruebas.El instructor también proporcionará explicaciones detalladas, diapositivas y ejemplos de la vida real en Node.js para ayudar a comprender mejor los problemas. Además, obtendrás información de un Mantenedor de Node.js que compartirá cómo gestionan la seguridad en un proyecto grande.Es adecuado para desarrolladores de Node.js de todos los niveles de habilidad, desde principiantes hasta expertos, se requiere un conocimiento general de aplicaciones web y JavaScript.
Tabla de contenidos:- Control de Acceso Roto- Fallas Criptográficas- Inyección- Diseño Inseguro- Configuración de Seguridad Incorrecta- Componentes Vulnerables y Obsoletos- Fallas de Identificación y Autenticación- Fallas de Integridad de Software y Datos- Fallas de Registro y Monitoreo de Seguridad- Falsificación de Solicitudes del Lado del Servidor
Cómo Construir Control de Acceso Front-End con NFTs
JSNation 2024JSNation 2024
88 min
Cómo Construir Control de Acceso Front-End con NFTs
WorkshopFree
Solange Gueiros
Solange Gueiros
Comprende los fundamentos de la tecnología NFT y su aplicación en el fortalecimiento de la seguridad web. A través de demostraciones prácticas y ejercicios prácticos, los asistentes aprenderán cómo integrar sin problemas mecanismos de control de acceso basados en NFT en sus proyectos de desarrollo front-end.
Encontrar, Hackear y solucionar las vulnerabilidades de NodeJS con Snyk
JSNation 2022JSNation 2022
99 min
Encontrar, Hackear y solucionar las vulnerabilidades de NodeJS con Snyk
Workshop
Matthew Salmon
Matthew Salmon
npm y seguridad, ¿cuánto sabes sobre tus dependencias?Hack-along, hacking en vivo de una aplicación Node vulnerable https://github.com/snyk-labs/nodejs-goof, Vulnerabilidades tanto de código abierto como de código escrito. Se anima a descargar la aplicación y hackear junto con nosotros.Corrigiendo los problemas y una introducción a Snyk con una demostración.Preguntas abiertas.
Aporta Calidad y Seguridad al pipeline de CI/CD
DevOps.js Conf 2022DevOps.js Conf 2022
76 min
Aporta Calidad y Seguridad al pipeline de CI/CD
Workshop
Elena Vilchik
Elena Vilchik
En esta masterclass repasaremos todos los aspectos y etapas al integrar tu proyecto en el ecosistema de Calidad y Seguridad del Código. Tomaremos una aplicación web simple como punto de partida y crearemos un pipeline de CI que active el monitoreo de calidad del código. Realizaremos un ciclo completo de desarrollo, comenzando desde la codificación en el IDE y abriendo una Pull Request, y te mostraré cómo puedes controlar la calidad en esas etapas. Al final de la masterclass, estarás listo para habilitar esta integración en tus propios proyectos.