Icônes SCW
héros bg sans séparateur
Blog

Los codificadores conquistan la seguridad: serie Share & Learn - NoSQL Injection

Jaap Karan Singh
Publié le 20 décembre 2018
Dernière mise à jour le 6 mars 2026

Las bases de datos NoSQL son cada vez más popular. Es difícil negar su rapidez y facilidad para tratar datos no estructurados, especialmente cuando los equipos de desarrollo trabajan con metodologías cada vez más ágiles.

Los desarrolladores necesitan tiempo para eliminar las vulnerabilidades y otros desafíos de la tecnología emergente. Solo después de que haya estado en uso durante algún tiempo en aplicaciones de producción, los problemas comienzan a salir a la superficie.

Las bases de datos NoSQL son similares. Existen riesgos clave que los desarrolladores deben conocer para poder mantener sus aplicaciones seguras. Uno de esos riesgos es la inyección de NoSQL.

Veamos qué es la inyección NoSQL, qué daño puede causar y cómo solucionarlo:

Comprenda la inyección de NoSQL

La inyección de NoSQL se debe a muchas de las mismas vulnerabilidades de inyección, como XML o Inyección SQL.

La inyección de NoSQL permite a los atacantes colocar comandos arbitrarios en una consulta de NoSQL. Esto les permite robar datos e incluso realizar cambios en la base de datos si sus privilegios son lo suficientemente altos.

Cuando una aplicación coloca datos controlados por el usuario directamente en una expresión de consulta NoSQL, estas expresiones suelen tomar funciones o tienen operadores integrados que pueden manipularse para robar o cambiar datos. Y cuando algo así se ejecuta con intención malintencionada, las consecuencias pueden ser nefastas.

Las bases de datos de MongoDB son uno de los campos de juego más populares para explotar esta vulnerabilidad. «$ne: «" 'es el operador equivalente a 1=1 en el mundo de SQL, por lo que, a modo de ejemplo, un atacante podría colocar los caracteres «$ne: «» 'en los campos de nombre de usuario y contraseña de una interfaz de usuario. Si el código es vulnerable a la inyección de NoSQL, la base de datos buscará todos los registros en los que el nombre de usuario y la contraseña no coincidan con una cadena vacía. En otras palabras: todos ellos. ¡Ay!.

Si esta base de datos no está cifrada, el atacante podría robar los nombres de usuario y contraseñas de todos los usuarios que contiene. Esto incluye el nombre de usuario y las contraseñas de los administradores, lo que les da un pase de acceso total a toda la base de datos.

Los atacantes suelen intentar transmitir valores que siempre son ciertos. Otro ataque habitual consiste en inyectar código malintencionado en las propiedades que están configuradas como funciones.

Por ejemplo, MongoDB usa una función de búsqueda que toma un objeto con una propiedad llamada $where. La propiedad $where se establece en una función que debe evaluarse como verdadera o falsa. Si esta función se modifica de alguna manera por la entrada del usuario, es probable que se encuentre ahí una inyección de NoSQL.

Para obtener una visión detallada de las complejidades de la inyección de NoSQL, consulte esto Artículo de InfoQ.

Sepa por qué la inyección de NoSQL es peligrosa

La inyección de NoSQL es peligrosa sobre todo porque aún no ha recibido el escrutinio de la comunidad de seguridad que se merece.

Los impactos de la inyección de NoSQL son prácticamente los mismos que los de la inyección de SQL tradicional. Los datos pueden robarse o modificarse, las cuentas pueden verse comprometidas robando datos y, quizás lo más cruel, los datos podrían borrarse por completo si se ejecuta correctamente una orden de eliminación.

La conclusión es que MongoDB y otros motores de bases de datos NoSQL son vulnerables a los ataques. «Sin SQL» no significa que no haya inyecciones.
Afortunadamente, algunos miembros de la comunidad están tomando nota y hacer correr la voz. Es necesario que cada vez más desarrolladores se eduquen para poder proteger sus aplicaciones de productos poco conocidos que pueden convertirse en un gran quebradero de cabeza si se explotan.

Derrota la inyección de NoSQL

La inyección de NoSQL puede ser difícil de derrotar. Desafortunadamente, no existe la opción de realizar consultas parametrizadas como ocurre con la inyección de SQL. Sin embargo, no es imposible. Hay algunas opciones para ayudarte:

  • Los fuzzers se pueden usar como un método para detectar vulnerabilidades. Sin embargo, como ocurre con muchas cosas en la vida, el enfoque más simple puede ser el más efectivo. En este caso, una buena revisión del código antiguo es tu mejor aliada.
  • Al revisar el código, busca posibles lugares en los que la entrada del usuario pueda establecer el valor de una expresión o cambiar una función. No permitas que la entrada del usuario cambie tus consultas.
  • Asegúrese de enviar la entrada del usuario a la clase que le corresponde. Si es un número, muévelo a un número, si es una cadena, convierte a una cadena y así sucesivamente.
  • Nunca utilice $where o funciones de evaluación similares junto con la entrada del usuario. En la mayoría de los casos, puede solucionarlo cambiando el modelo o esquema de datos.
  • Intenta usar Mangosta como su controlador de MongoDB. Mongoose le permite definir un esquema para su base de datos NoSQL. Si tú dígale a Mongoose que sus entradas son cadenas, se moldearán para formar cuerdas. Por lo tanto, los objetos introducidos por un atacante no serán tratados como objetos, sino como cadenas.
  • ¡Endurece tu base de datos! Cree cuentas de usuario con pocos privilegios, maximice el tiempo de ejecución de las consultas y siga siempre las mejores prácticas de seguridad que se aplican a su organización.

Una desventaja de la facilidad de uso de las bases de datos NoSQL es la tendencia de los desarrolladores a dejarlas de lado y empezar a usarlas sin pensar en la seguridad.

Es fundamental que dedique tiempo a aprender a montar de forma segura una base de datos NoSQL y a protegerse de las inyecciones de NoSQL.

Por ejemplo, Edición MongoDB Enterprise cuenta con funciones avanzadas de control de acceso para sus documentos. Aplicar el «mínimo privilegio» puede ser una buena estrategia de defensa en profundidad (DiD) en caso de que alguien descubriera una vulnerabilidad en su aplicación.

En resumen, esto es lo que tenemos:

  • Desinfecte la entrada antes de usarla en una expresión de consulta NoSQL
  • Usa controladores que te ayuden, como Mongoose
  • Realice revisiones de código que analicen específicamente cómo se utilizan los datos de entrada en las consultas
  • Usa fuzzers y escáneres para intentar encontrar vulnerabilidades en tu código.

NoSQL no es Sin Inyecciones

Las bases de datos NoSQL están ganando popularidad rápidamente debido a sus funciones escalables y velocidad de configuración. La novedad de la tecnología puede llevar a los desarrolladores a utilizar bases de datos NoSQL sin pensar en cómo protegerlas.

Las bases de datos NoSQL pueden ser tan vulnerables como las bases de datos SQL a los ataques de inyección, así que actúe con cautela y preste atención a sus consultas. Si quieres obtener más información, consulta nuestra Recursos de aprendizaje o ponga a prueba sus habilidades con nuestro demo gratuita.

Prepárese con antelación y no tendrá que preocuparse por las inyecciones de NoSQL en sus aplicaciones. ¡Demasiado fácil!

¿Cree que está listo para localizar, identificar y corregir la inyección de NoSQL ahora mismo? Entra en la arena del código seguro, guerrero:

¡Y eso es todo para 2018! Esta será nuestra última publicación del año, pero volveremos con la próxima guía de Coders Conquer Security el 10 de enero de 2019. ¡Nos vemos pronto!

Veuillez consulter la ressource
Veuillez consulter la ressource

Las bases de datos NoSQL son cada vez más populares. Es difícil negar su rapidez y facilidad para tratar datos no estructurados, pero a medida que su uso se generaliza, inevitablemente salen a la luz más vulnerabilidades.

Souhaitez-vous en savoir davantage ?

Jaap Karan Singh est un évangéliste du codage sécurisé, Chief Singh et cofondateur de Secure Code Warrior.

En savoir plus

Secure Code Warrior là pour aider votre organisation à protéger le code tout au long du cycle de vie du développement logiciel et à créer une culture où la cybersécurité est une priorité. Que vous soyez administrateur AppSec, développeur, CISO ou toute autre personne impliquée dans la sécurité, nous pouvons aider votre organisation à réduire les risques associés à un code non sécurisé.

Veuillez réserver une démonstration.
Partager sur :
marques LinkedInSocialLogo x
auteur
Jaap Karan Singh
Publié le 20 décembre 2018

Jaap Karan Singh est un évangéliste du codage sécurisé, Chief Singh et cofondateur de Secure Code Warrior.

Partager sur :
marques LinkedInSocialLogo x

Las bases de datos NoSQL son cada vez más popular. Es difícil negar su rapidez y facilidad para tratar datos no estructurados, especialmente cuando los equipos de desarrollo trabajan con metodologías cada vez más ágiles.

Los desarrolladores necesitan tiempo para eliminar las vulnerabilidades y otros desafíos de la tecnología emergente. Solo después de que haya estado en uso durante algún tiempo en aplicaciones de producción, los problemas comienzan a salir a la superficie.

Las bases de datos NoSQL son similares. Existen riesgos clave que los desarrolladores deben conocer para poder mantener sus aplicaciones seguras. Uno de esos riesgos es la inyección de NoSQL.

Veamos qué es la inyección NoSQL, qué daño puede causar y cómo solucionarlo:

Comprenda la inyección de NoSQL

La inyección de NoSQL se debe a muchas de las mismas vulnerabilidades de inyección, como XML o Inyección SQL.

La inyección de NoSQL permite a los atacantes colocar comandos arbitrarios en una consulta de NoSQL. Esto les permite robar datos e incluso realizar cambios en la base de datos si sus privilegios son lo suficientemente altos.

Cuando una aplicación coloca datos controlados por el usuario directamente en una expresión de consulta NoSQL, estas expresiones suelen tomar funciones o tienen operadores integrados que pueden manipularse para robar o cambiar datos. Y cuando algo así se ejecuta con intención malintencionada, las consecuencias pueden ser nefastas.

Las bases de datos de MongoDB son uno de los campos de juego más populares para explotar esta vulnerabilidad. «$ne: «" 'es el operador equivalente a 1=1 en el mundo de SQL, por lo que, a modo de ejemplo, un atacante podría colocar los caracteres «$ne: «» 'en los campos de nombre de usuario y contraseña de una interfaz de usuario. Si el código es vulnerable a la inyección de NoSQL, la base de datos buscará todos los registros en los que el nombre de usuario y la contraseña no coincidan con una cadena vacía. En otras palabras: todos ellos. ¡Ay!.

Si esta base de datos no está cifrada, el atacante podría robar los nombres de usuario y contraseñas de todos los usuarios que contiene. Esto incluye el nombre de usuario y las contraseñas de los administradores, lo que les da un pase de acceso total a toda la base de datos.

Los atacantes suelen intentar transmitir valores que siempre son ciertos. Otro ataque habitual consiste en inyectar código malintencionado en las propiedades que están configuradas como funciones.

Por ejemplo, MongoDB usa una función de búsqueda que toma un objeto con una propiedad llamada $where. La propiedad $where se establece en una función que debe evaluarse como verdadera o falsa. Si esta función se modifica de alguna manera por la entrada del usuario, es probable que se encuentre ahí una inyección de NoSQL.

Para obtener una visión detallada de las complejidades de la inyección de NoSQL, consulte esto Artículo de InfoQ.

Sepa por qué la inyección de NoSQL es peligrosa

La inyección de NoSQL es peligrosa sobre todo porque aún no ha recibido el escrutinio de la comunidad de seguridad que se merece.

Los impactos de la inyección de NoSQL son prácticamente los mismos que los de la inyección de SQL tradicional. Los datos pueden robarse o modificarse, las cuentas pueden verse comprometidas robando datos y, quizás lo más cruel, los datos podrían borrarse por completo si se ejecuta correctamente una orden de eliminación.

La conclusión es que MongoDB y otros motores de bases de datos NoSQL son vulnerables a los ataques. «Sin SQL» no significa que no haya inyecciones.
Afortunadamente, algunos miembros de la comunidad están tomando nota y hacer correr la voz. Es necesario que cada vez más desarrolladores se eduquen para poder proteger sus aplicaciones de productos poco conocidos que pueden convertirse en un gran quebradero de cabeza si se explotan.

Derrota la inyección de NoSQL

La inyección de NoSQL puede ser difícil de derrotar. Desafortunadamente, no existe la opción de realizar consultas parametrizadas como ocurre con la inyección de SQL. Sin embargo, no es imposible. Hay algunas opciones para ayudarte:

  • Los fuzzers se pueden usar como un método para detectar vulnerabilidades. Sin embargo, como ocurre con muchas cosas en la vida, el enfoque más simple puede ser el más efectivo. En este caso, una buena revisión del código antiguo es tu mejor aliada.
  • Al revisar el código, busca posibles lugares en los que la entrada del usuario pueda establecer el valor de una expresión o cambiar una función. No permitas que la entrada del usuario cambie tus consultas.
  • Asegúrese de enviar la entrada del usuario a la clase que le corresponde. Si es un número, muévelo a un número, si es una cadena, convierte a una cadena y así sucesivamente.
  • Nunca utilice $where o funciones de evaluación similares junto con la entrada del usuario. En la mayoría de los casos, puede solucionarlo cambiando el modelo o esquema de datos.
  • Intenta usar Mangosta como su controlador de MongoDB. Mongoose le permite definir un esquema para su base de datos NoSQL. Si tú dígale a Mongoose que sus entradas son cadenas, se moldearán para formar cuerdas. Por lo tanto, los objetos introducidos por un atacante no serán tratados como objetos, sino como cadenas.
  • ¡Endurece tu base de datos! Cree cuentas de usuario con pocos privilegios, maximice el tiempo de ejecución de las consultas y siga siempre las mejores prácticas de seguridad que se aplican a su organización.

Una desventaja de la facilidad de uso de las bases de datos NoSQL es la tendencia de los desarrolladores a dejarlas de lado y empezar a usarlas sin pensar en la seguridad.

Es fundamental que dedique tiempo a aprender a montar de forma segura una base de datos NoSQL y a protegerse de las inyecciones de NoSQL.

Por ejemplo, Edición MongoDB Enterprise cuenta con funciones avanzadas de control de acceso para sus documentos. Aplicar el «mínimo privilegio» puede ser una buena estrategia de defensa en profundidad (DiD) en caso de que alguien descubriera una vulnerabilidad en su aplicación.

En resumen, esto es lo que tenemos:

  • Desinfecte la entrada antes de usarla en una expresión de consulta NoSQL
  • Usa controladores que te ayuden, como Mongoose
  • Realice revisiones de código que analicen específicamente cómo se utilizan los datos de entrada en las consultas
  • Usa fuzzers y escáneres para intentar encontrar vulnerabilidades en tu código.

NoSQL no es Sin Inyecciones

Las bases de datos NoSQL están ganando popularidad rápidamente debido a sus funciones escalables y velocidad de configuración. La novedad de la tecnología puede llevar a los desarrolladores a utilizar bases de datos NoSQL sin pensar en cómo protegerlas.

Las bases de datos NoSQL pueden ser tan vulnerables como las bases de datos SQL a los ataques de inyección, así que actúe con cautela y preste atención a sus consultas. Si quieres obtener más información, consulta nuestra Recursos de aprendizaje o ponga a prueba sus habilidades con nuestro demo gratuita.

Prepárese con antelación y no tendrá que preocuparse por las inyecciones de NoSQL en sus aplicaciones. ¡Demasiado fácil!

¿Cree que está listo para localizar, identificar y corregir la inyección de NoSQL ahora mismo? Entra en la arena del código seguro, guerrero:

¡Y eso es todo para 2018! Esta será nuestra última publicación del año, pero volveremos con la próxima guía de Coders Conquer Security el 10 de enero de 2019. ¡Nos vemos pronto!

Veuillez consulter la ressource
Veuillez consulter la ressource

Veuillez remplir le formulaire suivant pour télécharger le rapport.

Nous souhaiterions obtenir votre autorisation pour vous envoyer des informations sur nos produits ou sur des sujets liés au codage sécurisé. Nous traiterons toujours vos données personnelles avec le plus grand soin et ne les vendrons jamais à d'autres entreprises à des fins de marketing.

Envoyer
icône de réussite scw
icône d'erreur scw
Pour envoyer le formulaire, veuillez activer les cookies « d'analyse ». N'hésitez pas à les désactiver à nouveau une fois que vous avez terminé.

Las bases de datos NoSQL son cada vez más popular. Es difícil negar su rapidez y facilidad para tratar datos no estructurados, especialmente cuando los equipos de desarrollo trabajan con metodologías cada vez más ágiles.

Los desarrolladores necesitan tiempo para eliminar las vulnerabilidades y otros desafíos de la tecnología emergente. Solo después de que haya estado en uso durante algún tiempo en aplicaciones de producción, los problemas comienzan a salir a la superficie.

Las bases de datos NoSQL son similares. Existen riesgos clave que los desarrolladores deben conocer para poder mantener sus aplicaciones seguras. Uno de esos riesgos es la inyección de NoSQL.

Veamos qué es la inyección NoSQL, qué daño puede causar y cómo solucionarlo:

Comprenda la inyección de NoSQL

La inyección de NoSQL se debe a muchas de las mismas vulnerabilidades de inyección, como XML o Inyección SQL.

La inyección de NoSQL permite a los atacantes colocar comandos arbitrarios en una consulta de NoSQL. Esto les permite robar datos e incluso realizar cambios en la base de datos si sus privilegios son lo suficientemente altos.

Cuando una aplicación coloca datos controlados por el usuario directamente en una expresión de consulta NoSQL, estas expresiones suelen tomar funciones o tienen operadores integrados que pueden manipularse para robar o cambiar datos. Y cuando algo así se ejecuta con intención malintencionada, las consecuencias pueden ser nefastas.

Las bases de datos de MongoDB son uno de los campos de juego más populares para explotar esta vulnerabilidad. «$ne: «" 'es el operador equivalente a 1=1 en el mundo de SQL, por lo que, a modo de ejemplo, un atacante podría colocar los caracteres «$ne: «» 'en los campos de nombre de usuario y contraseña de una interfaz de usuario. Si el código es vulnerable a la inyección de NoSQL, la base de datos buscará todos los registros en los que el nombre de usuario y la contraseña no coincidan con una cadena vacía. En otras palabras: todos ellos. ¡Ay!.

Si esta base de datos no está cifrada, el atacante podría robar los nombres de usuario y contraseñas de todos los usuarios que contiene. Esto incluye el nombre de usuario y las contraseñas de los administradores, lo que les da un pase de acceso total a toda la base de datos.

Los atacantes suelen intentar transmitir valores que siempre son ciertos. Otro ataque habitual consiste en inyectar código malintencionado en las propiedades que están configuradas como funciones.

Por ejemplo, MongoDB usa una función de búsqueda que toma un objeto con una propiedad llamada $where. La propiedad $where se establece en una función que debe evaluarse como verdadera o falsa. Si esta función se modifica de alguna manera por la entrada del usuario, es probable que se encuentre ahí una inyección de NoSQL.

Para obtener una visión detallada de las complejidades de la inyección de NoSQL, consulte esto Artículo de InfoQ.

Sepa por qué la inyección de NoSQL es peligrosa

La inyección de NoSQL es peligrosa sobre todo porque aún no ha recibido el escrutinio de la comunidad de seguridad que se merece.

Los impactos de la inyección de NoSQL son prácticamente los mismos que los de la inyección de SQL tradicional. Los datos pueden robarse o modificarse, las cuentas pueden verse comprometidas robando datos y, quizás lo más cruel, los datos podrían borrarse por completo si se ejecuta correctamente una orden de eliminación.

La conclusión es que MongoDB y otros motores de bases de datos NoSQL son vulnerables a los ataques. «Sin SQL» no significa que no haya inyecciones.
Afortunadamente, algunos miembros de la comunidad están tomando nota y hacer correr la voz. Es necesario que cada vez más desarrolladores se eduquen para poder proteger sus aplicaciones de productos poco conocidos que pueden convertirse en un gran quebradero de cabeza si se explotan.

Derrota la inyección de NoSQL

La inyección de NoSQL puede ser difícil de derrotar. Desafortunadamente, no existe la opción de realizar consultas parametrizadas como ocurre con la inyección de SQL. Sin embargo, no es imposible. Hay algunas opciones para ayudarte:

  • Los fuzzers se pueden usar como un método para detectar vulnerabilidades. Sin embargo, como ocurre con muchas cosas en la vida, el enfoque más simple puede ser el más efectivo. En este caso, una buena revisión del código antiguo es tu mejor aliada.
  • Al revisar el código, busca posibles lugares en los que la entrada del usuario pueda establecer el valor de una expresión o cambiar una función. No permitas que la entrada del usuario cambie tus consultas.
  • Asegúrese de enviar la entrada del usuario a la clase que le corresponde. Si es un número, muévelo a un número, si es una cadena, convierte a una cadena y así sucesivamente.
  • Nunca utilice $where o funciones de evaluación similares junto con la entrada del usuario. En la mayoría de los casos, puede solucionarlo cambiando el modelo o esquema de datos.
  • Intenta usar Mangosta como su controlador de MongoDB. Mongoose le permite definir un esquema para su base de datos NoSQL. Si tú dígale a Mongoose que sus entradas son cadenas, se moldearán para formar cuerdas. Por lo tanto, los objetos introducidos por un atacante no serán tratados como objetos, sino como cadenas.
  • ¡Endurece tu base de datos! Cree cuentas de usuario con pocos privilegios, maximice el tiempo de ejecución de las consultas y siga siempre las mejores prácticas de seguridad que se aplican a su organización.

Una desventaja de la facilidad de uso de las bases de datos NoSQL es la tendencia de los desarrolladores a dejarlas de lado y empezar a usarlas sin pensar en la seguridad.

Es fundamental que dedique tiempo a aprender a montar de forma segura una base de datos NoSQL y a protegerse de las inyecciones de NoSQL.

Por ejemplo, Edición MongoDB Enterprise cuenta con funciones avanzadas de control de acceso para sus documentos. Aplicar el «mínimo privilegio» puede ser una buena estrategia de defensa en profundidad (DiD) en caso de que alguien descubriera una vulnerabilidad en su aplicación.

En resumen, esto es lo que tenemos:

  • Desinfecte la entrada antes de usarla en una expresión de consulta NoSQL
  • Usa controladores que te ayuden, como Mongoose
  • Realice revisiones de código que analicen específicamente cómo se utilizan los datos de entrada en las consultas
  • Usa fuzzers y escáneres para intentar encontrar vulnerabilidades en tu código.

NoSQL no es Sin Inyecciones

Las bases de datos NoSQL están ganando popularidad rápidamente debido a sus funciones escalables y velocidad de configuración. La novedad de la tecnología puede llevar a los desarrolladores a utilizar bases de datos NoSQL sin pensar en cómo protegerlas.

Las bases de datos NoSQL pueden ser tan vulnerables como las bases de datos SQL a los ataques de inyección, así que actúe con cautela y preste atención a sus consultas. Si quieres obtener más información, consulta nuestra Recursos de aprendizaje o ponga a prueba sus habilidades con nuestro demo gratuita.

Prepárese con antelación y no tendrá que preocuparse por las inyecciones de NoSQL en sus aplicaciones. ¡Demasiado fácil!

¿Cree que está listo para localizar, identificar y corregir la inyección de NoSQL ahora mismo? Entra en la arena del código seguro, guerrero:

¡Y eso es todo para 2018! Esta será nuestra última publicación del año, pero volveremos con la próxima guía de Coders Conquer Security el 10 de enero de 2019. ¡Nos vemos pronto!

Veuillez consulter le webinaire
Commencer
En savoir plus

Veuillez cliquer sur le lien ci-dessous et télécharger le PDF de cette ressource.

Secure Code Warrior là pour aider votre organisation à protéger le code tout au long du cycle de vie du développement logiciel et à créer une culture où la cybersécurité est une priorité. Que vous soyez administrateur AppSec, développeur, CISO ou toute autre personne impliquée dans la sécurité, nous pouvons aider votre organisation à réduire les risques associés à un code non sécurisé.

Veuillez consulter le rapportVeuillez réserver une démonstration.
Télécharger le PDF
Veuillez consulter la ressource
Partager sur :
marques LinkedInSocialLogo x
Souhaitez-vous en savoir davantage ?

Partager sur :
marques LinkedInSocialLogo x
auteur
Jaap Karan Singh
Publié le 20 décembre 2018

Jaap Karan Singh est un évangéliste du codage sécurisé, Chief Singh et cofondateur de Secure Code Warrior.

Partager sur :
marques LinkedInSocialLogo x

Las bases de datos NoSQL son cada vez más popular. Es difícil negar su rapidez y facilidad para tratar datos no estructurados, especialmente cuando los equipos de desarrollo trabajan con metodologías cada vez más ágiles.

Los desarrolladores necesitan tiempo para eliminar las vulnerabilidades y otros desafíos de la tecnología emergente. Solo después de que haya estado en uso durante algún tiempo en aplicaciones de producción, los problemas comienzan a salir a la superficie.

Las bases de datos NoSQL son similares. Existen riesgos clave que los desarrolladores deben conocer para poder mantener sus aplicaciones seguras. Uno de esos riesgos es la inyección de NoSQL.

Veamos qué es la inyección NoSQL, qué daño puede causar y cómo solucionarlo:

Comprenda la inyección de NoSQL

La inyección de NoSQL se debe a muchas de las mismas vulnerabilidades de inyección, como XML o Inyección SQL.

La inyección de NoSQL permite a los atacantes colocar comandos arbitrarios en una consulta de NoSQL. Esto les permite robar datos e incluso realizar cambios en la base de datos si sus privilegios son lo suficientemente altos.

Cuando una aplicación coloca datos controlados por el usuario directamente en una expresión de consulta NoSQL, estas expresiones suelen tomar funciones o tienen operadores integrados que pueden manipularse para robar o cambiar datos. Y cuando algo así se ejecuta con intención malintencionada, las consecuencias pueden ser nefastas.

Las bases de datos de MongoDB son uno de los campos de juego más populares para explotar esta vulnerabilidad. «$ne: «" 'es el operador equivalente a 1=1 en el mundo de SQL, por lo que, a modo de ejemplo, un atacante podría colocar los caracteres «$ne: «» 'en los campos de nombre de usuario y contraseña de una interfaz de usuario. Si el código es vulnerable a la inyección de NoSQL, la base de datos buscará todos los registros en los que el nombre de usuario y la contraseña no coincidan con una cadena vacía. En otras palabras: todos ellos. ¡Ay!.

Si esta base de datos no está cifrada, el atacante podría robar los nombres de usuario y contraseñas de todos los usuarios que contiene. Esto incluye el nombre de usuario y las contraseñas de los administradores, lo que les da un pase de acceso total a toda la base de datos.

Los atacantes suelen intentar transmitir valores que siempre son ciertos. Otro ataque habitual consiste en inyectar código malintencionado en las propiedades que están configuradas como funciones.

Por ejemplo, MongoDB usa una función de búsqueda que toma un objeto con una propiedad llamada $where. La propiedad $where se establece en una función que debe evaluarse como verdadera o falsa. Si esta función se modifica de alguna manera por la entrada del usuario, es probable que se encuentre ahí una inyección de NoSQL.

Para obtener una visión detallada de las complejidades de la inyección de NoSQL, consulte esto Artículo de InfoQ.

Sepa por qué la inyección de NoSQL es peligrosa

La inyección de NoSQL es peligrosa sobre todo porque aún no ha recibido el escrutinio de la comunidad de seguridad que se merece.

Los impactos de la inyección de NoSQL son prácticamente los mismos que los de la inyección de SQL tradicional. Los datos pueden robarse o modificarse, las cuentas pueden verse comprometidas robando datos y, quizás lo más cruel, los datos podrían borrarse por completo si se ejecuta correctamente una orden de eliminación.

La conclusión es que MongoDB y otros motores de bases de datos NoSQL son vulnerables a los ataques. «Sin SQL» no significa que no haya inyecciones.
Afortunadamente, algunos miembros de la comunidad están tomando nota y hacer correr la voz. Es necesario que cada vez más desarrolladores se eduquen para poder proteger sus aplicaciones de productos poco conocidos que pueden convertirse en un gran quebradero de cabeza si se explotan.

Derrota la inyección de NoSQL

La inyección de NoSQL puede ser difícil de derrotar. Desafortunadamente, no existe la opción de realizar consultas parametrizadas como ocurre con la inyección de SQL. Sin embargo, no es imposible. Hay algunas opciones para ayudarte:

  • Los fuzzers se pueden usar como un método para detectar vulnerabilidades. Sin embargo, como ocurre con muchas cosas en la vida, el enfoque más simple puede ser el más efectivo. En este caso, una buena revisión del código antiguo es tu mejor aliada.
  • Al revisar el código, busca posibles lugares en los que la entrada del usuario pueda establecer el valor de una expresión o cambiar una función. No permitas que la entrada del usuario cambie tus consultas.
  • Asegúrese de enviar la entrada del usuario a la clase que le corresponde. Si es un número, muévelo a un número, si es una cadena, convierte a una cadena y así sucesivamente.
  • Nunca utilice $where o funciones de evaluación similares junto con la entrada del usuario. En la mayoría de los casos, puede solucionarlo cambiando el modelo o esquema de datos.
  • Intenta usar Mangosta como su controlador de MongoDB. Mongoose le permite definir un esquema para su base de datos NoSQL. Si tú dígale a Mongoose que sus entradas son cadenas, se moldearán para formar cuerdas. Por lo tanto, los objetos introducidos por un atacante no serán tratados como objetos, sino como cadenas.
  • ¡Endurece tu base de datos! Cree cuentas de usuario con pocos privilegios, maximice el tiempo de ejecución de las consultas y siga siempre las mejores prácticas de seguridad que se aplican a su organización.

Una desventaja de la facilidad de uso de las bases de datos NoSQL es la tendencia de los desarrolladores a dejarlas de lado y empezar a usarlas sin pensar en la seguridad.

Es fundamental que dedique tiempo a aprender a montar de forma segura una base de datos NoSQL y a protegerse de las inyecciones de NoSQL.

Por ejemplo, Edición MongoDB Enterprise cuenta con funciones avanzadas de control de acceso para sus documentos. Aplicar el «mínimo privilegio» puede ser una buena estrategia de defensa en profundidad (DiD) en caso de que alguien descubriera una vulnerabilidad en su aplicación.

En resumen, esto es lo que tenemos:

  • Desinfecte la entrada antes de usarla en una expresión de consulta NoSQL
  • Usa controladores que te ayuden, como Mongoose
  • Realice revisiones de código que analicen específicamente cómo se utilizan los datos de entrada en las consultas
  • Usa fuzzers y escáneres para intentar encontrar vulnerabilidades en tu código.

NoSQL no es Sin Inyecciones

Las bases de datos NoSQL están ganando popularidad rápidamente debido a sus funciones escalables y velocidad de configuración. La novedad de la tecnología puede llevar a los desarrolladores a utilizar bases de datos NoSQL sin pensar en cómo protegerlas.

Las bases de datos NoSQL pueden ser tan vulnerables como las bases de datos SQL a los ataques de inyección, así que actúe con cautela y preste atención a sus consultas. Si quieres obtener más información, consulta nuestra Recursos de aprendizaje o ponga a prueba sus habilidades con nuestro demo gratuita.

Prepárese con antelación y no tendrá que preocuparse por las inyecciones de NoSQL en sus aplicaciones. ¡Demasiado fácil!

¿Cree que está listo para localizar, identificar y corregir la inyección de NoSQL ahora mismo? Entra en la arena del código seguro, guerrero:

¡Y eso es todo para 2018! Esta será nuestra última publicación del año, pero volveremos con la próxima guía de Coders Conquer Security el 10 de enero de 2019. ¡Nos vemos pronto!

Table des matières

Télécharger le PDF
Veuillez consulter la ressource
Souhaitez-vous en savoir davantage ?

Jaap Karan Singh est un évangéliste du codage sécurisé, Chief Singh et cofondateur de Secure Code Warrior.

En savoir plus

Secure Code Warrior là pour aider votre organisation à protéger le code tout au long du cycle de vie du développement logiciel et à créer une culture où la cybersécurité est une priorité. Que vous soyez administrateur AppSec, développeur, CISO ou toute autre personne impliquée dans la sécurité, nous pouvons aider votre organisation à réduire les risques associés à un code non sécurisé.

Veuillez réserver une démonstration.Télécharger
Partager sur :
marques LinkedInSocialLogo x
Centre de ressources

Ressources pour débuter

Plus de publications
Centre de ressources

Ressources pour débuter

Plus de publications