SlideShare una empresa de Scribd logo
Pentesting en
aplicaciones node.js
AS ALWAYS: FOR FUN AND PROFIT
DANIEL ECHEVERRI M.
Nickname: Adastra (@jdaanial)
Blog: thehackerway.com
Autor de varios libros de la editorial 0xWORD
Information Security Researcher.
THW Academy (academy.thehackerway.com)
THW (thehackerway.es)
¿WHOAMI?
Principales características de node.js
OpenSource, independiente de plataforma.
Desarrollado sobre CJR v8 (Chrome JavaScript Runtime).
Diseñado para ser rápido y escalable.
1
2
3
4
Rápida introducción a node.js
Liviano y eficiente.5
Permite la ejecución de Javascript en el backend.
Principales características de node.js
Módelo asíncrono basado en eventos y en la ejecución de
funciones de "callback".
Pensado para ejecutar operaciones en un "event-loop".
Enfoque "single-thread" para mejorar el desempeño y
escalabilidad de aplicaciones web.
6
7
8
9
Rápida introducción a node.js
No más “one thread per requests”. Un modelo
completamente distinto, enfocado al desarrollo de
aplicaciones escalables.
Principales características de node.js
Rápida introducción a node.js
"Event-loop model" vs "thread per requests".
Un modelo “Event-Loop” es ideal para aplicaciones en donde
la velocidad de respuesta de las peticiones es más importante
que las operaciones I/O. p.e: Un proxy inverso/transparente.
Un modelo “thread per requests” es más adecuado para
procesamientos intensivos con con un número bajo de
procesos concurrentes. p.e. Aplicaciones cuyas funciones
realizan múltiples operaciones de negocio, conexiones a
bases de datos u otros sistemas remotos.
Principales características de node.js
Rápida introducción a node.js
Componentes a desarrollar con node.js
Es necesario desarrollar el componente “servidor”,
típicamente utilizando el modulo “express” y además, la lógica
propiamente dicha de la aplicación.
Dado que todo se ejecuta desde un único hilo de ejecución, la
gestión inadecuada de excepciones puede interrupir por
completo el normal funcionamiento del servidor. Es
recomendable tener rutinas de chequeo que se encarguen de
verificar en todo momento, el correcto funcionamiento del
servidor y la disponibilidad del proceso en el sistema.
Las vulnerabilidades descritas en el OWASP-Top10
también aplican a las aplicaciones desarrolladas en
node.js, pero además también se pueden producir otras
vulnerabilidades relacionadas con el funcionamiento de
node.js y que hay que tener en cuenta.
Rápida introducción a node.js
Vulnerabilidades
especificas en Node.js
Vulnerabilidades especificas en Node.js
[-]   Global Namespace Pollution.
[-]   HTTP Parameter Pollution (HPP).
[-]   Uso inseguro de “eval” y otras variantes. (Command
Execution).
[-]   Entradas de usuario inseguras. (parámetros y cabeceras
HTTP).
[-]   Regex DoS.
Entre otras...
Global Namespace Pollution
[-]  Las variables que se declaran en el componente servidor
(normalmente usando “express”) tienen alcance global.
[-] Cuando en dichas variables se almacena información
sensible y/o crítica para el correcto funcionamiento del
sistema, se puede producir un problema de Global
NameSpace Pollution.
[-] Un atacante podría alterar o acceder a los valores de
dichas variables y tener cierto control y/o modificar el
comportamiento de la aplicación con otros usuarios del
sistema.
HTTP Parameter Pollution
[-]  Se producen ante la gestión inadecuada de parámetros
duplicados en las peticiones HTTP.
[-] En NodeJS, la duplicidad de los parámetros no es
gestionada de forma automática, siendo una tarea que se
delega al programador. Si no se gestionan correctamente
dichos parámetros, se pueden producir excepciones que
pueden desencadenar una condición de DoS o producir
comportamientos inesperados.
OS Commanding
[-]   Los parámetros de entrada suministrados por los usuarios
deben ser correctamente validados cuando partiendo de
ellos, se deben ejecutar comandos contra el sistema o
cualquier tipo de operación sensible.
[-]   El módulo “child_process” en nodejs es el encargado
permitir la ejecución de comandos sobre el servidor.
Todos los comandos ejecutados lo hacen con los privilegios
que tenga el usuario que ha iniciado el componente servidor
de node.js.
Vulnerabilidades de inyección
[-]   Tal como se indica en la guía de OWASP Top 10, las
vulnerabilidades de inyección son las más habituales en las
aplicaciones web.
[-]   Existen varios tipos de vulnerabilidades de inyección, tales
como: SQL Injection, NoSQL Injection, HTML Injection y XSS
Injection.
[-]    Dichas vulnerabilidades pueden afectar también a
cualquier aplicación desarrollada con node.js si no se aplican los
filtros y validaciones adecuadas sobre la aplicación web.
Directory transversal
[-]   Los módulo “fs” y “path” en nodejs permiten operar con el
sistema de ficheros del sistema.
[-]    El uso inadecuado de dichas funciones, junto a una
incorrecta o inexistente validación de datos de entrada, puede
representar una brecha de seguridad que le permitirá a un
atacante acceder a información sensible del sistema.
DoS por medio de expresiones regulares.
Regex DoS (ReDoS)
[-]   Vulnerabilidad que afecta muy especialmente a rutinas en
node.js debido a su modo de funcionamiento (event loop).
[-]   Las expresiones regulares aplicadas a las entradas
suministradas por los usuarios pueden desencadenar un
bloqueo del hilo de ejecución de node.js e interrumpir por
completo la actividad del servidor.
[-] Validar, validar, validar.
Serialización y transporte inseguro de
datos sensibles.
[-]   Uso de canales de transporte inseguro para el envío de
información con datos sensibles.
[-]   Uso inadecuado del módulo "node-serialize" a la hora de
deserializar objetos provenientes de fuentes desconocidas y/o
poco fiables.
Ejecución remota de código (RCE)
[-]  En la medida de lo posible, no utilizar la función “eval” o
instrucciones similares.
        setInterval(código, 1)
        setTimeout(código, 1)
        new Function(código)
        eval(código) Donde “código” puede ser:
                  while(1); process.exit(); process.kill(process.pid);
[-] Validar absolutamente todos los parámetros
suministrados por parte del cliente y aplicar los filtros que
sean necesarios.
NodeGoat es una aplicación vulnerable por diseño,
desarrollada con node.js y disponible al público con el
fin de probar las principales vulnerabilidades que
afectan a las aplicaciones desarrolladas con node.js
NodeGoat by OWASP
NodeGoat by OWASP
Herramientas para la detección de
vulnerabilidades en node.js
[-]  Retire.js: es una librería enfocada al descubrimiento de
componentes desactualizados y con vulnerabilidades
conocidas en aplicaciones con NodeJS, BackboneJS, Dojo,
AngularJS, entre otros.
[-]   NPM: Herramienta que permite detectar el uso de
módulos desactualizados y con vulnerabilidades conocidas.
Utiliza Node Security Platform para realizar todas las
comprobaciones.   npm --check
[-] NodeJSScan: Herramienta para el análisis estático de
código, búsqueda y descubrimiento de vulnerabilidades.
CONTACTO.
TWITTER.
SITIO WEB.
@ThwAcademy
@jdaanial
thehackerway.es
thehackerway.com
academy.thehackerway.com
EMAIL
adastra@thehackerway.com

Más contenido relacionado

PDF
Introducción a Zend Framework
PDF
Introducción a Zend Framework 2
PDF
Eclipse
PPTX
Iron workers y javascript
PDF
Desarrollo Aplicaciones Zend Framework
PPTX
Introduccion a Node.js
Introducción a Zend Framework
Introducción a Zend Framework 2
Eclipse
Iron workers y javascript
Desarrollo Aplicaciones Zend Framework
Introduccion a Node.js

La actualidad más candente (11)

PDF
Introducción a NodeJS
PDF
Principales vulnerabilidades en Aplicaciones Web - Rediris 2008
PPTX
Spring framework
PDF
Microservicios sobre MEAN Stack
ODP
Spring Mvc Final
PPTX
Node JS (Francisco Cerdas)
PPT
Nodejs.introduccion
PDF
Instalación de Roller sobre Glassfish3
PPTX
CodeCamp 2010 | Hyper-V en Windows Server 2008 R2 e interoperabilidad con Linux
PPT
Spring Security
Introducción a NodeJS
Principales vulnerabilidades en Aplicaciones Web - Rediris 2008
Spring framework
Microservicios sobre MEAN Stack
Spring Mvc Final
Node JS (Francisco Cerdas)
Nodejs.introduccion
Instalación de Roller sobre Glassfish3
CodeCamp 2010 | Hyper-V en Windows Server 2008 R2 e interoperabilidad con Linux
Spring Security
Publicidad

Similar a Codemotion 2017: Pentesting en aplicaciones node.js AS ALWAYS: FOR FUN AND PROFIT (20)

DOCX
Sercicios web
PDF
Guia de estudio para Oracle Certified Java EE 6 Web Component Developer
PPTX
Presentacion node
PDF
Remote System Controller with Android technologies
PDF
20001215 Programación de Servlets y WML
PPT
spring
PDF
Seminario Spring Roo. Monitorización con Spring Insight
PPTX
Node.js - un poco de informacion.
PDF
Desarrollo de aplicaciones multiplataforma 2/2
PPTX
Dprn3 u3 a1_guph
PPT
El Universo Java (2007)
PPTX
Curso introductorio a Raptor.js con Node.js
PDF
Bases de Datos Distribuidas con Sql Server 2012
PPT
Plataforma de programación Java
PDF
24. Introducción a Node JS.pdf
PPTX
Meetup Integración Continua y Jenkins
PDF
Jsf Java Server Faces
PPTX
Arquitectura y diseño de aplicaciones Java EE
PDF
003-Introduccion-Angular.pdf
Sercicios web
Guia de estudio para Oracle Certified Java EE 6 Web Component Developer
Presentacion node
Remote System Controller with Android technologies
20001215 Programación de Servlets y WML
spring
Seminario Spring Roo. Monitorización con Spring Insight
Node.js - un poco de informacion.
Desarrollo de aplicaciones multiplataforma 2/2
Dprn3 u3 a1_guph
El Universo Java (2007)
Curso introductorio a Raptor.js con Node.js
Bases de Datos Distribuidas con Sql Server 2012
Plataforma de programación Java
24. Introducción a Node JS.pdf
Meetup Integración Continua y Jenkins
Jsf Java Server Faces
Arquitectura y diseño de aplicaciones Java EE
003-Introduccion-Angular.pdf
Publicidad

Más de Dani Adastra (19)

PDF
IntelCon 2020: Uso avanzado de ZAP para hacking en aplicaciones web
PDF
ShellCon 2018: Hacking con Python
PDF
Malt 2020: Ciberseguridad en la empresa
PDF
IntelCon 2020: OSINT en la Deep web de TOR
PDF
HoneyCon 2020: Hacking con ZAP
PDF
HackMadrid 2020: Introducción práctica al RedTeam
PDF
XIV Jornadas CCN Cert: Covert Channels en operaciones de Red Team
PDF
8dot8 SUR 2020: Introducción práctica al RedTeam
PDF
SecAdmin 2019: ZAP Proxy: Mucho más que una herramienta de "one-click hack"
PDF
Morteruelo 2019: Seguridad informática en 50 días YOUR hacker way..
PDF
HackRon 2019: Python + TOR: Descubrir, analizar y extraer información de serv...
PDF
H-Con 2018: Hacking con Python
PDF
UAH 2018: Hacking en la deep web de TOR (for fun and profit)
PPTX
SecAdmin 2017: Hacking con Python
PDF
DragonJar 2015: Desmitificando la deep web de tor pentesting sobre instancias...
PDF
Cybercamp 2014: Tortazo: Desarrollo de un framework de auditoría para la red ...
PDF
HoneyCon 2017: Pentesting sobre instancias de TOR con Tortazo y TortazoWeb.
PDF
8dot8 2015: Desmitificando la deep web de TOR - pentesting sobre instancias d...
PDF
Cybercamp 2017: Hacking TOR & Freenet for fun, profit and stop the evil.
IntelCon 2020: Uso avanzado de ZAP para hacking en aplicaciones web
ShellCon 2018: Hacking con Python
Malt 2020: Ciberseguridad en la empresa
IntelCon 2020: OSINT en la Deep web de TOR
HoneyCon 2020: Hacking con ZAP
HackMadrid 2020: Introducción práctica al RedTeam
XIV Jornadas CCN Cert: Covert Channels en operaciones de Red Team
8dot8 SUR 2020: Introducción práctica al RedTeam
SecAdmin 2019: ZAP Proxy: Mucho más que una herramienta de "one-click hack"
Morteruelo 2019: Seguridad informática en 50 días YOUR hacker way..
HackRon 2019: Python + TOR: Descubrir, analizar y extraer información de serv...
H-Con 2018: Hacking con Python
UAH 2018: Hacking en la deep web de TOR (for fun and profit)
SecAdmin 2017: Hacking con Python
DragonJar 2015: Desmitificando la deep web de tor pentesting sobre instancias...
Cybercamp 2014: Tortazo: Desarrollo de un framework de auditoría para la red ...
HoneyCon 2017: Pentesting sobre instancias de TOR con Tortazo y TortazoWeb.
8dot8 2015: Desmitificando la deep web de TOR - pentesting sobre instancias d...
Cybercamp 2017: Hacking TOR & Freenet for fun, profit and stop the evil.

Último (20)

PDF
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
PPTX
Acronis Cyber Protect Cloud para Ciber Proteccion y Ciber Seguridad LATAM - A...
PPTX
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
PDF
Diapositiva proyecto de vida, materia catedra
PDF
clase auditoria informatica 2025.........
PDF
TRABAJO DE TECNOLOGIA.pdf...........................
PPTX
la-historia-de-la-medicina Edna Silva.pptx
PPTX
COMO AYUDAN LAS TIC EN LA EDUCACION SUPERIOR.pptx
PDF
Ronmy José Cañas Zambrano - Potenciando la tecnología en Venezuela.pdf
PDF
Tips de Seguridad para evitar clonar sus claves del portal bancario.pdf
PPTX
Curso de generación de energía mediante sistemas solares
PDF
PRESENTACIÓN GENERAL MIPIG - MODELO INTEGRADO DE PLANEACIÓN
PPTX
sa-cs-82-powerpoint-hardware-y-software_ver_4.pptx
PPTX
Presentación PASANTIAS AuditorioOO..pptx
PPTX
IA de Cine - Como MuleSoft y los Agentes estan redefiniendo la realidad
PPT
introduccion a las_web en el 2025_mejoras.ppt
PPTX
Presentación de Redes de Datos modelo osi
PDF
CyberOps Associate - Cisco Networking Academy
PDF
Maste clas de estructura metálica y arquitectura
PPTX
Power Point Nicolás Carrasco (disertación Roblox).pptx
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
Acronis Cyber Protect Cloud para Ciber Proteccion y Ciber Seguridad LATAM - A...
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
Diapositiva proyecto de vida, materia catedra
clase auditoria informatica 2025.........
TRABAJO DE TECNOLOGIA.pdf...........................
la-historia-de-la-medicina Edna Silva.pptx
COMO AYUDAN LAS TIC EN LA EDUCACION SUPERIOR.pptx
Ronmy José Cañas Zambrano - Potenciando la tecnología en Venezuela.pdf
Tips de Seguridad para evitar clonar sus claves del portal bancario.pdf
Curso de generación de energía mediante sistemas solares
PRESENTACIÓN GENERAL MIPIG - MODELO INTEGRADO DE PLANEACIÓN
sa-cs-82-powerpoint-hardware-y-software_ver_4.pptx
Presentación PASANTIAS AuditorioOO..pptx
IA de Cine - Como MuleSoft y los Agentes estan redefiniendo la realidad
introduccion a las_web en el 2025_mejoras.ppt
Presentación de Redes de Datos modelo osi
CyberOps Associate - Cisco Networking Academy
Maste clas de estructura metálica y arquitectura
Power Point Nicolás Carrasco (disertación Roblox).pptx

Codemotion 2017: Pentesting en aplicaciones node.js AS ALWAYS: FOR FUN AND PROFIT

  • 1. Pentesting en aplicaciones node.js AS ALWAYS: FOR FUN AND PROFIT
  • 2. DANIEL ECHEVERRI M. Nickname: Adastra (@jdaanial) Blog: thehackerway.com Autor de varios libros de la editorial 0xWORD Information Security Researcher. THW Academy (academy.thehackerway.com) THW (thehackerway.es) ¿WHOAMI?
  • 3. Principales características de node.js OpenSource, independiente de plataforma. Desarrollado sobre CJR v8 (Chrome JavaScript Runtime). Diseñado para ser rápido y escalable. 1 2 3 4 Rápida introducción a node.js Liviano y eficiente.5 Permite la ejecución de Javascript en el backend.
  • 4. Principales características de node.js Módelo asíncrono basado en eventos y en la ejecución de funciones de "callback". Pensado para ejecutar operaciones en un "event-loop". Enfoque "single-thread" para mejorar el desempeño y escalabilidad de aplicaciones web. 6 7 8 9 Rápida introducción a node.js No más “one thread per requests”. Un modelo completamente distinto, enfocado al desarrollo de aplicaciones escalables.
  • 5. Principales características de node.js Rápida introducción a node.js "Event-loop model" vs "thread per requests". Un modelo “Event-Loop” es ideal para aplicaciones en donde la velocidad de respuesta de las peticiones es más importante que las operaciones I/O. p.e: Un proxy inverso/transparente. Un modelo “thread per requests” es más adecuado para procesamientos intensivos con con un número bajo de procesos concurrentes. p.e. Aplicaciones cuyas funciones realizan múltiples operaciones de negocio, conexiones a bases de datos u otros sistemas remotos.
  • 6. Principales características de node.js Rápida introducción a node.js Componentes a desarrollar con node.js Es necesario desarrollar el componente “servidor”, típicamente utilizando el modulo “express” y además, la lógica propiamente dicha de la aplicación. Dado que todo se ejecuta desde un único hilo de ejecución, la gestión inadecuada de excepciones puede interrupir por completo el normal funcionamiento del servidor. Es recomendable tener rutinas de chequeo que se encarguen de verificar en todo momento, el correcto funcionamiento del servidor y la disponibilidad del proceso en el sistema.
  • 7. Las vulnerabilidades descritas en el OWASP-Top10 también aplican a las aplicaciones desarrolladas en node.js, pero además también se pueden producir otras vulnerabilidades relacionadas con el funcionamiento de node.js y que hay que tener en cuenta. Rápida introducción a node.js
  • 8. Vulnerabilidades especificas en Node.js Vulnerabilidades especificas en Node.js [-]   Global Namespace Pollution. [-]   HTTP Parameter Pollution (HPP). [-]   Uso inseguro de “eval” y otras variantes. (Command Execution). [-]   Entradas de usuario inseguras. (parámetros y cabeceras HTTP). [-]   Regex DoS. Entre otras...
  • 9. Global Namespace Pollution [-]  Las variables que se declaran en el componente servidor (normalmente usando “express”) tienen alcance global. [-] Cuando en dichas variables se almacena información sensible y/o crítica para el correcto funcionamiento del sistema, se puede producir un problema de Global NameSpace Pollution. [-] Un atacante podría alterar o acceder a los valores de dichas variables y tener cierto control y/o modificar el comportamiento de la aplicación con otros usuarios del sistema.
  • 10. HTTP Parameter Pollution [-]  Se producen ante la gestión inadecuada de parámetros duplicados en las peticiones HTTP. [-] En NodeJS, la duplicidad de los parámetros no es gestionada de forma automática, siendo una tarea que se delega al programador. Si no se gestionan correctamente dichos parámetros, se pueden producir excepciones que pueden desencadenar una condición de DoS o producir comportamientos inesperados.
  • 11. OS Commanding [-]   Los parámetros de entrada suministrados por los usuarios deben ser correctamente validados cuando partiendo de ellos, se deben ejecutar comandos contra el sistema o cualquier tipo de operación sensible. [-]   El módulo “child_process” en nodejs es el encargado permitir la ejecución de comandos sobre el servidor. Todos los comandos ejecutados lo hacen con los privilegios que tenga el usuario que ha iniciado el componente servidor de node.js.
  • 12. Vulnerabilidades de inyección [-]   Tal como se indica en la guía de OWASP Top 10, las vulnerabilidades de inyección son las más habituales en las aplicaciones web. [-]   Existen varios tipos de vulnerabilidades de inyección, tales como: SQL Injection, NoSQL Injection, HTML Injection y XSS Injection. [-]    Dichas vulnerabilidades pueden afectar también a cualquier aplicación desarrollada con node.js si no se aplican los filtros y validaciones adecuadas sobre la aplicación web.
  • 13. Directory transversal [-]   Los módulo “fs” y “path” en nodejs permiten operar con el sistema de ficheros del sistema. [-]    El uso inadecuado de dichas funciones, junto a una incorrecta o inexistente validación de datos de entrada, puede representar una brecha de seguridad que le permitirá a un atacante acceder a información sensible del sistema.
  • 14. DoS por medio de expresiones regulares. Regex DoS (ReDoS) [-]   Vulnerabilidad que afecta muy especialmente a rutinas en node.js debido a su modo de funcionamiento (event loop). [-]   Las expresiones regulares aplicadas a las entradas suministradas por los usuarios pueden desencadenar un bloqueo del hilo de ejecución de node.js e interrumpir por completo la actividad del servidor. [-] Validar, validar, validar.
  • 15. Serialización y transporte inseguro de datos sensibles. [-]   Uso de canales de transporte inseguro para el envío de información con datos sensibles. [-]   Uso inadecuado del módulo "node-serialize" a la hora de deserializar objetos provenientes de fuentes desconocidas y/o poco fiables.
  • 16. Ejecución remota de código (RCE) [-]  En la medida de lo posible, no utilizar la función “eval” o instrucciones similares.         setInterval(código, 1)         setTimeout(código, 1)         new Function(código)         eval(código) Donde “código” puede ser:                   while(1); process.exit(); process.kill(process.pid); [-] Validar absolutamente todos los parámetros suministrados por parte del cliente y aplicar los filtros que sean necesarios.
  • 17. NodeGoat es una aplicación vulnerable por diseño, desarrollada con node.js y disponible al público con el fin de probar las principales vulnerabilidades que afectan a las aplicaciones desarrolladas con node.js NodeGoat by OWASP NodeGoat by OWASP
  • 18. Herramientas para la detección de vulnerabilidades en node.js [-]  Retire.js: es una librería enfocada al descubrimiento de componentes desactualizados y con vulnerabilidades conocidas en aplicaciones con NodeJS, BackboneJS, Dojo, AngularJS, entre otros. [-]   NPM: Herramienta que permite detectar el uso de módulos desactualizados y con vulnerabilidades conocidas. Utiliza Node Security Platform para realizar todas las comprobaciones.   npm --check [-] NodeJSScan: Herramienta para el análisis estático de código, búsqueda y descubrimiento de vulnerabilidades.