Última actualización: 28 sept, 2026

XLSX vs. XLSM Security: How Spreadsheet Macros Expose Your Network

Seguridad de Archivos de Excel Explicada: XLSX, XLSM y Riesgos de Macros

Durante décadas, Microsoft Excel ha sido el motor universal de las operaciones empresariales. Equilibra los presupuestos corporativos, visualiza conjuntos de datos complejos, rastrea inventarios y potencia las canalizaciones analíticas en prácticamente todas las industrias.

Sin embargo, esa misma flexibilidad computacional convierte a las hojas de cálculo en una favorita perdurable entre los adversarios cibernéticos. Los atacantes han armado hojas de cálculo como armas desde los primeros días de los virus de macros a finales de la década de 1990. Mientras Microsoft y los administradores de sistemas han introducido múltiples capas de defensa —como la segregación de formatos de archivo y el bloqueo predeterminado de macros— la ingeniería social y los riesgos arquitectónicos sutiles continúan manteniendo relevantes los ataques centrados en Excel.

Para construir una postura de seguridad resiliente, los desarrolladores, administradores y usuarios avanzados deben mirar más allá de la interfaz del libro de trabajo. Comprender cómo funciona el formato OpenXML subyacente, cómo .xlsx y .xlsm difieren a nivel arquitectónico, y cómo funcionan los mecanismos de ejecución de macros es vital para defender los endpoints modernos.

1. Anatomía de los Archivos Excel Modernos: OpenXML Desconstruido

Antes del lanzamiento de Microsoft Office 2007, Excel guardaba los archivos principalmente usando formatos binarios propietarios, siendo el más notable el formato .xls (regido por el Binary Interchange File Format, o BIFF8). En los archivos .xls, los registros de datos, definiciones de formato, fórmulas y flujos de macros de Visual Basic for Applications (VBA) se empaquetaban en un único contenedor de almacenamiento estructurado. Esto dificultaba la inspección programática y permitía a los atacantes ocultar scripts de carga maliciosa dentro de sectores binarios opacos.

A partir de Excel 2007, Microsoft introdujo el estándar Office Open XML (OOXML) (estandarizado como ECMA-376 e ISO/IEC 29500). Bajo OOXML, los libros de trabajo de Excel ya no son bloques binarios monolíticos. En su lugar, son archivos zip que contienen una estructura jerárquica de documentos XML, tablas de relaciones y recursos multimedia incrustados.

Dentro del contenedor ZIP

Si tomas cualquier libro de Excel moderno estándar y cambias su extensión a .zip, puedes extraer su contenido con cualquier utilidad de descompresión estándar:

my_workbook.xlsx (extracted)
│
├── [Content_Types].xml        <-- Registry of MIME types and structural parts
├── _rels/                     <-- Package-level relationship mappings
│   └── .rels
├── docProps/                  <-- Metadata (author, creation date, revision)
│   ├── app.xml
│   └── core.xml
└── xl/                        <-- Core spreadsheet contents
    ├── workbook.xml           <-- Workbook-level parameters and sheet list
    ├── styles.xml             <-- Cell styles, fonts, and borders
    ├── sharedStrings.xml      <-- Unique string index for performance optimization
    ├── _rels/
    │   └── workbook.xml.rels  <-- Sheet and component dependencies
    └── worksheets/
        ├── sheet1.xml         <-- Raw cell values, formulas, and grid geometry
        └── sheet2.xml

Este cambio estructural proporcionó beneficios de seguridad inmediatos:

  1. DPI (Inspección Profunda de Paquetes) & Visibilidad de Puerta de Enlace: Los dispositivos de seguridad, proxies y agentes de punto final pueden desempaquetar el archivo al vuelo y analizar árboles XML en texto plano para identificar cadenas sospechosas, URL externas o objetos incrustados.
  2. Validación Determinista de Archivos: Si un archivo afirma ser un documento OpenXML pero viola las restricciones del esquema, Excel se niega a abrirlo o lo ejecuta en modo de recuperación aislado.
  3. Separación de Formato: Microsoft desacopló las hojas de cálculo computacionales regulares de los archivos capaces de ejecutar scripts procedimentales incrustados.

2. XLSX vs. XLSM: El límite arquitectónico

La principal diferencia entre .xlsx y .xlsm radica en si la estructura del archivo permite la inclusión de proyectos de macros ejecutables.

Característica / Dimensión.xlsx (Hoja de Cálculo Excel OpenXML).xlsm (Hoja de cálculo con macros de Excel)
Tipo de contenido MIMEapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheetapplication/vnd.ms-excel.sheet.macroEnabled.12
Contenedor de almacenamiento VBAProhibido estrictamente. No se puede almacenar vbaProject.binPermitido. Contiene xl/vbaProject.bin
Riesgo de ejecución nativaNegligible para la ejecución de macros; limitado a la inyección de fórmulas/DDEAlto; puede ejecutar código VBA automatizado al interactuar con el libro de trabajo
Esquema Estricto OpenXMLCumple con definiciones XML estrictas y sin macrosIncluye definiciones para extensiones de automatización heredadas y modernas
Indicador Visual del UsuarioIcono estándar de hoja de cálculo verdeIcono de hoja de cálculo con una marca de exclamación

El mecanismo de aplicación: Por qué XLSX no puede ejecutar macros

Una pregunta común entre administradores y desarrolladores junior es: ¿Qué ocurre si un atacante toma un archivo .xlsm malicioso, inyecta código ejecutable y cambia la extensión del archivo a .xlsx?

Respuesta corta: El archivo no ejecutará la macro.

Excel no depende exclusivamente de la extensión del archivo para determinar las reglas de ejecución. Al abrir un archivo llamado .xlsx:

  1. Excel inspecciona la carga zip y hace referencia a [Content_Types].xml.
  2. En un archivo .xlsx genuino, todos los tipos de contenido definidos representan elementos de datos estándar (como worksheet, sharedStrings o styles).
  3. Si un atacante inyecta manualmente un flujo VBA compilado (xl/vbaProject.bin) en un paquete .xlsx y actualiza las relaciones, Excel encuentra una contradicción explícita del esquema:
    • Ve una extensión .xlsx vinculada a tipos de contenido que indican capacidad de macro.
    • Excel lanza un error fatal de integridad: “Excel no puede abrir el archivo ‘filename.xlsx’ porque el formato del archivo o la extensión no son válidos. Verifique que el archivo no esté dañado…”
  4. Si el atacante deja los tipos internos intactos sin registrar el binario, Excel trata vbaProject.bin como un adjunto no referenciado y huérfano dentro del archivo zip y lo descarta completamente durante el ciclo de carga.

En consecuencia, un archivo que funciona estrictamente como un contenedor .xlsx genuino no puede ejecutar código VBA nativo. Sin embargo, eso no significa que los archivos .xlsx estén libres de todos los vectores de ataque, como se explora más adelante en esta guía.

3. Riesgos de macros y el ciclo de vida del ataque

Las macros fueron diseñadas para automatizar tareas repetitivas de contabilidad, modelado financiero y manipulación de datos mediante Visual Basic for Applications (VBA). Debido a que VBA se creó para la automatización en el lugar de trabajo, se le otorgó un amplio acceso al sistema operativo Windows subyacente a través del Component Object Model (COM), Windows Script Host (WSH) y llamadas directas a la API Win32.

Cuando una macro no confiable se ejecuta, funciona con los exactamente los mismos privilegios que el usuario conectado. No está atrapada dentro de un sandbox de navegador virtualizado al estilo JavaScript.

+--------------------------------------------------------------------------------+
|                             ATTACK LIFECYCLE                                   |
+--------------------------------------------------------------------------------+
                                       │
                                       ▼
  [ Delivery & Evasion ]  ──────► Spear-phishing email with .xlsm, .xlam, or .zip.
                                       │
                                       ▼
  [ Social Engineering ]  ──────► Lures victim to bypass Protected View ("Enable Content").
                                       │
                                       ▼
  [ Auto-Execution ]      ──────► Auto_Open() or Workbook_Open() triggers automatically.
                                       │
                                       ▼
  [ System Invocation ]   ──────► VBA creates COM objects (WScript.Shell, WinHttp.WinHttpRequest).
                                       │
                                       ▼
  [ Payload Retrieval ]   ──────► Spawns hidden PowerShell/cURL to fetch staging binary.
                                       │
                                       ▼
  [ Post-Exploitation ]   ──────► In-memory execution, credential theft, lateral movement.

Técnicas comunes de ingreso de macros

  1. Ganchos de autoejecución: Los atacantes colocan su punto de entrada dentro de manejadores de eventos intrínsecos como Sub Auto_Open() o Private Sub Workbook_Open(). Tan pronto como el usuario concede permisos de ejecución, estas rutinas se activan sin requerir ningún clic dentro de la hoja de cálculo.

  2. Ofuscación y Stomping:

    • Ofuscación de Cadenas: Las cargas útiles ocultan URLs y llamadas al sistema usando arreglos de caracteres, codificación XOR, decodificación Base64 o concatenación de variables de entorno (p. ej., Chr(112) & Chr(111) & Chr(119)...).
    • VBA Stomping: VBA existe en dos formas dentro de vbaProject.bin: código fuente interpretado y p-code compilado (pseudocódigo dirigido a la versión específica de Office que lo compiló). Los atacantes pueden eliminar por completo el código fuente en texto claro, dejando solo el p-code compilado. Muchas soluciones antivirus básicas y analizadores estáticos inspeccionan solo el flujo de código fuente, dejando el p-code sin detectar hasta que es ejecutado por una versión de Office compatible.
  3. Aprovechamiento de recursos del sistema (LotL): Las macros maliciosas modernas rara vez dejan caer un archivo .exe directamente en el disco, lo que alertaría inmediatamente a los agentes de Detección y Respuesta de Endpoint (EDR). En su lugar, interactúan con herramientas del sistema integradas:

    • Instanciando WScript.Shell para ejecutar argumentos de línea de comandos.
    • Invocando PowerShell.exe con una política de ejecución que se omite (-ExecutionPolicy Bypass -WindowStyle Hidden).
    • Llamando a APIs nativas de Win32 mediante Declare PtrSafe Function CreateProcess o VirtualAlloc para inyectar shellcode directamente en la memoria del sistema.

4. Otros vectores de amenaza en hojas de cálculo (más allá de VBA estándar)

Asegurar un entorno contra archivos .xlsm es solo la mitad de la batalla. Los adversarios también utilizan mecanismos que operan independientemente del VBA tradicional.

Intercambio dinámico de datos (DDE) e inyección de CSV

Excel incluye un protocolo heredado llamado Intercambio Dinámico de Datos (DDE), diseñado para permitir el intercambio de datos entre aplicaciones en ejecución (por ejemplo, transmitir datos en tiempo real de un ticker de acciones desde un programa separado a una celda de Excel).

  • Cómo funciona la inyección de fórmulas: Cuando una celda de hoja de cálculo comienza con caracteres como =, @, + o -, Excel interpreta el contenido como una fórmula. Si un atacante controla la entrada exportada a una hoja de cálculo (como un campo de “Comments” no sanitizado en una aplicación web exportado a CSV o XLSX), pueden inyectar:
    =cmd|'/C powershell.exe -w hidden -enc <base64_payload>'!A0
    
  • Al abrirse, Excel evalúa la fórmula, alerta al usuario con un mensaje sobre iniciar una aplicación externa y, si se aprueba, ejecuta la shell del sistema.

Macros heredados de Excel 4.0 (XLM)

Antes de que se introdujera VBA en 1993, Excel utilizaba un sistema de macros basado en fórmulas conocido como Excel 4.0 (XLM) macros. Estas macros residen dentro de hojas de macro dedicadas en lugar de un proyecto VBA separado.

Debido a que las macros XLM se escriben como fórmulas de celda (como =EXEC("calc.exe")), eluden muchos motores de inspección estática estándar de VBA. Los atacantes favorecieron las macros XLM a finales de la década de 2010 y principios de la de 2020 para evadir la detección automatizada antes de que Microsoft las desactivara por defecto en las versiones empresariales modernas.

Conexiones externas maliciosas y objetos OLE

Un libro de trabajo .xlsx ordinario aún puede introducir riesgos a través de recursos externos:

  • Paquetes OLE incrustados: Un atacante puede insertar un ejecutable disfrazado como un ícono PDF incrustado directamente en la hoja de cálculo.
  • Enlaces a libros de trabajo externos y consultas web: Un XLSX puede contener referencias externas que inician automáticamente solicitudes HTTP GET a servidores de comando y control (C2) controlados por el atacante al abrir el archivo, usadas principalmente para reconocimiento o ataques de recolección de hashes netNTLM.

5. Fortalecimiento empresarial y estrategias de defensa en profundidad

Defenderse contra amenazas originadas en Excel requiere un enfoque en capas que cubra la inspección de red, la configuración del sistema, los controles de acceso y los procesos operativos.

+─────────────────────────────────────────────────────────+
|                  ENTERPRISE DEFENSE LAYERS               |
+─────────────────────────────────────────────────────────+
|  PERIMETER: Drop inbound .xlsm, .xla, and .xltm at mail |
|  gateway unless cryptographically signed or exempted.   |
+---------------------------------------------------------+
|  IDENTITY & POLICY: Enforce ASR rules and apply         |
|  Mark of the Web (MotW) macro execution blocks.         |
+---------------------------------------------------------+
|  RUNTIME: Hook AMSI into Office to evaluate dynamic     |
|  VBA buffers directly before execution.                 |
+---------------------------------------------------------+
|  STORAGE: Restrict macro execution exclusively to       |
|  managed, centralized Trusted Locations.                |
+─────────────────────────────────────────────────────────+

1. Aplicar el marcado de la web (MotW) para bloquear macros

En 2022, Microsoft actualizó el comportamiento predeterminado de las aplicaciones de Office: los macros en archivos que provienen de internet están bloqueados por defecto.

Cuando un usuario descarga un archivo mediante un navegador o cliente externo, Windows etiqueta el archivo con un flujo de datos alternativo (ADS) llamado Zone.Identifier (la zona 3 indica Internet). Para los archivos que llevan esta marca, Excel desactiva los macros por completo y muestra una pancarta de seguridad roja: > “RIESGO DE SEGURIDAD: Microsoft ha bloqueado la ejecución de macros porque la fuente de este archivo no es confiable.”

Acción Administrativa: Asegúrese de que este comportamiento se aplique mediante la Directiva de Grupo y no pueda ser anulado por los usuarios finales:

  • Ruta GPO: User Configuration > Administrative Templates > Microsoft Excel 2016 > Excel Options > Security > Trust Center
  • Configuración: Habilitar “Bloquear la ejecución de macros en archivos de Office provenientes de Internet”.

2. Configurar reglas de reducción de superficie de ataque (ASR)

Las organizaciones que utilizan Microsoft Defender for Endpoint deben activar las reglas principales de Reducción de la Superficie de Ataque diseñadas específicamente para aplicaciones de Office:

  • Block Office applications from creating child processes (GUID: D4F940AB-401B-4EFC-AADC-AD5F3C50688A)
    • Impide que Excel inicie PowerShell, CMD o motores de scripting.
  • Bloquear aplicaciones de Office de inyectar código en otros procesos (GUID: 75668C1F-73B5-4CF0-BB93-3ECF5CB7CC84)
  • Bloquear llamadas a la API Win32 desde macros de Office (GUID: 92E6390C-CF9E-43CE-BD8C-0E6F0FE66680)

3. Aprovechar la Interfaz de escaneo antimalware (AMSI)

Las versiones modernas de Microsoft 365 integran la ejecución de VBA directamente con AMSI. Incluso si un atacante aplica una ofuscación compleja de cadenas o manipulación de VBA, el motor de tiempo de ejecución de VBA pasa los comandos reconstruidos y sin cifrar a su motor antivirus/EDR instalado en el milisegundo exacto antes de la ejecución. Asegúrese de que su protección de punto final monitoree activamente los eventos de tiempo de ejecución de AMSI.

4. Pasar a ubicaciones de confianza y certificados digitales

Para organizaciones que dependen de hojas de cálculo automatizadas para las operaciones diarias:

  • Elimine archivos XLSM sueltos en las carpetas Descargas o escritorio de los usuarios.
  • Utilice Ubicaciones de Confianza: Restrinja la ejecución de macros exclusivamente a recursos compartidos de red de solo lectura gestionados por los administradores de TI.
  • Firma de Código: Exija que todas las macros desarrolladas internamente estén firmadas criptográficamente usando un certificado emitido por una Infraestructura de Clave Pública (PKI) empresarial. Configure Excel para ejecutar solo macros firmadas digitalmente y bloquee silenciosamente las no firmadas.

6. Perspectiva del desarrollador: crear automatización segura

Si está desarrollando software que analiza, genera o consume archivos Excel (p. ej., canalizaciones de Python que usan pandas/openpyxl, microservicios Node.js o aplicaciones C#/.NET), aplique estas salvaguardas de desarrollo:

  1. Rechazar formatos de archivo inesperados en el límite de carga: Si su aplicación espera informes financieros, valide estrictamente que los archivos entrantes cumplan con .xlsx. Inspeccione los bytes mágicos internos (el encabezado zip estándar 50 4B 03 04) y verifique que no existan entradas vbaProject.bin dentro del índice del archivo antes de guardarlos en cubos de la nube o almacenes de bases de datos.

  2. Sanitizar datos contra inyección de fórmulas: Al exportar entradas generadas por el usuario a archivos CSV o XLSX, anteponga una comilla simple (') o un espacio a cualquier celda que comience con caracteres peligrosos (=, +, -, @, \t, \r):

    def sanitize_for_spreadsheet(value: str) -> str:
        if value and value[0] in ('=', '+', '-', '@', '\t', '\r'):
            return f"'{value}"
        return value
    
  3. Migrar de VBA a Office Scripts o complementos web: Para la automatización empresarial moderna, elimine por completo el VBA heredado:

    • Office Scripts: Escritos en TypeScript, los Office Scripts se ejecutan dentro de un entorno en la nube aislado y funcionan sin problemas en las versiones web y de escritorio sin exponer llamadas al sistema operativo nativas.
    • Complementos web de Office: Construidos usando HTML, CSS estándar y JavaScript moderno, los complementos web se comunican a través de APIs de JavaScript gestionadas y están aislados del sistema operativo local.

7. Lista de verificación resumida para la seguridad de hojas de cálculo

  • Aplicar .xlsx por defecto: Requerir que todos los flujos de trabajo estándar de los usuarios guarden como .xlsx sin macros.
  • Bloquear macros de origen Internet: Confirmar que la aplicación de la política MotW está desplegada en toda su organización mediante GPO o Intune.
  • Habilitar reglas ASR: Prohibir que los productos de Office inicien intérpretes de comandos o procesos secundarios.
  • Depreciar Excel 4.0 (XLM): Asegurarse de que los motores de macros XLM heredados estén deshabilitados permanentemente en todas las estaciones de trabajo.
  • Sanitizar exportaciones de la aplicación: Proteger las rutinas de generación de CSV y Excel contra inyección de CSV/fórmulas.
  • Cambiar hacia Office Scripts: Migrar los macros administrativos heredados a Office Scripts impulsados por TypeScript y APIs gestionadas.

Al tratar las hojas de cálculo no solo como archivos de documento, sino como contenedores de software estructurados que poseen capacidades de ejecución, los equipos de seguridad y los desarrolladores pueden neutralizar eficazmente uno de los vectores de ataque más antiguos en la informática empresarial.

Preguntas frecuentes (FAQ)

P1: ¿Puede un archivo que termina en .xlsx ejecutar una macro maliciosa?

No, el estándar OpenXML prohíbe estrictamente el código de macros en archivos .xlsx, y Excel rechazará o eliminará cualquier proyecto VBA inyectado en un contenedor .xlsx genuino.

P2: ¿Qué debo hacer si un archivo de Excel me pide “Habilitar edición” o “Habilitar contenido”?

Solo conceda permisos si conoce al remitente y estaba esperando el archivo; este aviso es el punto de control principal que permite que macros no confiables ejecuten código.

P3: ¿Cómo determina Microsoft Excel si un archivo proviene de Internet?

Windows adjunta un flujo oculto “Mark of the Web” (Zone.Identifier) a los archivos descargados, lo que indica a Excel que los abra en Vista protegida y bloquee las macros de forma predeterminada.

P4: ¿Son los archivos CSV más seguros que los archivos XLSX y XLSM?

Los archivos CSV no pueden contener macros VBA nativas, pero siguen siendo vulnerables a ataques de inyección de fórmulas si contienen comandos maliciosos que Excel ejecuta al abrirlos.

P5: ¿En qué se diferencian los Office Scripts modernos de las macros VBA tradicionales?

Office Scripts se ejecutan en TypeScript dentro de un entorno de tiempo de ejecución aislado, lo que impide que accedan a su sistema de archivos local, línea de comandos o API del sistema operativo.

Ver también