3 lecciones inspiradas en los Jedi para llevar la seguridad de JavaScript al siguiente nivel
4 de mayo de 2022
0 minutos de lecturaQuizás pienses que Star Wars es una película solo para geeks, pero ¿y si te dijera que contiene profundas lecciones de vida que puedes aplicar a las prácticas de seguridad para desarrolladores? ¡Prepara tu sable de luz y alístate para sumergirte en la seguridad de JavaScript!
Star Wars es una épica serie de películas ambientadas en el espacio, escrita y dirigida por George Lucas, que muchas veces no necesita presentación. Soy fan y me identifico con muchas de las frases que comparten los Caballeros Jedi en las películas.
Como quizás ya imaginaste, soy un gran fan del icónico Maestro Jedi Yoda y creo que muchas de sus enseñanzas son profundas lecciones de vida y de seguridad de las aplicaciones.
«No lo intentes. Hazlo o no lo hagas. No hay intentos». —Yoda, Star Wars: Episodio V - El Imperio contraataca
A veces, empezar algo nuevo puede parecer abrumador, sobre todo si está un poco fuera de tu zona de confort y de tu ámbito de experiencia. Si la seguridad de las aplicaciones te parece así, enfócate en hacerlo, en lugar de intentar que quede perfecto.
¿Deberías hacer revisiones de código seguro o simplemente aplicar pruebas dinámicas de seguridad de aplicaciones? ¿Deberías usar un flujo de trabajo de desarrollo con un hook previo para encontrar secretos o integrar esto mediante una aplicación de GitHub? ¿Qué herramientas necesitas para integrar pruebas de seguridad en tu pipeline de CI?
Hay tantas preguntas que me gusta esta frase de Yoda en la película: «Hazlo o no lo hagas. No hay intentos». Cuando se trata de prácticas de código seguro, cualquier comienzo es un buen comienzo. Se trata de aplicar capas de seguridad (como en el concepto de defensa en profundidad).
Aquí tienes algunas herramientas prácticas de seguridad para JavaScript que puedes integrar hoy mismo sin complicaciones:
¿Quieres detectar y mitigar eficazmente los ataques de código fuente troyano en bases de código JavaScript con ESLint? Consulta el repositorio de GitHub para obtener instrucciones rápidas de instalación y uso de eslint-anti-trojan-source y lee nuestro artículo del blog para descubrir por qué es importante.
Trabajas habitualmente con archivos de bloqueo de npm y yarn, pero ¿te has planteado que los archivos de bloqueo de npm pueden ser un punto ciego de seguridad que permite inyectar módulos maliciosos? Consulta el proyecto lockfile-lint e intégralo en tu conjunto de herramientas de linting.
¿Has oído hablar de la exfiltración de datos de empresas Fortune 500 mediante un ataque a la cadena de suministro de código abierto llamado Dependency Confusion? Integra
snyncen tu CI para prevenir este tipo de problemas.Nunca fue tan fácil corregir vulnerabilidades de seguridad de código abierto como con Snyk. Solo ejecuta Snyk CLI con
npm install -g snyky agrega un pasosnyk testa tus scripts de npm run. Importa tus repositorios de GitHub a la interfaz de Snyk para recibir notificaciones oportunas sobre nuevas vulnerabilidades, análisis estático de código y análisis de archivos de manifiesto, como los de Terraform, proyectos de Kubernetes y contenedores de Docker, mediante elDockerfile.¿Qué te parece recibir información sobre vulnerabilidades en tu propio código y en dependencias de terceros? La extensión de Snyk para IDE te permite revisar mientras programas y hacer que la seguridad sea eficaz y fluida.

«Tus ojos pueden engañarte; no confíes en ellos». —Obi-Wan Kenobi, Star Wars: Episodio IV - Una nueva esperanza
Seamos sinceros: programar es difícil. Escribir código es difícil. Leer código es aún más difícil, pero es una habilidad que rinde frutos a largo plazo, porque lees más código del que escribes.
Como desarrolladores, nos hemos entrenado para identificar patrones específicos en la lógica y el estilo del código, lo que nos ayuda a entender su significado y a detectar errores que se apartan de esos patrones. Sin embargo, a menudo olvidamos buscar patrones relacionados con la seguridad del código.
Esta falta de análisis de seguridad ha permitido que algunas vulnerabilidades existan durante años antes de que alguien las detecte. La divulgación del año pasado sobre una vulnerabilidad de alta gravedad en el programa sudo de Linux, identificada como CVE-2021-3156, es un ejemplo perfecto. Esta vulnerabilidad, que permite escalar privilegios al superusuario root mediante el comando sudoedit -s, permaneció oculta a plena vista durante diez años en un popular proyecto de código abierto antes de ser descubierta.
Para evitar descuidos similares, aquí tienes algunos consejos para reforzar la seguridad de tus proyectos de JavaScript.
Practica las revisiones de código seguro. Para saber en qué aspectos de tu base de código enfocarte, consulta las 8 mejores prácticas de revisión de código seguro de Trisha Gee y Brian Vermeer.
Si desarrollas en Go, presta atención a los ataques de inyección y a las entradas de usuario peligrosas. Además de estas reglas generales, lee los consejos prácticos de Eric Smalling y Gerred Dillion sobre las mejores prácticas de seguridad en Go para obtener más recomendaciones.
Aprende a evitar los ataques de typosquatting, responsables de muchos módulos maliciosos en el ecosistema de npm.
Evita los paquetes de npm que parecen tener mucha popularidad, pero presentan señales de mantenimiento deficientes. Por ejemplo, el popular cliente HTTP
requestpara Node.js recibe unos 20,000,000 de descargas por semana. Esto podría hacerte pensar que es una opción sólida, pero su mantenedor lo marcó como obsoleto, y el último commit y lanzamiento fueron hace dos años. Usa Snyk Advisor para conocer mejor las señales de estado de los paquetes y mantenerte al día.

«Difícil de ver. Siempre en movimiento está el futuro». —Yoda, El Imperio contraataca
La seguridad de las aplicaciones es un objetivo en constante movimiento. El software evoluciona rápidamente y, con él, avanza la investigación en seguridad y se descubren nuevas vulnerabilidades. A medida que un ecosistema de software madura y se adopta más, también aumentan las probabilidades de que los investigadores de seguridad lo noten. El ecosistema de módulos de código abierto de npm para JavaScript es un buen ejemplo.
¿Por qué integrar Snyk en tu repositorio de Git? Quizás ya corregiste todas las vulnerabilidades de seguridad que afectan hoy a tu base de código, pero es imposible hacer un seguimiento de todos los CVE y las vulnerabilidades que aparecerán en el futuro. Por suerte, Snyk puede ayudarte. Cuando conectas tu repositorio de código fuente a Snyk, se monitorea a diario y recibes alertas cuando aparecen nuevas vulnerabilidades. Si hay una corrección recomendada, Snyk abre automáticamente un pull request en tu repositorio. Para mitigar el riesgo, solo tienes que revisar el cambio de código y fusionarlo.

La contaminación de prototipos no era común hace cinco años. Sin embargo, hoy vemos con frecuencia proyectos de JavaScript afectados por las características de herencia prototípica del estándar ECMAScript. Nuestra incapacidad para prever nuevas vulnerabilidades y la falta de tiempo libre hacen que mantenerse al día con los conceptos de seguridad sea todo un reto. Por suerte, el centro de recursos Snyk Learn está aquí para ayudarte. Es completamente gratis, no requiere registro y está dedicado por completo a enseñanzas breves sobre conceptos de seguridad de aplicaciones. Incluso puedes elegir lecciones según el ecosistema de tu lenguaje de programación preferido, ya sea Java, JavaScript, Python u otros.

Para terminar, ¡te deseo un feliz 4 de mayo y que la Fuerza te acompañe!



