Abuso de acceso transitivo - Exfiltración de datos a través de la IA de documentos

16 de septiembre de 2024
Kat Traxler
Principal Security Researcher
Abuso de acceso transitivo - Exfiltración de datos a través de la IA de documentos

16 de septiembre de 2024

TLDR;

‍Elservicio Document AI permite involuntariamente a los usuarios leer cualquier objeto de Cloud Storage en el mismo proyecto.

  • Error de configuración del servicio Document AI: El agente del servicio Document AI se autoasigna con permisos excesivos, lo que le permite acceder a todos los objetos de los buckets de almacenamiento Cloud del mismo proyecto.
  • Riesgo de exfiltración de datos: los actores maliciosos pueden aprovecharse de esto para exfiltrar datos del almacenamiento Cloud nube aprovechando indirectamente los permisos del agente de servicio.
  • Abuso de acceso transitivo: Esta vulnerabilidad es un caso de abuso de acceso transitivo, una clase de fallo de seguridad donde el acceso no autorizado se obtiene indirectamente a través de un intermediario de confianza. 
  • Impacto para los clientes de Google Cloud : Con este caso de abuso, las amenazas van más allá de los "permisos de riesgo" de primer nivel para incluir una telaraña de relaciones transitivas no documentadas. 

Antecedentes del servicio:

Document AI es un servicio de Google Cloud que extrae información de documentos no estructurados. Ofrece tanto modelos preentrenados como una plataforma para crear modelos personalizados. Como parte de Vertex AI, Document AI se integra con otros servicios de IA para servir y compartir modelos.

Document AI emplea una cuenta de servicio gestionada por Google, a menudo denominada agente de servicio, a la que se asigna el rol documentaicore.serviceAgent cuando se procesan documentos por lotes. Esta cuenta gestiona la entrada, transformación y salida de datos utilizando sus amplios permisos de almacenamiento Cloud . Este enfoque reduce la fricción para el usuario final mediante la automatización de la creación de identidades y la autoasignación de permisos en comparación con la alternativa de utilizar una cuenta de servicio gestionada por el cliente para la ejecución, lo que requeriría una configuración explícita y la asignación manual de roles.

 

Descripción de la vulnerabilidad

Document AI permite a los usuarios procesar documentos almacenados en Cloud Storage mediante la creación de trabajos en línea (estándar) y trabajos de procesamiento fuera de línea (por lotes). El servicio utiliza el Document AI Core Service Agent con el Role documentaicore.serviceAgent para gestionar la ingesta de datos y la salida de los resultados cuando se realiza el procesamiento por lotes. Además, este agente de servicio posee amplios permisos para acceder a cualquier bucket de almacenamiento Cloud nube dentro del mismo proyecto. 

A diferencia del procesamiento en línea o estándar, en el que el autor de la llamada inicial a Document AI es el principal utilizado para recuperar objetos GCS, en el modo de procesamiento por lotes, la recuperación de cualquier dato de entrada y la escritura de los resultados en un bucket GCS se ejecutan en el contexto del Agente de Servicio del Core de Document AI, utilizando sus permisos preasignados. Dado que el Agente de Servicio se utiliza como identidad en el procesamiento por lotes, no se respetan las limitaciones de permisos de la persona que realiza la llamada inicial, lo que permite la exfiltración de datos.

El servicio Document AI toma una ubicación de entrada definida por el usuario para leer datos preprocesados y una ubicación de salida para escribir sus resultados. Esta capacidad permite a un actor malicioso filtrar datos de GCS a un bucket de almacenamiento Cloud nube arbitrario, eludiendo los controles de acceso y filtrando información confidencial.

Aprovechar el servicio (y su identidad) para exfiltrar datos constituye un abuso de acceso transitivo, que elude los controles de acceso previstos y pone en peligro la confidencialidad de los datos.

Requisitos previos

  1. Procesador AI de documentos existente

Supongamos que existe un procesador en un proyecto de destino. En ese caso, un actor malicioso solo necesita el permiso documentai.processors.processBatch o documentai.processorVersions.processBatch para utilizar el procesador, leer datos de cualquier bucket de almacenamiento Cloud nube del proyecto y filtrar los objetos a un bucket arbitrario.

  1. Crear o actualizar un procesador

Si no existe ningún procesador en un proyecto objetivo, un actor malicioso necesitaría además el permiso documentai.processors.create para crear uno adecuado para la lectura desde un bucket de Cloud Storage y escribir la salida en otro. Alternativamente, un procesador podría ser alterado con el permiso documentai.processors.update para permitir la ingesta a través de un bucket GCS. 

  1. Documento AI no utilizado anteriormente

Si DocumentAI no se ha utilizado en un proyecto, un atacante debe habilitar el servicio antes de crear o utilizar un procesador. La habilitación de nuevos servicios en proyectos de GCP requiere el permiso de IAM de Cloud serviceusage.services.enable y se incluye en más de 25 roles predefinidos junto con el editor y el propietario de roles de granularidad gruesa. Al habilitar el servicio DocumentAI, se crea el Agente de Servicio asociado y su Rol autoasignado a nivel de Proyecto, no requiriendo permisos *.setIamPolicy del habilitador del servicio.

 

Prueba de concepto

Se proporcionan cuatro módulos Terraform para demostrar la exfiltración de datos a través de Document AI. Dos módulos explotan la función procesadores.processBatch y processorVersions.processBatch respectivamente, aprovechando los amplios permisos del agente de servicio para copiar datos de un bucket de entrada de Cloud Storage a un bucket de salida especificado por el usuario. Por el contrario, los dos módulos restantes muestran los modos en línea estándar, processors.process y processorVersions.process, que recuperan datos de entrada en el contexto de la persona que realiza la llamada original, respetando los controles de acceso esperados. Los métodos de proceso por lotes eluden eficazmente estos controles ejecutando el trabajo como Agente de Servicio de DocumentAI.    

Respuesta de Google 

Esta instancia de abuso de acceso transitivo fue reportada a Google a través de su Programa de Recompensa de Vulnerabilidades el 4 de abril de 2024. Después de varios meses de esfuerzos de los investigadores para identificar la causa raíz del problema y proponer una solución, Google ha aceptado el informe como una vulnerabilidad, clasificando como categoría S2C "elusión de controles de seguridad significativos", otros datos/sistemas. Se les informó de la divulgación pública prevista el 2 de julio.

Sin embargo, cabe destacar los siguientes comentarios y acciones:

  1. Google determinó que ".....el problema se debe a una documentación insuficiente o incorrecta".
  2. A pesar de que el problema persiste, el estado del informe triado a través de su Programa de Recompensa de Vulnerabilidades (VRP) se cambió a "Solucionado".
  3. Se ha añadido un recuadro de Precaución al Funciones IAM de DocumentAI en la que se advierte a los clientes de que "los permisos para documentai.procesadores.crear y documentai.datasets.update son muy privilegiados". 
    1. El siguiente cuadro de advertencia se añadió en algún momento después de la anterior instantánea de Internet Archive del 9 de diciembre de 2023. No tengo forma de saber si se añadió en respuesta a mi informe.

  1. Google revocó su decisión de retener la recompensa, citando "documentación insuficiente o incorrecta" como causa principal. Ahora el fallo se ha clasificado como una "elusión de controles de seguridad significativos" y se le ha concedido una recompensa. Aún no hay indicios de cuándo o cómo se solucionará el caso de abuso.

Recomendaciones para Google

 Al Agente de Servicio de Document AI no se le deben asignar automáticamente amplios permisos a nivel de proyecto. Si bien la utilización de una cuenta de servicio gestionada por Google ofrece ventajas operativas, concederle acceso ilimitado al almacenamiento Cloud nube junto con ubicaciones de entrada/salida definidas por el usuario introduce un riesgo de seguridad significativo a través del abuso de acceso transitivo. Es posible que el servicio funcione según lo previsto, pero no según lo esperado.

 

Impacto para los clientes de Google Cloud

Todos los clientes de Google Cloud se ven afectados por esta vulnerabilidad si no impiden la habilitación del servicio DocumentAI y su uso mediante las restricciones de política organizativa que se indican a continuación. No es necesario que un cliente utilice DocumentAI para verse afectado. La simple posibilidad de que un atacante habilite el servicio pone en riesgo de filtración datos críticos.

Cuando los permisos de IAM tienen efectos en cadena entre sí, resulta imposible responder a la pregunta "¿Qué podría ir mal?" con un servicio determinado. No está claro cuáles son los próximos pasos de Google para proteger a sus clientes, si tienen la intención de ofrecer una restricción de Política Organizativa o eliminarán este caso de abuso de acceso transitivo por completo.

Mitigación

Lamentablemente, el informe presentado a través del Programa de Recompensa de Vulnerabilidades (VRP) de Google no ha dado lugar a ningún cambio en el servicio a pesar de los esfuerzos realizados. Las migraciones que se mencionan a continuación no abordan la vulnerabilidad subyacente, sino que solo reducen el impacto potencial para el cliente. 

1. Segmentación a nivel de proyecto: Document AI debe utilizarse en un proyecto segmentado y aislado. No mezcle el servicio Document AI en un proyecto que contenga datos sensibles. Cuando utilice cualquier servicio SaaS o ETL, configure las ubicaciones de entradas y salidas entre proyectos. Esto forzará la vinculación manual de permisos IAM para cualquier Agente de Servicio en lugar de confiar en las concesiones automáticas.

 2. Restrinja la API y el servicio: Utiliza la Org Policy Constraint serviceuser .services para evitar la habilitación del servicio Document AI cuando no sea necesario y restringe el uso de la API con la Org Policy Constraint serviceuser.restrictServiceUsage.

Conclusiones

Las concesiones de roles y permisos sólo cuentan una parte de la historia, especialmente una vez que se consideran la funcionalidad del servicio y la posibilidad de acceso transitivo. Es probable que el abuso del acceso transitivo no quede aislado en el servicio Document AI, sino que se repita en todos los servicios (y en todos los principales proveedores de cloud ), ya que persisten los malentendidos sobre los modelos de amenazas.

Segmentar el almacenamiento de datos, la lógica empresarial y las cargas de trabajo en diferentes proyectos puede reducir el radio de explosión de agentes de servicio con excesivos privilegios, pero los clientes confían en que los proveedores de cloud nube se aseguren de que no están construyendo vías de escalada de privilegios en sus productos y esquemas de IAM.

Calendario de notificación y respuesta

  • 4 de abrilth 2024: Informe inicial: Exfiltración de datos a través del procesamiento de datos de Document AI, Edición 332943600
    • [Google VRP]: "¡Hola! Muchas gracias por compartir tu informe. Este correo electrónico confirma que hemos recibido tu mensaje. Investigaremos el problema del que nos has informado y nos pondremos en contacto contigo en cuanto tengamos una actualización. Mientras tanto, puede que quieras echar un vistazo a la lista de preguntas frecuentes sobre Google Bug Hunters.
  • 8 de abrilth 2024: Prioridad cambiada P4 -> P3 y Estado cambiado Nuevo -> Asignado
    • [Google VRP]: "Sólo queremos informarte de que tu informe ha sido clasificado y de que lo estamos investigando".
  • 9 de abrilth 2024: Type changes Customer Issue -> Bug; Severity changed from S4 -> S2; Status changed from Assigned -> In Progress (accepted)
    • [Google VRP]: "Gracias de nuevo por tu informe. He enviado un error al equipo de producto responsable basándome en tu informe. El equipo de producto evaluará tu informe y decidirá si es necesaria una solución. Le comunicaremos si se ha solucionado el problema. En cuanto a nuestro programa de recompensas por vulnerabilidades: A primera vista, parece que este problema no es lo suficientemente grave como para optar a una recompensa. Sin embargo, el panel del VRP examinará más detenidamente el problema en su próxima reunión. Le informaremos cuando hayamos tomado una decisión. Si no recibes noticias nuestras en 2-3 semanas o tienes información adicional sobre la vulnerabilidad, ¡háznoslo saber! "
  • 9 de abril de 2024 - [Kat Traxler]: "Como siempre, gracias por el rápido triaje. Si puedo ayudar en algo en la descripción del riesgo de la configuración actual, por favor no dude en ponerse en contacto. Gracias, Kat"
  • 30 de abril de 2024 - [Kat Traxler]: "Hola, trayendo esto a la parte superior de su bandeja de entrada. Preguntando si esto ha sido clasificado como un riesgo de abuso... o si alguna actualización del servicio está próxima. Gracias, Kat"
  • 2 de mayo de 2024 - [Google VRP]: "¡Hola! Los miembros del panel aún no han tomado una decisión sobre este informe; el panel se reúne dos veces por semana, y su informe se tiene en cuenta en cada reunión. Disculpe el retraso y muchas gracias por su paciencia. Recibirá un correo electrónico automático cuando se haya tomado una decisión".
  • 2 de mayo de 2024 - [Kat Traxler]: "Gracias por la actualización. Si no oigo nada en ~4 semanas más o menos, volveré a hacer ping".
  • 7 de mayo de 2024 - [Google VRP]: "** NOTA: Este es un correo electrónico generado automáticamente **Hola, el panel del Programa de Recompensa de Vulnerabilidades de Google ha decidido que el impacto en la seguridad de este problema no cumple los requisitos para una recompensa económica. Sin embargo, nos gustaría reconocer su contribución a la seguridad de Google en nuestra página de menciones honoríficas en https://bughunters.google.com/leaderboard/honorable-mentions. Si deseas que se te incluya en ella, crea un perfil en https://bughunters.google.com, si aún no lo has hecho. Justificación de esta decisión: Hemos determinado que el problema se debe a una documentación insuficiente o incorrecta. Ten en cuenta que el hecho de que no se recompense este problema no significa que el equipo de producto no vaya a solucionarlo. Hemos presentado un error al equipo de producto. Ellos revisarán tu informe y decidirán si es necesaria una solución. Te comunicaremos si se ha solucionado el problema. Saludos, Google Security Bot".
  • 7 de mayo de 2024: - [Kat Traxler]: "¡Gracias por la respuesta!"
  • 22 de juniond 2024: Estado cambiado a "Fijo"
    • [Google VRP]: "Nuestros sistemas muestran que todos los errores que creamos basándonos en tu informe han sido solucionados por el equipo de producto. No dudes en comprobarlo y hacernos saber si todo parece correcto desde tu punto de vista. Gracias de nuevo por toda tu ayuda".
  • 25 de junio de 2024 - [Kat Traxler]: "Hola. Estoy descubriendo que este problema aún persiste. Los documentos y datos de entrenamiento pueden ser exportados usando los permisos del Agente del Servicio Central de Document AI, permitiendo a un usuario que no tiene acceso al almacenamiento la capacidad de exfiltrar datos. Tenga en cuenta que esta capacidad existe en los métodos: google.cloud.documentai.uiv1beta3.DocumentService.ExportDocuments y en las capacidades de procesamiento por lotes: (processors.batchProcess & processorVersions.batchProcess & processors.batchProcess) Avíseme si necesita más POC".
  • 26 de junio de 2024 - [Google VRP]: "¡Hola! Gracias por tu respuesta, hemos actualizado el error interno para el equipo que está trabajando en el problema."
  • 2 de julio de 2024 - [Kat Traxler]: "Hola. Dada la reciente 'falsa alarma' de que este problema estaba solucionado, empecé a preocuparme por no haber comunicado el riesgo y el impacto adecuadamente. Por lo tanto, he creado un despliegue de TF y he grabado un POC para que usted y el equipo de servicio lo vean. El despliegue TF se puede encontrar en: https://github.com/KatTraxler/document-ai-samples POC video at this drive link. El punto que necesita ser martillado a casa es el principal que puede procesar (o proceso por lotes) documentos con Document AI no necesita tener permisos de almacenamiento para acceder a los datos en el almacenamiento Cloud y mover a otra ubicación (exfiltración de datos) Esto se logra debido a los permisos asignados a la Document AI P4SA. (roles/documentaicore.serviceAgent). Recomiendo que a Document AI se le asigne una cuenta de servicio de gestión de usuarios para su procesamiento de datos, similar a Cloud Workflows. Permitir que el P4SA mueva datos definidos por el usuario no es el patrón correcto y ha dado lugar a una vulnerabilidad de exfiltración de datos. Cambie el estado de esta incidencia para indicar que no se ha solucionado. La divulgación pública se producirá en un evento de alto perfil en septiembre de 2024"
  • 4 de julio de 2024 - [Google VRP]: "Hola, gracias por facilitarnos más información sobre el caso; nos pondremos en contacto con el equipo de producto. Y gracias por avisarnos de la divulgación de su informe. Por favor, lee nuestra postura sobre la divulgación coordinada. En esencia, nuestro compromiso con usted es responder con prontitud y solucionar las vulnerabilidades en un plazo razonable y, a cambio, le pedimos que nos avise con una antelación razonable".
  • 29 de julio de 2024 - [Kat Traxler]: "Hola Equipo. Os vuelvo a avisar de que hablaré sobre el riesgo de filtración de datos a través del servicio DocumentAI en fwd:CloudsecEU el 17 de septiembre: https://pretalx.com/fwd-cloudsec-europe-2024/talk/BTT9LJ/ Con un blog adjunto que se publicará el día anterior, el 16 de septiembre. Gracias, Kat".
  • 30 de julio de 2024 - [Google VRP]: "Hola. ¡Muchas gracias por el aviso!"
  • 5 de agosto de 2024 - [Kat Traxler]: "Gracias. ¿Puedo sugerir que cambie el estado de este informe de "Arreglado"? Ya que no está arreglado, Gracias de nuevo. Kat"
  • 12 de agosto de 2024 - [Google VRP]: "Hola. ¿Sería posible compartir con nosotros un borrador de la presentación y/o entrada de blog antes de la divulgación? Gracias".
  • 12 de agosto de 2024: Comentario de Kat Traxler: "Estoy más que encantada. Estoy especialmente interesada en sus comentarios para la exactitud y la coordinación de aviso. Tendré lista la entrada del blog para el26 de agosto".
  • 13 de agosto de 2024 - [Google VRP]: "¡HOLA! ¡Gracias!"
  • 21 de agosto de 2024 - [Google VRP]: "Hola Kat, ¡Gracias de nuevo por tu informe y por tu paciencia! El equipo se acaba de sentar y ha discutido tu informe con mucho más detalle. Hemos decidido presentar un error al equipo de producto después de deliberar si se trataba de WAI o de una vulnerabilidad. Hicimos esto porque el comportamiento no está claro desde tu perspectiva, pero el equipo de producto está mejor posicionado para determinar si algo es WAI o no. De hecho, el bug interno se reabrió el 9 de julio basándonos en tu comentario y trabajaremos con el equipo de producto para tomar esta determinación. También reabriremos la incidencia 332943600 para reflejarlo ahora; esto debería haber ocurrido en julio, ¡lo sentimos! De nuevo, ¡gracias por contactar con nosotros y por tu informe!
    El equipo de Google Bug Hunter"
  • 22 de agosto de 2024 - [Kat Traxler]: "Gracias por la actualización y el cambio de estado. ¿Podría compartir sus definiciones de WAI y vulnerabilidad? Para mí, un problema puede funcionar según lo previsto (WAI) y tener un impacto negativo significativo en la seguridad. Gracias. Kat"
  • 9 de septiembre de 2024 - [Google VRP]: "El panel del Programa de recompensas por vulnerabilidades de Google ha decidido emitir una recompensa de 3133,70 dólares por su informe. ¡Enhorabuena! Justificación de esta decisión: Aplicaciones normales de Google. Vulnerability category is "bypass of significant security controls", other data/systems.We applied a downgrade because the attacker needs to have an access to an impacted victim's project."

 Investigación relacionada

 Para obtener más información sobre los agentes de servicio de GCP y sus modelos de amenazas, consulte la serie IAM 201 de GCP que trata estos temas:

 

 

 

Preguntas frecuentes