CVE-2025-43300: Corrupción de Memoria en Procesamiento de Imágenes DNG de iOS/macOS
Resumen
CVE-2025-43300 es una vulnerabilidad crítica de corrupción de memoria en el framework de procesamiento de imágenes de Apple que afecta a iOS 18.6.1 y sistemas macOS. La vulnerabilidad existe en el código de descompresión JPEG Lossless dentro de RawCamera.bundle, desencadenada por inconsistencias entre los metadatos TIFF y los parámetros del flujo JPEG en archivos DNG.
Detalles de la Vulnerabilidad
Causa Raíz
La vulnerabilidad se origina en una inconsistencia entre metadatos y flujo en archivos DNG (Digital Negative):
- Los metadatos SamplesPerPixel en los encabezados TIFF indican los componentes de color esperados
- El recuento de componentes SOF3 en los flujos JPEG Lossless especifica los componentes de datos reales
- Cuando estos valores difieren, la asignación y el procesamiento se desalinean
Flujo de Corrupción de Memoria
1. El analizador lee SamplesPerPixel de los metadatos TIFF (ej., 2 componentes)
2. El sistema asigna un búfer: ancho × alto × 2 componentes
3. El decodificador JPEG lee el recuento de componentes SOF3 (ej., 1 componente)
4. El decodificador escribe datos basándose en suposiciones inconsistentes
5. Se produce un desbordamiento de búfer cuando se escriben más datos de los asignados
Vector de Ataque
- Vulnerabilidad de cero clics: No se requiere interacción del usuario
- Procesamiento automático: Se desencadena al ver, importar o recibir archivos DNG
- Impacto multiplataforma: Afecta tanto a sistemas iOS como macOS
- Corrupción de memoria: Puede provocar fallos en la aplicación o posible ejecución de código
Resumen de Herramientas
Este repositorio contiene dos herramientas Python para analizar y reproducir CVE-2025-43300:
1. Analizador de Vulnerabilidad DNG (dng_vulnerability_analyzer.py)
Propósito: Analiza la estructura del archivo DNG para identificar condiciones de vulnerabilidad
Características principales:
- Analiza la estructura del archivo TIFF/DNG, incluyendo IFDs y SubIFDs
- Localiza etiquetas de metadatos SamplesPerPixel
- Identifica marcadores SOF3 JPEG Lossless y recuentos de componentes
- Detecta inconsistencias entre metadatos y flujo
- Informa desplazamientos de bytes exactos para su modificación
Uso:
python3 dng_vulnerability_analyzer.py <archivo.dng>
Salida:
- Análisis de la estructura del archivo
- Ubicaciones y valores de las etiquetas de metadatos
- Información de componentes del flujo JPEG
- Evaluación de vulnerabilidad
- Desplazamientos específicos para la creación de PoC
2. Modificador Hex Seguro (hex_modifier.py)
Propósito: Crea archivos de prueba de concepto modificando bytes específicos de forma segura
Características principales:
- Verifica los valores de bytes esperados antes de la modificación
- Crea hashes SHA256 para el seguimiento de archivos
- Genera informes de diferencias binarias
- Implementa comprobaciones de seguridad para evitar corrupción accidental
- Admite la creación manual y automatizada de PoC
Uso:
# Crear PoC usando desplazamientos vulnerables conocidos
python3 hex_modifier.py create-poc <entrada.dng>
# Modificación manual de bytes
python3 hex_modifier.py modify <entrada.dng> <desplazamiento> <byte_viejo> <byte_nuevo> <salida.dng>
# Generar informe de diferencias
python3 hex_modifier.py diff <original.dng> <modificado.dng>
Proceso de Creación de PoC
Paso 1: Analizar el Archivo Objetivo
python3 dng_vulnerability_analyzer.py IMGP0847.DNG
Esto identifica:
- Ubicación de los metadatos SamplesPerPixel
- Ubicaciones del recuento de componentes SOF3 JPEG
- Valores actuales y modificaciones sugeridas
Paso 2: Crear la Muestra Vulnerable
El PoC requiere dos modificaciones de bytes específicas:
- Aumentar los metadatos SamplesPerPixel (típicamente de 1 a 2)
- Disminuir el recuento de componentes SOF3 (típicamente de 2 a 1)
python3 hex_modifier.py create-poc IMGP0847.DNG
Paso 3: Verificar el PoC
python3 dng_vulnerability_analyzer.py vuln_poc_IMGP0847.dng
Confirma que existe la inconsistencia y que la vulnerabilidad se desencadena.
Por qué Funciona el PoC
Mecanismo Técnico
-
Fase de Asignación:
- El analizador de imágenes lee SamplesPerPixel = 2
- Asigna un búfer para datos de píxeles equivalentes a 2 componentes
- Tamaño del búfer = ancho_de_imagen × alto_de_imagen × 2
-
Fase de Procesamiento:
- El decodificador JPEG Lossless encuentra SOF3 con 1 componente
- La lógica de análisis se confunde sobre el tamaño real vs. esperado de los datos
- Intenta escribir datos basándose en suposiciones inconsistentes
-
Corrupción de Memoria:
- Se escriben más datos en el búfer de los que se asignaron originalmente
- El desbordamiento del búfer corrompe regiones de memoria adyacentes
- Resulta en un fallo de la aplicación o posible ejecución de código
Los archivos DNG utilizan el formato contenedor TIFF con flujos JPEG Lossless incrustados:
- Metadatos TIFF describen las propiedades de la imagen e información de color
- Flujos JPEG contienen datos de píxeles comprimidos
- Relación de confianza existe entre los metadatos y el contenido del flujo
- Brecha de validación permite que valores inconsistentes lleguen al código de procesamiento
Evaluación del Impacto
Gravedad: Crítica
- Puntuación CVSS: Alta (cero clics, corrupción de memoria, amplio impacto)
- Sistemas afectados: iOS 18.6.1, sistemas macOS con procesamiento de imágenes similar
- Vector de ataque: Transferencia de archivos por red/local
- Interacción del usuario: Ninguna requerida
- Alcance: Todos los dispositivos que procesan archivos DNG
Escenarios del Mundo Real
- Archivos adjuntos de correo electrónico con archivos DNG
- Transferencias AirDrop
- Sincronización de fotos en la nube
- Descargas web de muestras de fotógrafos
- Compartición de medios en aplicaciones de mensajería
Mitigación y Parches
Respuesta del Vendedor
- Corregido en iOS 18.6.2: Apple implementó una validación adecuada de metadatos
- Actualizaciones de macOS: Se aplicaron correcciones similares al procesamiento de imágenes en macOS
- Causa raíz: Se agregaron comprobaciones de coherencia entre los metadatos y los parámetros del flujo
Mitigaciones Recomendadas
- Actualizar sistemas: Instalar iOS 18.6.2 o posterior
- Validación de entrada: Verificar la coherencia de los metadatos en analizadores personalizados
- Comprobación de límites: Implementar una validación estricta del tamaño del búfer
- Fuzzing: Pruebas periódicas de los analizadores de formato de archivo
Estructura del Archivo y Detalles Técnicos
Estructura TIFF/DNG
Encabezado TIFF → Cadena IFD → SubIFDs → Datos de Imagen
├── Etiquetas de Metadatos (SamplesPerPixel, Compression, etc.)
├── Flujos JPEG Lossless (marcadores SOF3)
└── Datos de Píxeles (comprimidos)
Ubicaciones Clave de la Vulnerabilidad
- Etiqueta SamplesPerPixel: Etiqueta TIFF 0x0115 en estructuras IFD
- Marcadores SOF3: Inicio de trama JPEG Lossless (0xFFC3)
- Recuento de Componentes: Desplazamiento de bytes +9 desde el marcador SOF3
- Desajuste Crítico: Cuando el valor de la etiqueta ≠ recuento de componentes
Directrices de Pruebas
Entorno de Pruebas Seguro
- Usar sistemas aislados: MV o dispositivos de prueba dedicados
- Crear instantáneas: Antes de probar archivos PoC
- Monitorear fallos: Revisar registros del sistema e informes de fallos
- Aislamiento de red: Evitar la compartición no intencionada de archivos
Comportamiento Esperado
- Sistemas vulnerables: Fallo de la aplicación, errores de corrupción de memoria
- Sistemas parcheados: Manejo de errores adecuado o procesamiento correcto
- Indicadores en registros: Violaciones de acceso a memoria, fallos de segmentación
Referencias Técnicas
- Especificación TIFF 6.0: Estructura de etiquetas y formato IFD
- Especificación DNG: Formato Adobe Digital Negative
- Estándar JPEG: Compresión sin pérdida (ITU-T T.87)
Investigación en Seguridad
- Técnicas de corrupción de memoria: Fundamentos de desbordamiento de búfer
- Fuzzing de formatos de archivo: Descubrimiento automatizado de vulnerabilidades
- Seguridad de analizadores: Mejores prácticas de validación de entrada
Aviso Legal: Esta investigación se proporciona únicamente con fines educativos y de seguridad defensiva. Los usuarios son responsables del cumplimiento de las leyes aplicables y las directrices éticas.
NOTA
El fallo tarda entre 1 y 3 minutos en desencadenarse. Diviértete.
Y para el PoC, puedes ejecutar open vuln_file.dng para ejecutar el archivo o simplemente previsualizarlo y se ejecutará.