ciberseguridad
pentesting
seguridad web
owasp top 10
En 2014, Sony Pictures Entertainment fue afectada por un ciberataque significativo. Aunque el ataque involucró múltiples vectores, una de las vulnerabilidades explotadas fue la Inclusión de Archivos Locales (LFI). El hackeo fue tan impactante que la compañía tuvo que cancelar el lanzamiento de la película "The Interview". En este artículo veremos cómo funciona la Inclusión de Archivos Locales y cómo prevenirla.
La Inclusión de Archivos Locales (LFI) es un tipo de vulnerabilidad que se encuentra comúnmente en aplicaciones web. Ocurre cuando una aplicación incluye un archivo basado en la entrada del usuario sin sanitizar o validar correctamente esa entrada. Esto puede permitir que un atacante manipule la entrada para incluir archivos del sistema de archivos local del servidor, lo que potencialmente expone información sensible o permite otros ataques.
/etc/passwd
Uno de los exploits más conocidos de las vulnerabilidades LFI es la capacidad de visualizar el contenido del archivo /etc/passwd
en sistemas basados en Unix. Este archivo contiene información sobre los usuarios del sistema y puede proporcionar información valiosa a un atacante.
Considera una aplicación web que incluye un archivo basado en un parámetro de URL:
http://ejemplo.com/index.php?file=user.txt
Si la aplicación no valida correctamente el parámetro file
, un atacante podría manipularlo para incluir el archivo /etc/passwd
:
http://ejemplo.com/index.php?file=/etc/passwd
Esto resultaría en que la aplicación incluya el archivo /etc/passwd
, lo que podría exponer información sensible sobre los usuarios del sistema.
Para evitar vulnerabilidades de Inclusión de Archivos Locales (LFI) en una aplicación Python Flask, es crucial validar y sanitizar adecuadamente las entradas del usuario. A continuación, un ejemplo de cómo manejar de manera segura la inclusión de archivos en Flask:
1from flask import Flask, request, abort 2 3app = Flask(__name__) 4 5@app.route('/') 6def index(): 7 file = request.args.get('file') 8 if file and file.endswith('.txt'): 9 try: 10 with open(file, 'r') as f: 11 content = f.read() 12 return content 13 except FileNotFoundError: 14 abort(404) 15 abort(400) 16 17if __name__ == '__main__': 18 app.run(debug=True)
1const express = require('express'); 2const fs = require('fs'); 3const app = express(); 4 5app.get('/', (req, res) => { 6 const file = req.query.file; 7 if (file && file.endsWith('.txt')) { 8 try { 9 const content = fs.readFileSync(file, 'utf8'); 10 res.send(content); 11 } catch (error) { 12 res.status(404).send('Archivo no encontrado'); 13 } 14 } else { 15 res.status(400).send('Archivo inválido'); 16 } 17}); 18 19app.listen(3000, () => { 20 console.log('Servidor corriendo en el puerto 3000'); 21});
Este código valida correctamente el parámetro file
para asegurarse de que es un archivo válido y no una ruta maliciosa.
Detectar vulnerabilidades de Inclusión de Archivos Locales (LFI) es crucial para mantener la seguridad de las aplicaciones web. Aquí hay algunas herramientas que pueden utilizarse para detectar LFI:
Burp Suite: Un escáner de vulnerabilidades web integral que puede detectar varias vulnerabilidades, incluidas LFI. Aquí te mostramos cómo usar Burp Suite para detectar LFI:
/etc/passwd
, ../../../../etc/passwd
).OWASP ZAP (Zed Attack Proxy): Un escáner de seguridad de aplicaciones web de código abierto que puede utilizarse para encontrar vulnerabilidades LFI. Para usar OWASP ZAP para detectar LFI, sigue estos pasos:
Nikto: Un escáner de servidores web de código abierto que realiza pruebas exhaustivas contra servidores web para múltiples vulnerabilidades, incluidas LFI.
Acunetix: Un escáner comercial de vulnerabilidades web que puede detectar LFI entre otras vulnerabilidades. Proporciona informes detallados y consejos de remediación.
Wfuzz: Una herramienta diseñada para la fuerza bruta de aplicaciones web, que puede utilizarse para detectar LFI al fuzzear rutas de archivos y parámetros.
SQLMap: Principalmente diseñado para inyecciones SQL, SQLMap puede adaptarse para identificar vulnerabilidades LFI al probar patrones de inclusión de archivos. Aquí están los pasos para usar SQLMap para detectar LFI:
--file-read
seguida de la ruta del archivo que deseas probar. Por ejemplo:
sqlmap -u "http://ejemplo.com/vulnerable_page.php?file=1" --file-read="/etc/passwd"
Nmap con NSE (Nmap Scripting Engine): Nmap puede ampliarse con scripts personalizados para detectar vulnerabilidades LFI.
Metasploit: Un framework de pruebas de penetración que incluye módulos para detectar y explotar vulnerabilidades LFI. Aquí los pasos para usar Metasploit:
msfconsole
.search lfi
Con estas herramientas, los profesionales de seguridad pueden identificar y mitigar vulnerabilidades LFI para proteger aplicaciones web de posibles ataques.
En 2014, Sony Pictures Entertainment fue víctima de un ciberataque significativo. Una de las vulnerabilidades explotadas fue la Inclusión de Archivos Locales (LFI). Los atacantes pudieron acceder a archivos y datos sensibles, lo que provocó una fuga masiva de datos que expuso información confidencial, correos electrónicos y películas no estrenadas.
Las consecuencias de este hackeo fueron graves: