Blog gratis
Reportar
Editar
¡Crea tu blog!
Compartir
¡Sorpréndeme!
Blog de la Escuela de Educación Secundaria Técnica N 8 de Quilmes
Administrador Prof. Claudio Enrique Alonso Alvite
img
31 de Octubre, 2014    General

Cómo funcionan las MongoDB Injection

Las inyecciones SQL han sido tradicionalmente uno de los vectores de ataque más utilizados por los atacantes. De hecho, es una de las técnicas más eficaces para el robo y la alteración de información sensible. Sin embargo, no existe (aún) una marcada tendencia hacia la explotación de las llamadas bases de datos NoSQL, o sea, bases de datos no relacionales pensadas para el almacenamiento de grandes cantidades de información. De entre todas estas bases de datos NoSQL, quizá el representante más ilustre sea MongoDB. ¿Es inmune a las inyecciones?

¿Qué es MongoDB?

El nombre MongoDB, viene del inglés "humongous" (inmenso). Es un sistema de base de datos no relacional de código abierto y orientado a documentos. MongoDB se basa en colecciones de documentos Json, lo que le otorga una gran flexibilidad en cuanto a la naturaleza de la información que almacena, puesto que puede haber documentos con diferente esquema dentro de una misma colección.

De MongoDB destaca su gran velocidad y escalabilidad, porque puede manejar sin apenas esfuerzo volúmenes de datos del orden de gigabytes. En los últimos tiempos, su nómina de clientes ha crecido considerablemente; Foursquare, MTV, The New York Times, etc. ya lo utilizan.

¿Es MongoDB vulnerable a inyecciones?

Al no tratarse de una base de datos SQL, podría parecer que MongoDB no es vulnerable a inyecciones maliciosas. Sin embargo, veremos que no es así. Se pueden realizar muchos tipos de inyecciones en MongoDB, aunque la viabilidad del ataque depende en gran medida del driver de Mongo utilizado.

Por ejemplo, en PHP es posible realizar una inyección muy similar a la clásica inyección SQL, alterando la consulta de manera que devuelva todo el contenido de una colección. Imaginemos la típica consulta de credenciales que hay tras un login. En SQL, sería algo como lo que sigue:

SELECT * FROM tUsers WHERE username = ‘username’ AND password = ‘password’
La consulta equivalente en MongoDB sería:
$collection -> find(array(
 "username" => $_GET[‘username’],
 "password" => $_GET[‘password’] ));
El problema es que PHP permite pasarle objetos al driver de MongoDB, sin que tengan que ser necesariamente strings. Explotando esta vulnerabilidad, podemos pasar un objeto que fuerce una condición "true" y provoque el volcado de la colección. Por ejemplo, enviando una petición como esta:
login.php?username=administrador&password[$ne]=1
Obtendríamos una consulta interna de esta forma:
$collection -> find(array( 
 "username" => "administrador"
 "password" => array("$ne" => 1) ));
Esta consulta devuelve las credenciales de todos los usuarios cuyo nombre de usuario y contraseña sea distinto ("not equal", $ne) de 1, condición que probablemente cumpla cualquier contraseña.

La solución pasa por "tipar" los objetos que se le pasan al driver. El hecho de que muchos drivers de MongoDB admitan objetos no tipados supone una vulnerabilidad.

¿Cómo comprobar si se es vulnerable?

Como no podía ser de otra manera, Faast incorpora entre su batería de plugins, uno capaz de detectar vulnerabilidades de este tipo. Sin embargo, como ya se ha mencionado, la presencia de esta vulnerabilidad depende enormemente del driver utilizado en el dominio bajo análisis.

Existen multitud de drivers para MongoDB. El plugin de Faast está orientado a detectar inyecciones en MongoDB, aprovechando la capacidad del motor Mongo para ejecutar Javascript. Utiliza la técnica de time-based detection para determinar si la URL que recibe como parámetro es vulnerable, aprovechando a su vez el comando "sleep" de MongoDB, que bloquea todas las operaciones de la base de datos durante un determinado período de tiempo.

Por ejemplo, tras recibir la URL, el plugin de Faast realiza dos peticiones independientes, concatenando las siguientes cadenas a la URL original. En la primera se ejecuta un sleep durante 10 segundos, en la segunda, no.
;if(tojson(this)[0] =="{")) {sleep("10000")};
;if(tojson(this)[0] =="{")) {sleep("0")}
Para determinar si es posible inyectar, se compara el tiempo de respuesta de ambas peticiones. Si la diferencia de tiempos es superior a un determinado umbral, se considera positivo y por tanto la URL es vulnerable. Para minimizar la influencia de tiempos de propagación, etc… y evitar falsos positivos, la prueba se repite un número determinado de veces. Será necesario que el resultado de los N intentos sea positivo para considerar la URL como vulnerable.

El auge que están viviendo los motores de bases de datos no relacionales, hace que se conviertan en un objetivo prioritario para los atacantes. Aunque las inyecciones SQL siguen siendo frecuentes, ya no representan una novedad en el mundo del cibercrimen, y las recetas y buenas prácticas para evitarlas están muy estudiadas. Sin embargo, las bases de datos NoSQL suponen un territorio nuevo que explorar. Por eso Faast pretende adelantarse a los atacantes y facilitar que se tomen las medidas adecuadas para salvaguardar la integridad de los datos de los clientes.

Fuente: ElevenPath
Palabras claves , , , ,
publicado por alonsoclaudio a las 10:28 · Sin comentarios  ·  Recomendar
 
Más sobre este tema ·  Participar
Comentarios (0) ·  Enviar comentario
Enviar comentario

Nombre:

E-Mail (no será publicado):

Sitio Web (opcional):

Recordar mis datos.
Escriba el código que visualiza en la imagen Escriba el código [Regenerar]:
Formato de texto permitido: <b>Negrita</b>, <i>Cursiva</i>, <u>Subrayado</u>,
<li>· Lista</li>
CALENDARIO
Ver mes anterior Mayo 2024 Ver mes siguiente
DOLUMAMIJUVISA
1234
567891011
12131415161718
19202122232425
262728293031
BUSCADOR
Blog   Web
TÓPICOS
» General (2606)
NUBE DE TAGS  [?]
SECCIONES
» Inicio
ENLACES
MÁS LEÍDOS
» Analizando el LiveBox 2.1 de Orange
» Cómo espiar WhatsApp
» Cómo usar Metashield protector for Client y por qué utilizarlo
» Detectando tráfico de conexiones HTTP inversas de Meterpreter (Snort)
» Ejecución remota de código arbitrario en OpenSSH
» Ganar dinero con 1.200 Millones de identidades robadas
» Hardware y sus 4 Funcionamientos Basicos y Principales en una Computadora
» Redes de la Deep Web: CJDNS y la Red Hyperboria
» Unidad Central de Procesamiento CPU
» Wassap, la aplicación que permite usar WhatsApp desde la PC
SE COMENTA...
» Cómo espiar WhatsApp
595 Comentarios: Scott, Scott, Jarlinson mercy, [...] ...
» Qué hacer ante el robo de un teléfono móvil o una tableta
2 Comentarios: best buy security cameras swann, best buy security cameras swann
» Espiando usuarios gracias a la vulnerabilidad en cámaras TRENDnet
1 Comentario: Coin
» Recopilatorio de aplicaciones y sistemas vulnerables para practicar
2 Comentarios: vera rodrigez ...
» SoftPerfect WiFi Guard permite saber quién esta conectado a mi WiFi
2 Comentarios: firdous ...
SOBRE MÍ
FOTO

Prof. Claudio Enrique Alonso Alvite



» Ver perfil

AL MARGEN
Escuela de Educacion Secundaria Tecnica N 8 de Quilmes
(Técnicos en Informática Personal y Profesional)
FULLServices Network | Blogger | Privacidad