Es un mundo salvaje ahí fuera: ¿Qué está pasando realmente dentro de tu carpeta node_modules?

Rate this content
Bookmark

¿Sabes qué está pasando realmente en tu carpeta node_modules? Los ataques a la cadena de suministro de software han explotado en los últimos 12 meses y solo están acelerando en 2022 y más allá. Nos sumergiremos en ejemplos de ataques recientes a la cadena de suministro y en los pasos concretos que puedes tomar para proteger a tu equipo de esta amenaza emergente.

Feross Aboukhadijeh
Feross Aboukhadijeh
32 min
24 Mar, 2022

Video Summary and Transcription

La charla aborda la reciente compromiso del paquete UA parser.js y la necesidad de seguridad en la cadena de suministro en la comunidad de código abierto. Explora las razones de los riesgos de seguridad en el código abierto y la necesidad de un nuevo enfoque para detectar y bloquear dependencias maliciosas. También se discuten los diferentes vectores de ataque y las vulnerabilidades de los mantenedores. El orador enfatiza la importancia de evaluar los paquetes y proteger tu aplicación, así como la necesidad de un cambio de mentalidad en cómo vemos el código abierto. La charla concluye con una introducción a Socket.dev, una herramienta enfocada en la detección de ataques a la cadena de suministro.

Available in English

1. Introducción a los Módulos de Node y el Open Source

Short description:

Hola y bienvenidos. Soy Ferras, un mantenedor de código abierto con experiencia en la creación de paquetes npm. Permítanme contarles una historia sobre un paquete popular llamado UAParserJS y su trayectoria desde ser publicado en GitHub hasta convertirse en ampliamente utilizado.

Hola y bienvenidos. Gracias por venir a mi charla. Es una jungla ahí afuera. ¿Qué está realmente sucediendo dentro de su carpeta de módulos de Node? Soy Ferras y soy un mantenedor de código abierto. Comencé WebTorrent, que es un protocolo de transferencia de archivos peer to peer, y Standard JS, un linter que atrapa errores y aplica un estilo de código. He estado trabajando en código abierto desde 2014 y he creado más de cien paquetes npm. En el pasado, fui voluntario en la junta directiva de Node.js y también enseño una clase sobre seguridad web en la Universidad de Stanford. Ahora soy el fundador de una startup llamada Socket, que ayuda a proteger el ecosistema de código abierto. Antes de comenzar, permítanme contarles una historia. El 13 de enero de 2012, hace más de diez años, un desarrollador llamado Faisal Salman publicó un nuevo proyecto en GitHub. Se llamaba UAParserJS y analizaba cadenas de agente de usuario. Ahora, mucha gente encontró este proyecto útil, y así, durante los siguientes 10 años, Faisal continuó desarrollando el paquete, con la ayuda de muchos colaboradores de código abierto. Publicó 54 versiones a medida que el paquete crecía en popularidad. Eventualmente llegó a tener 7 millones de descargas por semana, eventualmente

2. Compromised UA Parser.js Package

Short description:

Ahora, permítanme contarles una historia diferente. El 5 de octubre de 2021, un hacker ofreció vender la contraseña de una cuenta de NPM que controlaba un paquete con más de 7 millones de descargas semanales. Dos semanas después, UA parser.js fue comprometido, lo que resultó en la publicación de tres versiones maliciosas. Estas versiones contenían malware que se ejecutaba al momento de la instalación, lo que llevó al robo de contraseñas y a la minería de la criptomoneda Monero. El paquete fue reportado y eliminado después de cuatro horas.

que estaba siendo utilizado por casi 3 millones de repositorios de GitHub. Ahora, permítanme contarles una historia diferente. El 5 de octubre de 2021, en un conocido foro de piratería ruso, apareció esta publicación. Un hacker ofrecía vender la contraseña de una cuenta de NPM que controlaba un paquete con más de 7 millones de descargas semanales. Su precio de venta era de $20,000 por esta contraseña. Ahora, aquí es donde se cruzan las dos historias. Dos semanas después, UA parser.js fue comprometido y se publicaron tres versiones maliciosas. Se agregó malware a estos paquetes que se ejecutaría inmediatamente cada vez que alguien instalara una de las versiones comprometidas. Ahora, veamos qué hace ese malware. Este es el archivo JSON del paquete para la versión comprometida. Y verán que utiliza un script de pre-instalación. Esto significa que este comando se ejecutará automáticamente cada vez que se instale este paquete. Ahora veamos qué hace ese script. Lo primero que verán es que se divide según el sistema operativo del objetivo. En Mac, no sucede nada, lo cual es afortunado para los usuarios de Mac, pero los usuarios de Windows y Linux no tienen tanta suerte. Y aquí verán que se genera un símbolo del sistema para cada uno de estas plataformas utilizando child-process.exec. Ahora veamos qué hace ese script pre-install.sh. La primera línea obtiene el país del usuario y determina si el usuario proviene de Rusia, Ucrania, Bielorrusia o Kazajistán, y almacena esa información en una variable. Ahora, si el usuario proviene de alguno de esos países, el script se detiene sin hacer nada más. Sin embargo, si provienes de cualquier otro país, el script procede a descargar un archivo ejecutable desde esta dirección IP, marca ese archivo como ejecutable y luego lo ejecuta. Y ahora, según estas banderas de línea de comandos, pueden ver aquí que este programa es un minero de Monero, que se utilizará para minar la criptomoneda Monero para el atacante.

Ahora este es el script en Windows. Es muy similar. Comienza descargando ese mismo o un minero de Monero similar, pero también descarga un archivo DLL y lo ejecuta. Y aquí pueden ver cómo se inicia el minero de Monero y se registra el archivo DLL en Windows. Ahora, ¿qué hace este archivo DLL adicional? Bueno, roba contraseñas de más de cien programas diferentes en la máquina con Windows, así como todas las contraseñas en el Administrador de credenciales de Windows. Así que, vaya, este es un malware realmente desagradable. Y cualquier persona que tuviera la mala suerte de ejecutar esto perdió todas sus contraseñas y tuvo que hacer un restablecimiento completo de sus cuentas en línea. No fue un buen momento. Así que este es el resultado. Este paquete fue

3. Compromised Package and Supply Chain Security

Short description:

El reciente compromiso del paquete UA parser.js fue un evento significativo en el mundo de JavaScript. Expuso las vulnerabilidades del ecosistema abierto y la confianza entre los mantenedores. Este incidente, junto con el creciente número de eliminaciones de paquetes relacionadas con la seguridad, resalta la necesidad de seguridad en la cadena de suministro en la comunidad de código abierto. Se espera que el año 2022 se centre en abordar este problema.

El paquete fue publicado durante aproximadamente cuatro horas, y la comunidad de código abierto fue bastante diligente y lo reportó. Y el mantenedor también fue bastante diligente. Por lo tanto, cualquier persona que haya tenido la mala suerte de instalarlo durante la ventana de cuatro horas fue comprometida. Pero se eliminó relativamente rápido. Cualquier compilación de software realizada en proyectos sin usar un archivo de bloqueo fue comprometida. Y cualquier persona que tuvo la mala suerte de actualizar a esta nueva versión del paquete, o tal vez que fusionó una solicitud de extracción de un bot para actualizar a esta nueva versión durante este tiempo, también habría sido comprometida. Así que esto fue una gran noticia en el mundo de JavaScript. Y supongo que es posible que ya hayas escuchado sobre este ataque. Pero esto es realmente solo la punta del iceberg. Hemos estado rastreando los paquetes que se eliminan de npm por razones de seguridad. Y hemos visto más de 700 paquetes eliminados por razones de seguridad en los últimos 30 días. Y creo que esta tendencia se está acelerando a medida que los atacantes aprovechan el ecosistema abierto y la confianza que los mantenedores tienen entre sí y las políticas de contribución liberales que todos hemos adoptado en la era moderna del código abierto. Así que creo que 2022 será el año de la seguridad en la cadena de suministro a medida que aumente la conciencia.

4. Why is this happening now?

Short description:

Estamos descargando código de internet escrito por personas desconocidas y ejecutándolo con permisos completos en nuestros dispositivos. Es un milagro que este sistema haya funcionado en su mayoría durante tanto tiempo, pero no todos son buenos. Veamos por qué esto está sucediendo ahora.

de este problema está saliendo a la luz ahora. Entonces, una pregunta que podrías hacer es por qué esto está sucediendo ahora? Quiero empezar señalando que lo que estamos intentando hacer aquí es algo un poco loco. Estamos intentando descargar código de internet escrito por personas desconocidas que no hemos leído y que ejecutamos con permisos completos en nuestras laptops y servidores donde guardamos nuestros datos más importantes. Esto es lo que hacemos todos los días cuando usamos npm install. Y solo quiero decir rápidamente que personalmente creo que es un milagro que este sistema funcione, y que haya seguido funcionando en su mayoría durante tanto tiempo. Creo que es un testimonio de lo buenos que son la mayoría de las personas. Pero desafortunadamente, no todos son buenos. Así que adentrémonos en por qué esto

5. Reasons for Security Risks in Open Source

Short description:

El 90% del código de tus aplicaciones proviene de código abierto. El código abierto nos permite construir rápidamente aplicaciones web poderosas sin ser expertos en diversos dominios. La abundancia de dependencias transitivas y el árbol de dependencias complejo en los módulos de Node plantean riesgos de seguridad. Muchos desarrolladores no leen el código que ejecutan, confiando en que otros encuentren vulnerabilidades. Los paquetes maliciosos pueden pasar desapercibidos durante meses. Las herramientas populares brindan una falsa sensación de seguridad al escanear vulnerabilidades conocidas.

Esto está sucediendo ahora. La primera razón es que el 90% del código de tus aplicaciones proviene de código abierto. Así que realmente estamos parados sobre los hombros de gigantes. Y el código abierto es la razón por la cual podemos poner en marcha una aplicación en horas y días en lugar de semanas o meses. Y es la razón por la cual no necesitamos ser expertos en criptografía, husos horarios o el DOM virtual para construir una aplicación web moderna y poderosa. También es la razón por la cual la carpeta de módulos de Node es uno de los objetos más pesados del universo. Otra razón es que tenemos muchas, muchas dependencias transitivas. La forma en que escribimos software ha cambiado. Usamos dependencias mucho más liberalmente. Por lo tanto, instalar incluso una sola dependencia a menudo conduce a muchas, muchas dependencias transitivas que también se instalan. Un estudio de 2019 en una conferencia descubrió que instalar un paquete promedio de NPM implica una confianza implícita en 79 paquetes de terceros y 39 mantenedores, creando una superficie de ataque sorprendentemente grande. Así que aquí tenemos una visualización que mi equipo en Socket creó que muestra cómo se ve Webpack si exploramos la carpeta de módulos de Node y realmente vemos lo que hay dentro. Cada recuadro gris aquí representa un paquete y cada recuadro morado representa un archivo o archivos dentro de un paquete. A medida que quitas cada capa del árbol de dependencias, verás que sigues encontrando más y más paquetes anidados dentro del paquete de nivel superior, hasta que finalmente llegas aquí abajo. Pero esto es simplemente una cantidad insana de archivos y muchos módulos volando por aquí. La siguiente razón es que nadie realmente lee el código. Hay algunas personas que lo hacen, pero en general, las personas no revisan el código que ejecutan en sus máquinas. Una gran razón es que NPM realmente no facilita esto. Si vas a la página del paquete UA parser.js y haces clic en la pestaña de explorar aquí, verás que ni siquiera puedes ver los archivos de este paquete. Entonces, las personas tienen que recurrir a hacer clic en el enlace de GitHub y verificar en GitHub y esperar que el código en GitHub coincida con el código en NPM, lo cual no siempre es cierto. Pero está bien. Está bien. Podemos confiar en la ley de Linus de que, dado suficientes ojos, todos los errores son superficiales. Entonces, si hay un problema de seguridad en un paquete o malware en un paquete, podemos confiar en que otros lo encuentren, ¿verdad? Pero si todos hacen eso, ¿quién encuentra el malware? Y tal vez esta sea la razón por la cual, en promedio, un paquete malicioso está disponible durante 209 días antes de que se informe públicamente. Esto proviene de un artículo de investigación de Omatal. Así que, son 209 días durante los cuales el comando incorrecto de NPM puede terminar extremadamente mal. Personalmente, encuentro este número muy impactante. Un artículo de 2021 en NDSS, una prestigiosa conferencia de seguridad, también encontró resultados similares, incluyendo que el 20% de este malware persiste en los administradores de paquetes durante más de 400 días y tiene más de 1,000 descargas. Y la cuarta razón es que las herramientas populares dan una falsa sensación de seguridad. Muchas herramientas populares escanean vulnerabilidades conocidas.

6. The Need for a New Approach

Short description:

En 2022, escanear vulnerabilidades conocidas ya no es suficiente. Puede tomar semanas o meses para que se descubra y se informe una vulnerabilidad. Los mantenedores introducen accidentalmente vulnerabilidades, mientras que los atacantes introducen intencionalmente malware. El desarrollo rápido y las actualizaciones rápidas aumentan el riesgo de ataques a la cadena de suministro. Necesitamos un nuevo enfoque para detectar y bloquear dependencias maliciosas.

Entonces, en 2022, creo que esto ya no es suficiente. No podemos simplemente escanear vulnerabilidades conocidas y detenernos ahí. Y sin embargo, eso es lo que hacen la mayoría de los productos populares de seguridad de la cadena de suministro, dejándote vulnerable. La cuestión es que puede tomar semanas o meses para que se descubra, informe y detecte una CVE o una vulnerabilidad conocida por las herramientas. Y simplemente no es lo suficientemente rápido. Así que puede valer la pena tomar un minuto aquí para distinguir rápidamente entre vulnerabilidades conocidas y malware porque son muy diferentes. Las vulnerabilidades son introducidas accidentalmente por los mantenedores, por los buenos, y tienen diferentes niveles de riesgo. A veces está bien enviar intencionalmente una vulnerabilidad conocida a producción si tiene un impacto bajo. Incluso si tienes vulnerabilidades en producción, es posible que no se descubran o exploten antes de que actualices a una versión corregida. Así que generalmente tienes tiempo para abordar este tipo de problemas. Ahora, el malware, por otro lado, es bastante diferente. El malware es introducido intencionalmente en un paquete por un atacante, casi nunca por el mantenedor. Siempre terminará mal si envías malware a producción. No tienes unos días o semanas para mitigar el problema. Necesitas detectarlo realmente antes de instalarlo en tu computadora portátil o en un servidor de producción. Pero en la cultura actual de desarrollo rápido, una dependencia maliciosa puede actualizarse y fusionarse en muy poco tiempo. Desafortunadamente, esto conduce a un mayor riesgo de ataques a la cadena de suministro. Porque cuanto más rápido actualices tus dependencias, menos ojos habrán tenido la oportunidad de revisar el código. Realmente creo que necesitamos un nuevo enfoque para detectar y bloquear dependencias maliciosas.

7. Vectores de Ataque a la Cadena de Suministro

Short description:

Antes de adentrarnos en los detalles de un ataque a la cadena de suministro, exploremos los diferentes vectores de ataque. El más común es el typo-squatting, donde los atacantes publican paquetes con nombres similares a los legítimos. Otro vector es la confusión de dependencias, donde los atacantes registran paquetes con el mismo nombre que las versiones internas, lo que lleva a una instalación accidental. El tercer vector son los paquetes secuestrados, donde los criminales se infiltran en paquetes populares para robar credenciales o abusar de los recursos para la minería de criptomonedas.

Pero antes de entrar en eso, pero antes de entrar en eso, echemos un vistazo más profundo a cómo funciona realmente un ataque a la cadena de suministro y su mecánica. Así que descargamos cada paquete en npm y pasamos unas semanas investigando. La descarga fue de 100 gigabytes de metadatos y 15 terabytes de paquetes comprimidos. Mientras investigábamos estos metadatos y todos estos paquetes, notamos algunas tendencias en los tipos de ataques que vimos. Así que voy a repasar estos ataques. Esto es lo que encontramos.

Entonces, hay vectores de ataque, que es cómo el atacante te engaña y logra que ejecutes su código en primer lugar. Y luego hay tácticas de ataque, que es lo que realmente hace el código de ataque o las técnicas que el atacante utiliza para ocultar su código. Así que hablemos de los vectores de ataque. El primer y más común vector de ataque es el typo-squatting. El typo-squatting es cuando un atacante publica un paquete que tiene un nombre muy similar al de un paquete legítimo y popular. Así que aquí puedes ver que hay dos paquetes con nombres muy similares y uno de ellos es malware y el otro es el paquete real. Pero supongo que sería difícil para ti saber eso sin abrir estos paquetes y ver qué hay dentro. Así que abramos el paquete de malware y veamos qué está haciendo. Aquí puedes ver que nuevamente está utilizando un script de instalación, que es una técnica muy común que utiliza el malware. Y si abres este script de instalación para ver el código, verás que el archivo está altamente ofuscado. Pero puedo decirte que, incluso sin saber exactamente qué hace este código, puedes apostar que no es algo que quieras ejecutar en tu máquina.

El siguiente vector de ataque que vimos se llama confusión de dependencias. Esto está bastante relacionado con el typo-squatting. La confusión de dependencias ocurre cuando una empresa publica paquetes en un registro interno de NPM y utiliza un nombre que aún no ha sido tomado en el registro público de NPM. Y luego, más tarde, un atacante puede registrar un paquete con el mismo nombre que la versión pública y confundir las herramientas internas para que instalen accidentalmente la versión pública. Por eso se llama ataque de confusión de dependencias. Al revisar los paquetes de NPM eliminados recientemente, pudimos encontrar un montón de ataques de confusión de dependencias probables, y la mayoría de estos paquetes tenían código malicioso. Todos estos paquetes tienen nombres que parecen entrar en conflicto con los nombres de los paquetes internos de la empresa. Y aquí puedes ver que muchas organizaciones diferentes, incluidos gobiernos, se vieron afectados por esto. Y aquí hay algunos más, claramente dirigidos a estas empresas específicas en esta lista.

Y finalmente, el tercer vector que vemos mucho son los paquetes secuestrados. Estos son los que generalmente se ven mucho en las noticias. Ya sabes, criminales y ladrones que encuentran formas de infiltrarse en nuestras comunidades e infectar paquetes populares. Una vez que infectan un paquete popular, ya sabes, una vez que lo controlan y pueden publicar en él, robarán credenciales o instalarán puertas traseras o abusarán de los recursos informáticos para la minería de criptomonedas.

8. Vulnerabilidades del Mantenedor y Tácticas de Ataque

Short description:

Los mantenedores pueden convertirse en víctimas de ataques debido a contraseñas débiles, malware en sus computadoras portátiles o ser engañados por actores maliciosos. Las tácticas de ataque incluyen el uso de scripts de instalación, el uso privilegiado de API y el código ofuscado. Los scripts de instalación, aunque tienen usos legítimos, pueden ser un vector para el malware. El uso privilegiado de API permite a los atacantes acceder a la red, al sistema de archivos y a las variables de entorno para robar secretos. El código ofuscado dificulta entender su propósito y los atacantes pueden publicar un código diferente en NPM que en GitHub.

Y así, sabes, estas son, sabes, estas ocurren por diversas razones. A veces es porque el mantenedor elige una contraseña débil o reutiliza la contraseña o tal vez el mantenedor tiene malware en sus computadoras portátiles. Esto también no es ayudado por el hecho de que NPM no exige la autenticación de dos factores para todas las cuentas actualmente, aunque están comenzando a exigir esto para las cuentas más populares. Y finalmente, a veces los mantenedores simplemente son engañados y dan acceso a un actor malicioso. Esto se debe en parte al hecho de que los mantenedores están sobrecargados y cuando alguien ofrece ayuda, a veces es difícil decir que no a la ayuda. Así que este también es un gran vector.

Ahora hablemos de algunas tácticas de ataque. Entonces, ¿qué hace realmente este código de ataque? Como mencionamos, los scripts de instalación son un gran vector. La mayoría del malware se encuentra en los scripts de instalación. Y así, esta es una cita de un artículo que mencionamos anteriormente, así que la mayoría de los paquetes maliciosos, en realidad el 56% comienza sus rutinas al momento de la instalación, lo cual puede ser debido a un manejo deficiente del código arbitrario durante la instalación. Entonces, en el administrador de paquetes npm, se permite que los paquetes simplemente digan, `oye, cuando se instala este paquete, queremos ejecutar algún código`. Y así, desafortunadamente, los scripts de instalación tienen algunos usos legítimos, por lo que no podemos desactivarlos. No es un problema fácil de resolver. Así que echemos un vistazo, solo a un ejemplo, otro ejemplo de un script de instalación. Nuevamente, lo verás aquí mismo en el archivo package.json. Muy común. Sí, entonces, el siguiente es el uso privilegiado de API. Vemos paquetes que acceden a la red, acceden al sistema de archivos, y acceden a las variables de entorno. Esto es muy, muy común porque cuando un atacante ejecuta código, lo que quieren hacer generalmente es robar algunos secretos, y necesitan la red para extraer esos secretos. Entonces, este es un ejemplo típico de malware que hace eso. Entonces puedes ver aquí que está haciendo una solicitud HTTP a una dirección IP, y está enviando algunos data. Los data que está enviando son process.env, que contiene todas las variables de entorno en el entorno. Y luego aquí hay realmente otro archivo que incluye, que es una técnica de exfiltración diferente que utiliza DNS en lugar de HTTP. Entonces, la forma en que funciona es que crea un resolvedor DNS, y luego realiza una, recopila las variables de entorno y luego realiza una búsqueda DNS con esas variables como subdominio. Así que es otra forma de sacar los data del sistema. Y finalmente, tenemos el código ofuscado. Así que echamos un vistazo a un ejemplo de esto anteriormente. Entonces, el código ofuscado como este es, obviamente, muy difícil de ver a simple vista qué está haciendo, aunque existen herramientas para intentar desofuscar código como este. También hay otro tipo de ofuscación, que es que los atacantes pueden publicar un código diferente en NPM que en GitHub. Y así, sabes, cuando hacen eso, como mencioné anteriormente, NPM no facilita ver qué código está realmente en el paquete de NPM.

9. Evaluando Paquetes y Protegiendo tu Aplicación

Short description:

Al desarrollar nuestro producto, el Wormhole, que permite compartir archivos de forma segura, priorizamos la seguridad y la privacidad. Implementamos prácticas de seguridad comunes, como considerar la seguridad desde el principio, escribir pruebas y realizar revisiones de código. Sin embargo, nos dimos cuenta de que había margen de mejora y comenzamos a explorar soluciones.

Y así, mucha gente que intenta evaluar un paquete se basará en el código que está en GitHub, y no hay garantía de que ese código sea el mismo. OK, ahora hablemos de cómo puedes proteger tu aplicación. Entonces, sabes, nos hicimos esta pregunta, cuando estábamos trabajando en, mi empresa estaba trabajando en un producto llamado Wormhole, que te permite compartir archivos con cifrado de extremo a extremo. Y nuestro objetivo era intentar construir la forma más segura y privada de enviar archivos. Así que, sabes, hicimos todas las cosas de security habituales que se nos ocurrieron. Sabes, pensamos en security desde el principio del proceso de design. Escribimos pruebas, hicimos revisiones de código, y fuimos bastante cuidadosos con las dependencias que elegimos usar. Pero, sabes, aún sentíamos que podíamos hacerlo mejor. Y así comenzamos a pensar muy cuidadosamente en este problema y en lo que podíamos hacer para mejorarlo.

10. Choosing Better Dependencies and Mindset Shift

Short description:

Elige mejores dependencias y asume la responsabilidad del comportamiento del código de código abierto en tu aplicación. La popular licencia MIT establece que el código de código abierto se proporciona tal cual, sin garantía ni responsabilidad. Necesitamos un cambio de mentalidad en cómo vemos el código abierto.

Entonces, el primer tipo de cosa que recomiendo es que simplemente intentes elegir mejores dependencias. Sabes, si implementas código en producción, eres en última instancia responsable de él. Y sabes, como industria, creo que necesitamos un cambio de mentalidad aquí porque la gente asume que pueden simplemente instalar cosas de internet y que será seguro. Y no siempre es cierto. Y si estás enviando código a producción que incluye código open-source, entonces, en última instancia, ese código es parte de tu aplicación. Y, por lo tanto, eres responsable en última instancia del comportamiento de ese código. Y, ya sabes, la licencia de open-source más popular, la licencia MIT, literalmente dice esto en la licencia. Dice que el código open-source se proporciona tal cual sin garantía de ningún tipo. Y en ningún caso el autor será responsable de cualquier reclamo daño o responsabilidad. Y, ya sabes, aunque esto es legalmente cierto, la mayoría de las personas no piensan en su open-source de esta manera. Y creo que realmente necesitamos un cambio de mentalidad.

11. Dependency Evaluation and Updating

Short description:

A menudo confiamos en heurísticas para elegir dependencias, sin examinar a fondo el código. Socket proporciona una herramienta para evaluar rápidamente la seguridad de los paquetes, resaltando los scripts de instalación y el código binario/nativo. También se muestran puntuaciones de calidad. Las dependencias de los paquetes, como el calendario de Angular, pueden tener un comportamiento invasivo, como ejecutar scripts de shell y acceder al sistema de archivos o a la red. Socket puede resaltar estos comportamientos en el código, facilitando la evaluación de los paquetes. Además, considera actualizar las dependencias en el momento adecuado para evitar vulnerabilidades conocidas y código obsoleto.

Lo otro es que muy pocos de nosotros realmente leemos el código que estamos enviando a producción. Por lo tanto, confiamos en otras heurísticas para ayudarnos a elegir dependencias. Tal vez, sabes, miramos si el código hace el trabajo. ¿Tiene una licencia open-source? ¿Tiene buena documentación? ¿Tiene muchas descargas y estrellas en GitHub? ¿Tiene commits recientes? ¿Tiene tipos? ¿Tiene pruebas? Y realmente no estamos profundizando en el código más allá de esto.

Entonces, lo que eso significa es que no somos conscientes de lo que el código puede estar haciendo. Y así, construimos una herramienta en Socket para ayudar con este problema. Así puedes obtener rápidamente una idea de la seguridad de un paquete. Y así es como se ve. Entonces, puedes ir a Socket y buscar paquetes para averiguar qué comportamiento tiene el paquete. Y en este ejemplo aquí, puedes ver que este paquete contiene scripts de instalación y eso se destaca de manera muy prominente en la página. Es lo primero que ves. Y este paquete también contiene código binario o nativo, lo que significa que no es fácil auditar el código. No es legible para humanos. Y así, ambos problemas se destacan. Y en este caso, no es necesariamente... Esto no es un ataque a la cadena de suministro en ningún sentido, pero es bueno que esto se destaque de manera muy prominente para que puedas tomar una decisión informada si quieres usar este paquete o no. También puedes ver que tenemos puntuaciones de calidad muy útiles que aparecen en la parte superior de la página también.

Ahora, veamos otro ejemplo. Entonces, este paquete aquí, Angular calendar, es bastante útil. Es un componente de calendario que aparece en la página y muestra un pequeño calendario. Pero si profundizas en sus dependencias, descubrirás que algunas de sus dependencias están haciendo cosas bastante invasivas. Así que aquí verás que una de sus dependencias contiene scripts de instalación. También ejecuta scripts de shell y accede al sistema de archivos y a la red. Entonces, esto probablemente no es algo que esperarías que un componente web hiciera, por lo que puede valer la pena investigar un poco más para averiguar qué está pasando aquí antes de usar este paquete. Lo otro que hacemos y que es bastante interesante es resaltar cuando los paquetes hacen estas cosas y ponerlo directamente en línea en el código. Entonces, en este paquete aquí, lo abrí para ver los archivos y pude ver aquí que el módulo accede a la red y también accede a las variables de entorno, y puedo ver las líneas exactas donde el paquete está haciendo cada una de estas cosas. Y así, se vuelve un poco más fácil tener una idea de lo que hace un paquete antes de ejecutarlo. Entonces, si quieres investigar paquetes en Socket antes de usarlos, esta es la URL que puedes usar y te recomiendo encarecidamente que eches un vistazo a algunos paquetes allí y uses esa información para tomar una decisión informada antes de seleccionar un paquete.

De acuerdo, lo otro que puedes hacer es considerar actualizar tus dependencias en el momento adecuado. Entonces, ¿qué quiero decir con esto? Bueno, hay una pregunta sobre qué tan rápido debes actualizar tus dependencias y esta es en realidad una pregunta con la que también luchamos en nuestro equipo. Entonces, si, ya sabes, puedes pensarlo como ¿deberíamos actualizar lentamente o deberíamos actualizar muy muy rápido y de manera agresiva? Si actualizas demasiado lentamente, estás expuesto a vulnerabilidades conocidas y estás ejecutando código antiguo que puede tener problemas, puede tener algunos errores que se han solucionado en la versión más reciente y así que hay algunas desventajas de actualizar demasiado lentamente.

12. Balancing Auditing and Automation

Short description:

Actualizar demasiado rápido te expone a ataques a la cadena de suministro, pero no hacer nada te deja vulnerable. Una auditoría completa es costosa y consume mucho tiempo, mientras que no hacer auditoría tiene sus desventajas. Un punto intermedio es utilizar la automatización para evaluar las dependencias y auditar manualmente las más sospechosas. La información de seguridad se muestra en las solicitudes de extracción, lo que permite a los desarrolladores abordar los problemas. El bot que creamos realiza un informe completo de salud sobre las nuevas dependencias y deja comentarios sobre posibles problemas. Es una forma económica de mejorar el proceso de revisión.

Por otro lado, si actualizas demasiado rápido, te expones a ataques a la cadena de suministro porque ahora estás ejecutando código que puede haber sido publicado, literalmente, ayer o en los últimos días, lo que significa que no has tenido tantos ojos capaces de revisar el código y, por lo tanto, al pensar en la seguridad, debes equilibrar este compromiso y realmente no hay una solución perfecta aquí. Es simplemente un problema difícil.

Otra idea es auditar cada dependencia. Entonces, si estás construyendo una aplicación verdaderamente crítica en términos de seguridad, como lo estábamos haciendo con Wormhole, entonces una opción es leer literalmente cada línea de código de tus dependencias. Así que si nuevamente colocamos esto en un eje que va desde una auditoría completa en un extremo, leyendo cada línea de código, hasta YOLOing en el otro extremo, y con YOLOing me refiero a no hacer nada. ¿Con qué detalle debes auditar tus dependencias? Y lo que ves aquí es que estamos en la misma situación. Tenemos compromisos y realmente no hay buenas soluciones. Hacer una auditoría completa es algo que solo las empresas más grandes y ricas parecen hacer en la práctica. Es mucho trabajo. Por lo general, necesitas tener un equipo de seguridad que revise cada uno de estos paquetes y también debemos aprobarlos uno por uno y agregarlos a una lista de permitidos, lo que es realmente lento y costoso debido al tiempo y el esfuerzo que requiere. Por otro lado, no hacer nada e instalar lo que quieras sin siquiera mirar el código tiene sus desventajas. Significa que estás expuesto a ataques a la cadena de suministro. Es arriesgado. Y, ya sabes, una violación o una mala publicidad en términos de seguridad también puede ser costosa, especialmente a medida que los reguladores comienzan a tomar medidas más estrictas sobre este tema. Y así, este es otro compromiso difícil. ¿Qué haces? Y la mayoría de los equipos, creo, optan por no hacer nada, pero creo que esto es simplemente un problema difícil.

Entonces, una cosa que intentamos hacer cuando estábamos construyendo Wormhole es pensar en un punto intermedio. ¿Hay alguna forma de utilizar la automatización para hacer algo intermedio? Y lo que queremos hacer y lo que terminamos haciendo es utilizar la automatización para evaluar automáticamente todas nuestras dependencias para que podamos utilizar el análisis estático para examinar los paquetes y tratar de encontrar malware, código oculto, errores tipográficos, ataques de suplantación de identidad y cosas por el estilo. Y de esa manera, solo podríamos auditar manualmente los paquetes más sospechosos para que pudiéramos utilizar nuestros recursos limitados del equipo para examinar el código de los paquetes más sospechosos y esa es la forma más impactante en la que podríamos utilizar nuestro tiempo. Y así, esto me parece mucho mejor que un enfoque de todo o nada donde auditas todo o simplemente esperas lo mejor y no miras nada. Y luego, otra cosa que queríamos hacer es asegurarnos de que la información de seguridad se mostrara directamente en las solicitudes de extracción para que los desarrolladores de nuestro equipo tuvieran la capacidad de resolver los problemas de seguridad que veían antes de implementar en producción. Entonces, ¿cómo se ve esto en realidad? Este es el bot que creamos. Se implementa como una aplicación de GitHub que puedes instalar en tu repositorio de GitHub. Y cada vez que ve que se ha modificado el archivo package JSON o el archivo yarn.lock, echará un vistazo a la nueva dependencia que se ha agregado y ejecutará un informe completo de salud sobre esa dependencia y si se encuentran problemas, dejará un comentario con el problema que se descubrió. Y de esa manera, el desarrollador que revisa la solicitud de extracción puede verlo y prestar atención a este posible problema. En esta captura de pantalla, puedes ver que accidentalmente instalé el paquete browser list en lugar de browser's list, lo cual es en realidad un error muy fácil de cometer. Y en realidad, por esa razón, browser list, el tipo de paquete, tiene algo así como 700,000 descargas al año. Así que esto es realmente muy útil. Esto es lo que complementa tu proceso de revisión y es muy económico, ya que solo plantea problemas que realmente valen la pena tu atención y se ejecuta automáticamente. Entonces, si quieres probar esta aplicación, en realidad la hemos publicado para que cualquiera la use.

13. Socket.dev: Funciones y Solicitud de Comentarios

Short description:

Es gratuito, por lo que puedes instalar nuestra aplicación de GitHub yendo a socket.dev. Tiene muchas características geniales como bloqueo de errores tipográficos, bloqueo de malware, detección de código oculto, detección de uso privilegiado de API y detección de actualizaciones sospechosas. Tenemos 70 detecciones en cinco categorías diferentes: riesgo de cadena de suministro, calidad, mantenimiento, vulnerabilidades conocidas y licencia. Nos enfocamos en problemas accionables que los usuarios desean conocer. Pruébalo en socket.dev, es gratuito para siempre en el código abierto, y comparte tus comentarios para mejorar la seguridad de la cadena de suministro en 2022. También estamos contratando en Socket si estás interesado en trabajar en este proyecto. Gracias por tu tiempo.

Es gratuito, por lo que puedes instalar nuestra aplicación de GitHub yendo a socket.dev y te recomiendo que lo pruebes y me digas qué piensas. Tiene muchas características geniales, por lo que realmente puede, ya sabes, bloquear errores tipográficos, como te mostré antes, pero también puede bloquear malware, detectar código oculto, detectar el uso privilegiado de API, como el uso de red del sistema de archivos, procesos secundarios, etc. Y también puede detectar actualizaciones sospechosas, es decir, actualizaciones que cambian significativamente el comportamiento del paquete. Así que tenemos muchas cosas que buscamos en los paquetes. En realidad, tenemos 70 detecciones en cinco categorías diferentes. Tenemos riesgo de cadena de suministro, calidad, mantenimiento, vulnerabilidades conocidas y licencia. Básicamente, escribimos reglas de análisis estático para todas estas detecciones. Puedes pensar en esto como un linter de alguna manera. Analiza el código del paquete y busca estos diferentes problemas. Intentamos enfocar todas las reglas en problemas que realmente quieres saber como usuario del paquete, y no en cosas que requieren mucho conocimiento de los detalles internos del paquete. Entonces, las cosas que encuentra deben ser accionables para ti como desarrollador que elige usar este paquete. Eso es lo que intentamos hacer en el desarrollo de nuestras reglas. Así que sí, si quieres probar esto, si quieres explorar nuestro sitio web y ver estos diferentes problemas, puedes probarlo en socket.dev. Y, ya sabes, lo hemos hecho gratuito para siempre en el código abierto. Y si tienes un repositorio privado, es gratuito mientras estamos en beta. Y, ya sabes, realmente quiero que la gente lo pruebe y comparta sus comentarios con nosotros. Porque este problema de seguridad de la cadena de suministro es grande y solo está creciendo. Y, ya sabes, realmente quiero que la comunidad comparta sus comentarios conmigo sobre esto. Y creo que juntos podemos hacer un buen trabajo mejorando la seguridad de la cadena de suministro en 2022 y hacer que 2022 no sea el año en que se destruya la cadena de suministro, sino más bien el año en que esté protegida mejor que nunca. Así que por favor comparte tus comentarios conmigo. Aquí está mi correo electrónico y mi Twitter. Y también estamos contratando en Socket si estás interesado en trabajar en este proyecto y ayudar a asegurar la cadena de suministro de software. Gracias por tu tiempo.

QnA

Detección y Bloqueo de Ataques a la Cadena de Suministro

Short description:

El orador discute las respuestas a una pregunta sobre si tienen un proceso para detectar y bloquear ataques a la cadena de suministro. Aproximadamente el 40% respondió que no, el 33% no sabe y el 27% respondió que sí. El orador expresa sorpresa y especula sobre los procesos utilizados por aquellos que respondieron que sí. El orador también menciona la confusión entre el escaneo de vulnerabilidades y la detección de ataques a la cadena de suministro. La pregunta del público es sobre el almacenamiento utilizado para los paquetes comprimidos y el orador explica que actualmente se utiliza Amazon S3. También mencionan tener un servidor para el desarrollo local y el uso de un subconjunto más pequeño de NPM para algunos desarrolladores. El miembro del público también comenta sobre la responsabilidad de la calidad del código.

Entonces, la pregunta fue si uno de tus paquetes tiene un ataque a la cadena de suministro hoy, ¿tienes un proceso que lo detectará y bloqueará? Desafortunadamente, el 40% dice que no. El 33% no lo sabe. Y el 27% dice que sí. Estamos realmente contentos de que aproximadamente un tercio diga que sí, o tal vez un cuarto. ¿Era esto lo que esperabas? Me pregunto qué proceso están utilizando. Tal vez instalaron Socket durante la charla y tal vez lo agregaron a sus repositorios de GitHub para protegerse. O tal vez están utilizando algún otro proceso, como un escáner de vulnerabilidades, y tal vez porque creo que tal vez me preguntarás sobre esto, pero a veces hay un poco de confusión entre el escaneo de vulnerabilidades y la búsqueda de ataques a la cadena de suministro. Pero, ¿quién sabe? Tal vez tengan un proceso. No estoy seguro. Sí, fue un poco sorprendente. Sí, sí. Bueno, veamos en un mes o tal vez dos, cuando las personas hayan tenido la oportunidad de implementar Socket. ¿Cuántas personas seguirán respondiendo que no?

Entonces vamos a pasar a las preguntas del público. La primera es de Cici Miller. ¿Dónde encontraste 50 terabytes de almacenamiento? También quiere esto en su vida. Sí, actualmente estamos utilizando Amazon S3 para almacenar todos los paquetes comprimidos y básicamente hacer un clon completo de NPM. Originalmente, estábamos utilizando Backblaze porque tienen un almacenamiento un poco más barato. Tienen algo similar a S3, pero de todos modos, sí, es fácil. El almacenamiento en la nube es barato. Bueno, relativamente barato, supongo. No es barato si lo estás haciendo como un proyecto secundario, pero para una empresa, es algo asequible. Creo que estamos pagando un par de cientos de dólares al mes o algo así para almacenar todo en S3, así que no es demasiado loco. Para el desarrollo local, tenemos un servidor en nuestro apartamento que almacena el clon completo de todo localmente para poder hacer un desarrollo local rápido, pero no todos los desarrolladores del equipo de Socket tienen un clon completo de NPM localmente para trabajar. Por lo tanto, solo usan un subconjunto más pequeño cuando están desarrollando en Socket. Sí, exactamente, por lo que en el futuro podrías tener empleados remotos que trabajen con el subconjunto. CcMailer también dijo: `No es mi código, no es mi problema`. Se usa tan a menudo como una excusa para los problemas causados. Intento asegurarme de que sea un buen código antes de que llegue allí. No soy perfecto, pero atrapo la mayoría de los problemas temprano. Bueno, solo más una declaración que una pregunta, supongo.

Responsabilidad de las Dependencias y el Código

Short description:

Al implementar una aplicación, eres en última instancia responsable de todo lo que hace. La mentalidad de 'no es mi código, no es mi problema' ya no es una buena excusa. Con la prevalencia de los ataques a la cadena de suministro, es importante tomar medidas para minimizar el riesgo y ser un mejor desarrollador. Si agregas una dependencia, se convierte en tu código y tu problema si compromete la seguridad de tu producto.

Pero sí, es bueno escucharlo. Iba a decir que creo que la mentalidad de 'no es mi código, no es mi problema' es... Tal vez no entendí lo que estaba diciendo, pero creo que, como dije en mi charla, creo que al final del día, cuando implementas una aplicación, eres en última instancia responsable de todo lo que hace la aplicación. Quiero decir, sí, supongo que podrías decir que no había nada que pudiera haber hecho. No sabíamos que la dependencia iba a comportarse de esta manera. Así que no es mi culpa. Pero creo que ahora que Socket existe y ahora que creo que el problema de los ataques a la cadena de suministro es cada vez más prevalente, no sé si eso es una excusa realmente válida. No sé. Creo que definitivamente hay cosas que puedes hacer para que sea menos probable y al menos examinar los paquetes más sospechosos, los cambios más sospechosos que se realizan en los paquetes y analizarlos más de cerca. Entonces, sí, no sé. Creo que para ser un mejor desarrollador, para ser lo mejor que puedas ser, creo que parte de eso es tratar de pensar en cómo asegurarte de que los paquetes no estén comprometidos o secuestrados y hacer lo que puedas para ayudar. Sí. Sí. Y no es mi código, no es mi problema. Bueno, si estás agregando la dependencia, entonces es un poco tu código, ¿verdad? Entonces, se convierte en tu problema porque tu producto está roto o inseguro.

NPM Audit y Socket: Diferentes Enfoques

Short description:

La auditoría de NPM es excelente para informar sobre vulnerabilidades, pero puede ser ruidosa con muchos problemas de bajo impacto. El enfoque debería estar en solucionar las vulnerabilidades de alto impacto y críticas. Existe una discusión sobre cómo mejorar la auditoría de NPM para que sea más útil. Socket se enfoca en los ataques a la cadena de suministro y tiene como objetivo proporcionar menos pero advertencias más graves. La auditoría de NPM y Socket pueden funcionar bien juntos, ya que sirven para diferentes propósitos.

Entonces, pregunta de AntiTomic. Hola, para nosotros una charla increíble y muy útil. Gracias. También me gusta mucho cómo suena Socket. ¿Qué opinas de soluciones como la auditoría de NPM? ¿Y es mejor usar una solución como Socket y similares?

Bueno, supongo. Sí. Creo que la auditoría de NPM es excelente. Es genial tener informes de vulnerabilidades integrados directamente en NPM. Puede decirte cuando estás instalando paquetes que tienen vulnerabilidades conocidas. Pero diría que muchas personas ignoran la auditoría de NPM porque informa sobre muchas cosas. Debo admitir que muchos de mis proyectos e incluso probablemente Socket mismo tienen algunas vulnerabilidades de bajo impacto que informa la auditoría de NPM, y no tenemos una urgencia inmediata para solucionarlas porque las hemos analizado y hemos dicho, sabes, esto, sí, puedo ver cómo alguien podría usar esto para ralentizar nuestro servidor web, es decir, una denegación de servicio de expresiones regulares lentas es algo común que verás, donde es como, sabes, está alguna expresión regular lenta en el servidor, y alguien podría usar eso para ralentizar tu servidor, hacer que pase tiempo procesando una expresión regular pesada. Pero al final del día, ese tipo de cosas no suelen ser un problema en la práctica, porque, ya sabes, un atacante tiene que encontrarlo, tiene que explotarlo y tiene que usarlo en tu contra. Y probablemente, la mayoría de esas cosas ni siquiera son captadas por un atacante real. ¿Verdad? Pero no estoy diciendo que no debas intentar actualizar y eliminar eso de tu código. Obviamente, eso es bueno, debes hacerlo. Pero lo que quiero decir es que muchas veces, ya sabes, muchas aplicaciones tienen esos problemas, hay tantos de ellos. Y realmente, lo importante es solucionar los problemas de alto impacto y críticos y no preocuparse tanto por los de bajo impacto. Y hay tantos informes que se generan que, creo, si tuviera que decir lo que pienso sobre la auditoría de npm, es genial. Es increíble que esté creando conciencia sobre este problema. Es un poco ruidoso para mi gusto. Y creo que ha habido un poco de discusión en la comunidad sobre si la auditoría de npm es demasiado ruidosa para ser útil. ¿Es demasiado, cómo podemos mejorarla básicamente, para que sea más útil para los usuarios finales? Porque creo que ahora mismo, casi ves en cada instalación que haces que la auditoría de npm se quejará de algo, ¿verdad? Y en algún momento, como humano, simplemente comienzas a tener lo que llaman ceguera a las advertencias o ceguera a las alertas, simplemente ves la misma alerta tantas veces que comienzas a ignorarla, ¿verdad? Así que sí, creo que nuestro objetivo con Socket es, ya sabes, nos enfocamos en los ataques a la cadena de suministro, que son muy diferentes a las vulnerabilidades. Cuando ocurren, son muy malos. Son muy graves, es algo que quieres detectar antes incluso de ejecutar ese código en tu computadora. Y creo que queremos tener menos alertas, menos advertencias que la auditoría de npm. Pero cuando emitimos una advertencia, queremos que sea porque está sucediendo algo muy grave. Y queremos intervenir y proteger las aplicaciones de las personas. Así que sí, creo que pueden funcionar bien juntos. Solo creo que están haciendo cosas diferentes. Sí, no es una competencia. Es que trabajan uno al lado del otro y hacen

Ad Sizes and Socket Integrations

Short description:

El orador discute los diferentes tamaños de los anuncios en línea y sus dimensiones. Mencionan los tamaños estándar como 728 por 90 y 300 por 250. La siguiente pregunta es sobre Socket y su disponibilidad como una aplicación de GitHub o una herramienta CLI para GitLab CI/CD. El orador explica que Socket se enfoca en analizar paquetes npm y detectar 70 problemas. Mencionan sus planes de proporcionar integraciones con GitHub, GitLab y otras plataformas, incluyendo una herramienta CLI, una API y una aplicación de GitHub. La herramienta CLI permitirá a los usuarios incorporar Socket en sus propios scripts y flujos de trabajo.

cosas diferentes. Sí. Sí, exactamente. Sí, exactamente. Lo que mencionaste sobre la apariencia, me recuerda cómo veo los anuncios, básicamente en línea. Ni siquiera los veo más. Exactamente. Y cualquier imagen que tenga esa forma rectangular, o esa forma cuadrada. Es como si tus ojos... 728 por 90. Sí, si es 728 por 90, sí, conoces las dimensiones exactas. Sí, puede que haya trabajado en eso. ¿Quieres saber los otros tamaños estándar? Sí, es como 300 por 250 o algo así. Creo que conozco algunos de ellos, pero no vamos a entrar en eso. La siguiente pregunta es de Ler. Socket se ve increíble. ¿Solo hay una aplicación de GitHub o también una herramienta CLI disponible que se pueda usar para GitLab CI, CD, por ejemplo? Sí, gran pregunta. Con Socket en este momento, realmente nos hemos centrado en resolver la parte más difícil del problema, que es básicamente poder analizar cada paquete npm y encontrar todos estos 70 problemas que podemos detectar. Y así tenemos todos estos datos realmente buenos. Y desafortunadamente, gran parte de eso es que tienes que ir a nuestro sitio web y escribir un paquete específico para buscar nuestro informe sobre él. Y lo que estamos trabajando ahora en las próximas semanas y meses es en tantas integraciones como sea posible. Hay diferentes formas en que las personas pueden consumir los datos. La aplicación de GitHub es una en la que estamos trabajando un CLI también, que esperamos que esté listo en, diría yo, probablemente en abril. Si no, a principios de abril. Y estamos trabajando en una API, una API REST y una API de Node.js. Y todas estas diferentes formas. Así que GitLab, GitHub Actions, hay tantas formas en que la gente ha estado pidiendo, ya sabes, para encajarlo en su flujo de trabajo. Y obviamente queremos admitir tantos como podamos. Y creo que una cosa buena de un CLI, por supuesto, es que la gente puede tomar el CLI y usarlo

Continuing the Conversation and Conclusion

Short description:

Estamos trabajando en ello. Gracias por unirse a nosotros. Si desea continuar la conversación, contácteme en Twitter o por correo electrónico. Espero verte pronto de nuevo.

en sus propios scripts y en sus propios flujos de trabajo. Así que eso les permitirá desbloquear esa capacidad. Así que sí, definitivamente está en nuestros planes hacerlo. Y estamos trabajando en ello. Genial. Muy bueno escucharlo. Bueno, eso es todo el tiempo que tuvimos para preguntas y respuestas. Así que quiero agradecerte por unirte a nosotros. Si quieres continuar las discusiones, puedes hacerlo en su Sala de Oradores. Oh, no tienes una Sala de Oradores. Lo siento. No puedes. Lo siento. Muchas gracias por unirte. Solo envíame un mensaje en Twitter, ¿sabes? Envíame un mensaje en Twitter o envíame un correo electrónico. Me encantaría saber de la gente. Soy muy, ya sabes, te responderé por correo electrónico.

Muy bien. Es bueno escucharlo. Así que lo escuchaste aquí primero, si quieres continuar la conversación, puedes hacerlo en este sitio web con un bluebird. Muchas gracias por unirte a nosotros. Espero verte pronto de nuevo. Gracias, Mateen. Adió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

Levelling up Monorepos with npm Workspaces
DevOps.js Conf 2022DevOps.js Conf 2022
33 min
Levelling up Monorepos with npm Workspaces
Top Content
Learn more about how to leverage the default features of npm workspaces to help you manage your monorepo project while also checking out some of the new npm cli features.
It's a Jungle Out There: What's Really Going on Inside Your Node_Modules Folder
Node Congress 2022Node Congress 2022
26 min
It's a Jungle Out There: What's Really Going on Inside Your Node_Modules Folder
Top Content
Do you know what’s really going on in your node_modules folder? Software supply chain attacks have exploded over the past 12 months and they’re only accelerating in 2022 and beyond. We’ll dive into examples of recent supply chain attacks and what concrete steps you can take to protect your team from this emerging threat.
You can check the slides for Feross' talk here.
Automating All the Code & Testing Things with GitHub Actions
React Advanced Conference 2021React Advanced Conference 2021
19 min
Automating All the Code & Testing Things with GitHub Actions
Top Content
Code tasks like linting and testing are critical pieces of a developer’s workflow that help keep us sane like preventing syntax or style issues and hardening our core business logic. We’ll talk about how we can use GitHub Actions to automate these tasks and help keep our projects running smoothly.
Fine-tuning DevOps for People over Perfection
DevOps.js Conf 2022DevOps.js Conf 2022
33 min
Fine-tuning DevOps for People over Perfection
Top Content
Demand for DevOps has increased in recent years as more organizations adopt cloud native technologies. Complexity has also increased and a "zero to hero" mentality leaves many people chasing perfection and FOMO. This session focusses instead on why maybe we shouldn't adopt a technology practice and how sometimes teams can achieve the same results prioritizing people over ops automation & controls. Let's look at amounts of and fine-tuning everything as code, pull requests, DevSecOps, Monitoring and more to prioritize developer well-being over optimization perfection. It can be a valid decision to deploy less and sleep better. And finally we'll examine how manual practice and discipline can be the key to superb products and experiences.
Towards a Standard Library for JavaScript Runtimes
Node Congress 2022Node Congress 2022
34 min
Towards a Standard Library for JavaScript Runtimes
Top Content
You can check the slides for James' talk here.
Out of the Box Node.js Diagnostics
Node Congress 2022Node Congress 2022
34 min
Out of the Box Node.js Diagnostics
In the early years of Node.js, diagnostics and debugging were considerable pain points. Modern versions of Node have improved considerably in these areas. Features like async stack traces, heap snapshots, and CPU profiling no longer require third party modules or modifications to application source code. This talk explores the various diagnostic features that have recently been built into Node.
You can check the slides for Colin's talk here. 

Workshops on related topic

Node.js Masterclass
Node Congress 2023Node Congress 2023
109 min
Node.js Masterclass
Top Content
Workshop
Matteo Collina
Matteo Collina
Have you ever struggled with designing and structuring your Node.js applications? Building applications that are well organised, testable and extendable is not always easy. It can often turn out to be a lot more complicated than you expect it to be. In this live event Matteo will show you how he builds Node.js applications from scratch. You’ll learn how he approaches application design, and the philosophies that he applies to create modular, maintainable and effective applications.

Level: intermediate
Build and Deploy a Backend With Fastify & Platformatic
JSNation 2023JSNation 2023
104 min
Build and Deploy a Backend With Fastify & Platformatic
WorkshopFree
Matteo Collina
Matteo Collina
Platformatic allows you to rapidly develop GraphQL and REST APIs with minimal effort. The best part is that it also allows you to unleash the full potential of Node.js and Fastify whenever you need to. You can fully customise a Platformatic application by writing your own additional features and plugins. In the workshop, we’ll cover both our Open Source modules and our Cloud offering:- Platformatic OSS (open-source software) — Tools and libraries for rapidly building robust applications with Node.js (https://oss.platformatic.dev/).- Platformatic Cloud (currently in beta) — Our hosting platform that includes features such as preview apps, built-in metrics and integration with your Git flow (https://platformatic.dev/). 
In this workshop you'll learn how to develop APIs with Fastify and deploy them to the Platformatic Cloud.
0 to Auth in an Hour Using NodeJS SDK
Node Congress 2023Node Congress 2023
63 min
0 to Auth in an Hour Using NodeJS SDK
WorkshopFree
Asaf Shen
Asaf Shen
Passwordless authentication may seem complex, but it is simple to add it to any app using the right tool.
We will enhance a full-stack JS application (Node.JS backend + React frontend) to authenticate users with OAuth (social login) and One Time Passwords (email), including:- User authentication - Managing user interactions, returning session / refresh JWTs- Session management and validation - Storing the session for subsequent client requests, validating / refreshing sessions
At the end of the workshop, we will also touch on another approach to code authentication using frontend Descope Flows (drag-and-drop workflows), while keeping only session validation in the backend. With this, we will also show how easy it is to enable biometrics and other passwordless authentication methods.
Table of contents- A quick intro to core authentication concepts- Coding- Why passwordless matters
Prerequisites- IDE for your choice- Node 18 or higher
Building a Hyper Fast Web Server with Deno
JSNation Live 2021JSNation Live 2021
156 min
Building a Hyper Fast Web Server with Deno
WorkshopFree
Matt Landers
Will Johnston
2 authors
Deno 1.9 introduced a new web server API that takes advantage of Hyper, a fast and correct HTTP implementation for Rust. Using this API instead of the std/http implementation increases performance and provides support for HTTP2. In this workshop, learn how to create a web server utilizing Hyper under the hood and boost the performance for your web apps.
Deploying React Native Apps in the Cloud
React Summit 2023React Summit 2023
88 min
Deploying React Native Apps in the Cloud
WorkshopFree
Cecelia Martinez
Cecelia Martinez
Deploying React Native apps manually on a local machine can be complex. The differences between Android and iOS require developers to use specific tools and processes for each platform, including hardware requirements for iOS. Manual deployments also make it difficult to manage signing credentials, environment configurations, track releases, and to collaborate as a team.
Appflow is the cloud mobile DevOps platform built by Ionic. Using a service like Appflow to build React Native apps not only provides access to powerful computing resources, it can simplify the deployment process by providing a centralized environment for managing and distributing your app to multiple platforms. This can save time and resources, enable collaboration, as well as improve the overall reliability and scalability of an app.
In this workshop, you’ll deploy a React Native application for delivery to Android and iOS test devices using Appflow. You’ll also learn the steps for publishing to Google Play and Apple App Stores. No previous experience with deploying native applications is required, and you’ll come away with a deeper understanding of the mobile deployment process and best practices for how to use a cloud mobile DevOps platform to ship quickly at scale.