i meetup owasp - seguridad en nodejs

Post on 14-Apr-2017

350 Views

Category:

Software

0 Downloads

Preview:

Click to see full reader

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?

top related