TL; DR
Guardamos la carga útil de solicitud y el encabezado Content-Type
en una base de datos. Debe ser JSON o CSV pero puede tener un formato incorrecto. Los usuarios de soporte descargan la carga útil de solicitud como un archivo en sus navegadores utilizando Content-Disposition: attachment
. Intentamos agregar una extensión de archivo de .json
o, la predeterminada, '.csv'.
¿Cómo pueden los usuarios de soporte descargar este archivo de forma segura cuando podría contener absolutamente cualquier cosa? Estoy menos preocupado por los ataques tipo ZIP, pero hay más spyware, ransomware, etc., etc.
Background
Tenemos una API REST que admite tipos de contenido JSON y CSV.
La API está protegida con un certificado de cliente único para cada usuario.
Por razones de arbitraje debemos mantener un registro de auditoría del contenido exacto enviado al servicio, lo hacemos almacenando los bytes directamente en la base de datos junto con el encabezado de tipo de contenido y algunos otros campos de la URL y el certificado del cliente. Todo esto, con la excepción del certificado, es una validación previa, ya que también necesitamos registrar los envíos no válidos.
Tenemos un equipo de soporte, una actividad muy importante para ellos es ayudar a los usuarios que no pueden enviar sus documentos debido a a) contenido mal formado o b) el contenido infringe alguna regla comercial.
Ahora ha llegado un requisito para permitir que nuestro equipo de soporte descargue la información de auditoría para que puedan tratar de reproducir el problema de los usuarios enviándolo a un sistema de prueba o simplemente mirando el contenido para detectar errores.
Si podemos detectar el tipo de contenido, proporcionaremos un enlace al archivo con una extensión .csv o .json.
El problema
Obviamente, esto está completamente abierto a XSS desde el punto de los campos no validados, pero eso se mitiga fácilmente al codificarlo correctamente para su visualización. Sin embargo, no veo cómo es posible para el archivo descargado.
Por ejemplo, presento una hoja de cálculo de Excel con Content-Type: text/csv
, un usuario de soporte descarga el archivo y lo abre en Excel para ver el CSV y se le advierte que "la extensión del archivo no coincide con el contenido. ¿Quieren abrirlo de todos modos? ? " a lo que hacen clic en "sí" porque están tratando de averiguar por qué está mal formado y mi hoja de cálculo maliciosa está abierta.
Incluso si eliminamos el requisito de extensión de archivo, un usuario de soporte puede intentar abrirlo en Excel de todos modos, ya que se supone que el contenido es un CSV.
Solutions
No puedo pensar en ninguna solución robusta;
- Primero, entrene a los usuarios de soporte técnico para abrir en el editor de texto sin formato, pero los usuarios son falibles)
- Evite la descarga de contenido que no sean datos de caracteres, pero los datos de caracteres aún pueden ser un vector de ataque, es decir, un archivo
.bat
y no cumplen con los requisitos - Codifique el contenido y visualícelo en la pantalla para copiar / pegar, asegurándose así de que solo sea texto, los archivos podrían ser grandes y actualmente utilizan la transmisión desde DB a la corriente de salida para mantener bajo el gasto de memoria.
- Confíe en nuestros usuarios y que ellos mantengan seguros sus certificados de cliente
¿Es solo que los requisitos siempre estarán en desacuerdo con la seguridad y no hay forma de descargar archivos enviados por el usuario de manera segura?