i meetup owasp - seguridad en nodejs
TRANSCRIPT
Seguridad en NodeJSOWASP Top 10 Vulnerabilities
Acerca de míRaúl Requero
Arquitecto en Vizzuality
Coorganizador de OWASP Madrid
https://github.com/rrequero
@rrequero
OWASP Top 10 aplicado a NodeJS
Acerca de la charla de hoy…
OWASP Top 102013
A1-InjectionA2-Broken Authentication and Session Management
A3 - XSS
A4-Insecure Direct Object References
A5-Security Misconfiguration
A6-Sensitive Data Exposure
A7-Access Control A8-Cross-Site Request Forgery (CSRF)
A9-Using Components with Known Vulnerabilities
A10-Unvalidated Redirects and Forwards
https://www.owasp.org/index.php/Top_10_2013-Top_10
OWASP Node Goat Project
https://github.com/OWASP/NodeGoat
A1-Injection
A1 - Injection
Nunca ejecutar querys con parámetros del front sin comprobarlos
Utilizar los sistemas de generación de querys de los orm’s
A1 - Injection
A1 - Injection
A2-Broken Authentication and Session Management
A2 - Broken Authentication and Session Management
No guardar las password en claro en la bbdd
No enviar el session id en la url
Usar bcrypt y guardar las password encriptada
A2 - Broken Authentication and Session Management
A2 - Broken Authentication and Session Management
A3 - XSS
A3-Cross-Site Scripting (XSS)
Escapar siempre el texto que envía el usuario, al guardarlo y al mostrarlo en el html
Plantillas en servidor
React y Angular escapan todo el contenido que pintan por defecto para prevenir un XSS
A3-Cross-Site Scripting (XSS)
A4-Insecure Direct Object References
A4-Insecure Direct Object References
No expongas información sensible de la implementación al usuario.
Ejemplo: No envíes el id del usuario logado en la url para utilizarlo después.
A4-Insecure Direct Object References
Solución: Obtén de la sesión el dato que necesitas (en el caso de datos del usuario logado)
A5-Security Misconfiguration
A5 - Security Misconfiguration
No expongas más información de tu aplicación de la estrictamente necesaria
Ejemplo: http://www.mrlooquer.com/list?q=%22X-Powered-By:%20Express%22&page=2
A5-Security Misconfiguration
https://github.com/helmetjs
A6-Sensitive Data Exposure
A6 - Sensitive Data Exposure
Encripta todas las comunicaciones con tu aplicación para evitar robos de información
Guarda unicamente lo estrictamente necesario y la información necesaria y sensible guardala encriptada.
A6 - Sensitive Data Exposure
A7 - Access Control
A7 - Access Control
Securiza el acceso a los endpoints de la aplicación según el rol que puede acceder
A7 - Access Control
A8-Cross-Site Request Forgery (CSRF)
A8 - Cross-Site Request Forgery (CSRF)
Agrega un token a todas tus llamadas POST, PUT y PATCH que identifican el origen de la llamada.
De este modo evitaras que un código malicioso pueda hacer llamadas a tus endpoints que tu no controles.
A8 - Cross-Site Request Forgery (CSRF)
https://github.com/expressjs/csurf
A9-Using Components with Known Vulnerabilities
A9 - Using Components with Known Vulnerabilities
No ejecutes el servidor con permisos de root
Usa JSHint/JSLint
Intenta utilizar librerías que estén suficientemente testadas
Mantén actualizadas las librerías que utilizas para evitar posibles vulnerabilidades en las librerías
Utiliza el paquete nsp y chequea regularmente las librerías que utilizas en busca de posibles vulnerabilidades
https://nodesecurity.io/opensource
A10-Unvalidated Redirects and Forwards
A10 - Unvalidated Redirects and Forwards
No hagas un redirect al usuario a urls que vienen definidas en query params, etc sin chequear el destino
Intenta siempre que las urls donde redirigas no se estén definidas en un entorno donde puedan ser cambiadas por un código malicioso
¿Preguntas?