SCW 아이콘
영웅 배경, 구분선 없음
블로그

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

야프 카란 싱
2018년 12월 20일 게시
마지막 업데이트: 2026년 3월 6일

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!

리소스 보기
리소스 보기

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.

더 알고 싶으신가요?

야프 카란 싱은 보안 코딩 전도자, 수석 싱 및 공동 설립자입니다 Secure Code Warrior .

더 알아보세요

Secure Code Warrior 귀사의 조직이 소프트웨어 개발 라이프사이클 전반에 걸쳐 코드를 보호하고 사이버보안을 최우선으로 하는 문화를 조성하도록 Secure Code Warrior . AppSec 관리자, 개발자, CISO 또는 보안 관련 담당자라면 누구든, 저희는 귀사의 조직이 안전하지 않은 코드와 관련된 위험을 줄일 수 있도록 돕습니다.

데모 예약하기
공유하기:
링크드인 브랜드사회적x 로고
저자
야프 카란 싱
게시일: 2018년 12월 20일

야프 카란 싱은 보안 코딩 전도자, 수석 싱 및 공동 설립자입니다 Secure Code Warrior .

공유하기:
링크드인 브랜드사회적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!

리소스 보기
리소스 보기

다음 양식을 작성하여 보고서를 다운로드하십시오.

귀하의 허락을 받아 당사 제품 또는 안전한 암호화 관련 주제에 대한 정보를 보내드리고자 합니다. 귀하의 개인정보는 항상 최대한 신중하게 처리하며, 마케팅 목적으로 타사에 판매하지 않을 것을 약속드립니다.

보내기
scw 성공 아이콘
scw 오류 아이콘
양식을 보내려면 '분석' 쿠키를 활성화하세요. 완료 후에는 언제든지 다시 비활성화해도 됩니다.

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!

웹 세미나 보기
시작하다
더 알아보세요

아래 링크를 클릭하고 이 자료의 PDF를 다운로드하세요.

Secure Code Warrior 귀사의 조직이 소프트웨어 개발 라이프사이클 전반에 걸쳐 코드를 보호하고 사이버보안을 최우선으로 하는 문화를 조성하도록 Secure Code Warrior . AppSec 관리자, 개발자, CISO 또는 보안 관련 담당자라면 누구든, 저희는 귀사의 조직이 안전하지 않은 코드와 관련된 위험을 줄일 수 있도록 돕습니다.

보고서 보기데모 예약하기
리소스 보기
공유하기:
링크드인 브랜드사회적x 로고
더 알고 싶으신가요?

공유하기:
링크드인 브랜드사회적x 로고
저자
야프 카란 싱
게시일: 2018년 12월 20일

야프 카란 싱은 보안 코딩 전도자, 수석 싱 및 공동 설립자입니다 Secure Code Warrior .

공유하기:
링크드인 브랜드사회적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!

목차

PDF 다운로드
리소스 보기
더 알고 싶으신가요?

야프 카란 싱은 보안 코딩 전도자, 수석 싱 및 공동 설립자입니다 Secure Code Warrior .

더 알아보세요

Secure Code Warrior 귀사의 조직이 소프트웨어 개발 라이프사이클 전반에 걸쳐 코드를 보호하고 사이버보안을 최우선으로 하는 문화를 조성하도록 Secure Code Warrior . AppSec 관리자, 개발자, CISO 또는 보안 관련 담당자라면 누구든, 저희는 귀사의 조직이 안전하지 않은 코드와 관련된 위험을 줄일 수 있도록 돕습니다.

데모 예약하기다운로드
공유하기:
링크드인 브랜드사회적x 로고
자원 센터

시작하기 위한 자료

더 많은 게시물
자원 센터

시작하기 위한 자료

더 많은 게시물