i meetup owasp - seguridad en nodejs

40
Seguridad en NodeJS OWASP Top 10 Vulnerabilities

Upload: raul-requero-garcia

Post on 14-Apr-2017

349 views

Category:

Software


0 download

TRANSCRIPT

Page 1: I  Meetup OWASP - Seguridad en NodeJS

Seguridad en NodeJSOWASP Top 10 Vulnerabilities

Page 2: I  Meetup OWASP - Seguridad en NodeJS

Acerca de míRaúl Requero

Arquitecto en Vizzuality

Coorganizador de OWASP Madrid

https://github.com/rrequero

@rrequero

Page 3: I  Meetup OWASP - Seguridad en NodeJS

OWASP Top 10 aplicado a NodeJS

Acerca de la charla de hoy…

Page 4: I  Meetup OWASP - Seguridad en NodeJS

OWASP Top 102013

Page 5: I  Meetup OWASP - Seguridad en NodeJS

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

Page 6: I  Meetup OWASP - Seguridad en NodeJS

https://www.owasp.org/index.php/Top_10_2013-Top_10

Page 7: I  Meetup OWASP - Seguridad en NodeJS

OWASP Node Goat Project

https://github.com/OWASP/NodeGoat

Page 8: I  Meetup OWASP - Seguridad en NodeJS

A1-Injection

Page 9: I  Meetup OWASP - Seguridad en NodeJS

A1 - Injection

Nunca ejecutar querys con parámetros del front sin comprobarlos

Utilizar los sistemas de generación de querys de los orm’s

Page 10: I  Meetup OWASP - Seguridad en NodeJS

A1 - Injection

Page 11: I  Meetup OWASP - Seguridad en NodeJS

A1 - Injection

Page 12: I  Meetup OWASP - Seguridad en NodeJS

A2-Broken Authentication and Session Management

Page 13: I  Meetup OWASP - Seguridad en NodeJS

A2 - Broken Authentication and Session Management

No guardar las password en claro en la bbdd

No enviar el session id en la url

Page 14: I  Meetup OWASP - Seguridad en NodeJS

Usar bcrypt y guardar las password encriptada

A2 - Broken Authentication and Session Management

Page 15: I  Meetup OWASP - Seguridad en NodeJS

A2 - Broken Authentication and Session Management

Page 16: I  Meetup OWASP - Seguridad en NodeJS

A3 - XSS

Page 17: I  Meetup OWASP - Seguridad en NodeJS

A3-Cross-Site Scripting (XSS)

Escapar siempre el texto que envía el usuario, al guardarlo y al mostrarlo en el html

Page 18: I  Meetup OWASP - Seguridad en NodeJS
Page 19: I  Meetup OWASP - Seguridad en NodeJS

Plantillas en servidor

React y Angular escapan todo el contenido que pintan por defecto para prevenir un XSS

A3-Cross-Site Scripting (XSS)

Page 20: I  Meetup OWASP - Seguridad en NodeJS

A4-Insecure Direct Object References

Page 21: I  Meetup OWASP - Seguridad en NodeJS

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.

Page 22: I  Meetup OWASP - Seguridad en NodeJS

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)

Page 23: I  Meetup OWASP - Seguridad en NodeJS

A5-Security Misconfiguration

Page 24: I  Meetup OWASP - Seguridad en NodeJS

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

Page 25: I  Meetup OWASP - Seguridad en NodeJS

A5-Security Misconfiguration

https://github.com/helmetjs

Page 26: I  Meetup OWASP - Seguridad en NodeJS

A6-Sensitive Data Exposure

Page 27: I  Meetup OWASP - Seguridad en NodeJS

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.

Page 28: I  Meetup OWASP - Seguridad en NodeJS

A6 - Sensitive Data Exposure

Page 29: I  Meetup OWASP - Seguridad en NodeJS

A7 - Access Control

Page 30: I  Meetup OWASP - Seguridad en NodeJS

A7 - Access Control

Securiza el acceso a los endpoints de la aplicación según el rol que puede acceder

Page 31: I  Meetup OWASP - Seguridad en NodeJS

A7 - Access Control

Page 32: I  Meetup OWASP - Seguridad en NodeJS

A8-Cross-Site Request Forgery (CSRF)

Page 33: I  Meetup OWASP - Seguridad en NodeJS

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.

Page 34: I  Meetup OWASP - Seguridad en NodeJS

A8 - Cross-Site Request Forgery (CSRF)

https://github.com/expressjs/csurf

Page 35: I  Meetup OWASP - Seguridad en NodeJS

A9-Using Components with Known Vulnerabilities

Page 36: I  Meetup OWASP - Seguridad en NodeJS

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

Page 37: I  Meetup OWASP - Seguridad en NodeJS

A10-Unvalidated Redirects and Forwards

Page 38: I  Meetup OWASP - Seguridad en NodeJS

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

Page 39: I  Meetup OWASP - Seguridad en NodeJS

¿Preguntas?

Page 40: I  Meetup OWASP - Seguridad en NodeJS