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?
Entrada no validada:
El usuario proporciona datos que se usan directamente en consultas a la base de datos NoSQL.
Manipulación de la consulta:
Las consultas dinámicas aceptan valores maliciosos que alteran la lógica de la consulta.
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:
Un atacante podría enviar un payload como este:
Esto genera una consulta que siempre es verdadera:
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:
Ataque básico: En el campo username
el atacante introduce:
En el campo password
:
Consulta generada:
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:
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:
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
:
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.
Última actualización
¿Te fue útil?