🐈‍⬛
H4CKdotCL
Laboratorio
  • 🪅Bienvenidos al Book
  • Certificaciones
    • ⏳Junior Penetration Tester - eJPTv2
    • 🥉Ethical Hacking Professional Certification - CEHPC
    • 🥉Cybersecurity Awareness Professional Certification - CAPC
  • Metodología y Fases de Hacking Ético
    • Metodologías
      • Metodología OWASP (Open Web Application Security Project)
      • Metodología PTES
      • Metodología ISSAF
      • Metodología OSSTMM
    • Recopilación Pasiva de Información
      • Sublist3r
      • Httpx
      • theHarvester
      • Google Dorks
      • Wafw00f
      • Shodan
      • Whatweb
    • Recopilación Activa de Información
      • enum4linux
      • Guía de uso para Gobuster
      • Nmap (Network Mapper)
      • Wfuzz
      • SecList
      • FFUF
      • SMBClient
      • CrackMapExec
      • SMBMap
      • WPScan
      • Steghide
      • subfinder
    • SQLMap
    • Hydra
  • Utilidades
    • Docker: Potenciando Laboratorios de Pentesting
    • 📖Ejemplos de informes de Hacking Ético y auditoría de seguridad
  • Vulnerabilidades Web
    • IDOR (Insecure Direct Object Reference)
    • SSRF (Server-Side Request Forgery)
    • CSRF (Cross-Site Request Forgery)
    • File Upload Vulnerabilities
    • LFI (Local File Inclusion)
    • RFI (Remote File Inclusion)
    • XSS (Cross-Site Scripting)
    • XXE (XML External Entity)
    • Template Injections
    • Clickjacking
    • Broken Access Control
    • SQL Injection (Inyección SQL)
    • NoSQL Injection (Inyección NoSQL)
    • LDAP Injection (Inyección LDAP)
    • Log Poisoning
    • Open Redirect Bypass
Con tecnología de GitBook
En esta página

¿Te fue útil?

  1. Vulnerabilidades Web

NoSQL Injection (Inyección NoSQL)

🌐 Vulnerabilidad: NoSQL Injection


🕵️‍♂️ ¿Qué es NoSQL Injection?

NoSQL Injection es una vulnerabilidad que ocurre cuando un atacante manipula consultas de bases de datos NoSQL al introducir entradas maliciosas. Estas bases de datos, como MongoDB, CouchDB o Firebase, son muy flexibles, pero su falta de validación en algunos entornos puede abrir la puerta a inyecciones similares a las de SQL, lo que compromete la seguridad de la aplicación.


⚙️ ¿Cómo se produce?

  1. Entrada no validada:

    • El usuario proporciona datos que se usan directamente en consultas a la base de datos NoSQL.

  2. Manipulación de la consulta:

    • Las consultas dinámicas aceptan valores maliciosos que alteran la lógica de la consulta.

  3. Ejecución del ataque:

    • La consulta devuelve resultados no esperados, o permite acceso/modificación de datos no autorizados.


🛠️ Mecanismo de ataque

Ejemplo de código vulnerable en MongoDB:

const user = req.body.username;
const pass = req.body.password;

db.users.findOne({ username: user, password: pass });

Un atacante podría enviar un payload como este:

{
    "username": { "$ne": null },
    "password": { "$ne": null }
}

Esto genera una consulta que siempre es verdadera:

db.users.findOne({ username: { "$ne": null }, password: { "$ne": null } });

Resultado: el atacante accede sin necesidad de credenciales válidas.


🎯 Impacto

  • Exposición de datos: Los atacantes pueden acceder a datos sensibles almacenados en la base de datos.

  • Modificación no autorizada: Alterar o borrar registros.

  • Escalada de privilegios: Obtener acceso administrativo mediante inyecciones específicas.

  • Ejecución de comandos: Algunas bases de datos NoSQL permiten ejecutar comandos en el sistema operativo.


📉 Puntaje CVSS v3

  • Vector de ataque: Red

  • Complejidad del ataque: Baja

  • Impacto en confidencialidad: Alto

  • Impacto en integridad: Alto

  • Impacto en disponibilidad: Medio

  • Puntaje CVSS v3: 8.0 - 10.0 (Crítico) 🔥


🧑‍💻 Ejemplo práctico

Código vulnerable:

app.post('/login', (req, res) => {
    const username = req.body.username;
    const password = req.body.password;

    db.users.findOne({ username: username, password: password }, (err, user) => {
        if (user) {
            res.send("¡Inicio de sesión exitoso!");
        } else {
            res.send("Credenciales inválidas.");
        }
    });
});

Ataque básico: En el campo username el atacante introduce:

{ "$ne": null }

En el campo password:

{ "$ne": null }

Consulta generada:

db.users.findOne({ username: { "$ne": null }, password: { "$ne": null } });

Esto devuelve el primer usuario en la colección.


🛡️ ¿Cómo prevenir NoSQL Injection?

1️⃣ Validar y sanitizar entradas

Antes de procesar datos del usuario, asegúrate de validarlos y limpiarlos:

const sanitize = require('mongo-sanitize');
const username = sanitize(req.body.username);
const password = sanitize(req.body.password);

2️⃣ Uso de consultas parametrizadas

Al igual que en SQL, usa consultas parametrizadas en lugar de construir dinámicamente las consultas.

3️⃣ Restricción de operadores peligrosos

Restringe o filtra operadores específicos como $ne, $gt, $lt, $regex, etc., que podrían ser explotados.

Ejemplo en MongoDB:

if (typeof username !== 'string' || typeof password !== 'string') {
    return res.status(400).send("Entrada inválida.");
}

4️⃣ Autenticación y roles seguros

Implementa controles de acceso estrictos en la base de datos para minimizar el impacto de una inyección exitosa:

  • Limita el acceso del usuario de la base de datos a solo las colecciones necesarias.

  • Usa permisos de solo lectura cuando sea posible.

5️⃣ Encriptación de contraseñas

Nunca almacenes contraseñas en texto plano. Usa un algoritmo seguro como bcrypt:

const bcrypt = require('bcrypt');
bcrypt.compare(inputPassword, storedHashedPassword, (err, result) => {
    if (result) {
        res.send("¡Inicio de sesión exitoso!");
    } else {
        res.send("Credenciales inválidas.");
    }
});

6️⃣ Pruebas de seguridad

Realiza auditorías y pruebas de penetración para identificar puntos vulnerables.


💡 Dato extra: Aunque las bases de datos NoSQL son más flexibles y escalables que SQL, esa misma flexibilidad puede ser peligrosa si no se manejan las entradas con cuidado.

🚨 Nota importante: Las herramientas de automatización como NoSQLMap pueden ser usadas para detectar y explotar inyecciones NoSQL. Estas pruebas deben realizarse en entornos controlados.

AnteriorSQL Injection (Inyección SQL)SiguienteLDAP Injection (Inyección LDAP)

Última actualización hace 6 meses

¿Te fue útil?