¿Cuáles son los problemas de seguridad de los archivos JSON codificados en base64? [cerrado]

0

En una API REST, me gustaría recibir imágenes como cadenas codificadas base64 en un objeto JSON desde la publicación del usuario y guardarlas en el disco usando el módulo node.js fs .

El cuerpo de la solicitud son objetos como:

 { file: 'data:image/png;base64,iVBORw0KGgoAAA...

¿Me pregunto si existen algunas vulnerabilidades asociadas con dicho almacenamiento de archivos y cómo evitarlas?

    
pregunta Karlom 19.10.2018 - 11:24
fuente

2 respuestas

3

En primer lugar, existen todos los riesgos de seguridad del servicio web estándar (seguridad de conexión, autenticación, autorización, gestión de sesiones, denegación de servicio, registro, parches, etc.). No voy a hablar más sobre eso por ahora, pero tenga en cuenta que necesita un entorno seguro para algo como esto.

En cuanto a los riesgos específicos de su sistema y los que le gustan ... El riesgo más obvio se produce si los usuarios tienen algún control sobre el nombre de archivo que crea el servicio. Si es así, tiene riesgos tales como el desplazamiento del sistema de archivos, la sobrescritura de los archivos de otros, etc. No parece que planees hacer esto, pero es algo a tener en cuenta.

También existe el riesgo de cargar contenido que podría usarse para atacar al servidor oa los otros usuarios. Estos ataques son más fáciles si el atacante puede controlar el nombre del archivo, pero es posible si todo lo que pueden controlar es la extensión (y aprenden el nombre del archivo), y si hay una API web para descargar el archivo. Para atacar al servidor, cargue un archivo malicioso que el servidor tratará como ejecutable (por ejemplo, una página PHP si el servidor lo admite) y luego navegue hasta él; Es posible que esto no sea posible si está utilizando un servidor Node bien configurado. Para atacar a otros usuarios, cargue un archivo HTML malicioso e intente engañar a otros usuarios para que lo vean en su navegador (lo que resulta en un XSS almacenado); esto puede mitigarse haciendo que los archivos sean recuperables solo de un dominio diferente al que el usuario tiene cookies / autenticación, y / o forzando al navegador a descargar el archivo en lugar de mostrarlo.

Hay denegación de servicio simplemente subiendo demasiados datos. Considere la cantidad de datos que permitirá que los usuarios almacenen y cómo aplica ese límite.

Existe el riesgo de contenido ilegal. El ejemplo estándar aquí es la pornografía infantil; Si los usuarios suben dicho contenido a su servidor y se descubre que está "en posesión" de él, las cosas podrían ir mal para usted. Recomiendo consultar las leyes locales y, idealmente, preguntar a un abogado cuáles son sus derechos y responsabilidades cuando se trata de alojar contenido subido por usuarios.

Hay algunos riesgos para sus analizadores JSON o base64, aunque estos formatos son simples y están ampliamente implementados, por lo que no esperaría problemas allí. Sin embargo, no entiendo por qué quieres usar estos formatos; Los tipos de contenido MIME son la forma estándar de cargar archivos en un servidor web (y, por lo tanto, incorporan el análisis integrado en la mayoría de los servidores web) y consumen menos ancho de banda (base64 expande todo el contenido codificado a 4/3 del tamaño, pero no hay razón un cuerpo de solicitud HTTP debe estar compuesto solo de caracteres imprimibles).

Ya que está almacenando una gran cantidad de datos de usuarios, debe considerar la seguridad de los datos en reposo. Cifrar los archivos individualmente, cifrar todo el volumen o utilizar un almacén externo cifrado de forma transparente son todas las formas posibles de lograrlo, pero también presentan el problema del almacenamiento de claves (como lo hacen casi todos los sistemas criptográficos). No olvide asegurarse de que sus copias de seguridad también estén protegidas; Se han filtrado o robado toneladas de datos confidenciales después de que alguien consiguió las cintas de respaldo o algo similar.

También puede considerar el tema de la privacidad del usuario. Si bien no es exactamente una función de seguridad, la privacidad (para evitar que usuarios no autorizados, que posiblemente lo incluyan a usted, el operador del servicio, vea lo que se cargó) implica una mentalidad similar y, a menudo, se proporciona mediante herramientas de seguridad (como el cifrado). Etiquetó esta pregunta como "cifrado de archivos", pero en realidad no habla de cifrado (base64 es una codificación, pero no hay ninguna clave involucrada; cualquiera que quiera puede decodificarlo, por lo que no es un cifrado). esquema).

    
respondido por el CBHacking 19.10.2018 - 12:20
fuente
1

Base64 es una forma común de incluir datos binarios en documentos de texto, como JSON o correos electrónicos. De hecho, esta codificación fue creada para este propósito.

Como nota al margen, esta codificación no está diseñada para usarse para el almacenamiento de datos, sino para la transmisión de datos a través de protocolos de texto.

Las vulnerabilidades podrían provenir del analizador base64, pero como es un formato muy simple, es poco probable en comparación con otros formatos de codificación. Sin embargo, todavía sucedió en el pasado, varias veces. Así que debes tener cuidado al elegir tu analizador.

Otras vulnerabilidades podrían provenir de su analizador JSON. Las mismas observaciones que para base64 se aplican aquí también.

Las otras posibles vulnerabilidades no dependen específicamente de base64 o JSON, por lo que no las abordaré aquí (y eso sería responder a una pregunta bastante amplia). En general, tenga cuidado al desarrollar su API REST. Buenas guías se pueden encontrar libremente, como OWASP para el desarrollo web. También puede hacer una evaluación de riesgos simple para priorizar sus esfuerzos de seguridad.

    
respondido por el A. Hersean 19.10.2018 - 12:01
fuente

Lea otras preguntas en las etiquetas