Aplicativo de prova de conceito para sobrescrever fontes no iOS usando CVE-2022-46689.
Funciona no iOS 16.1.2 e inferiores (testado no iOS 16.1) em dispositivos sem jailbreak.
IPA disponível na seção Releases.
Fontes incluídas:
- DejaVu Sans Condensed
- DejaVu Serif
- DejaVu Sans Mono
- Go Regular
- Go Mono
- Fira Sans
- Segoe UI
- Comic Sans MS
- Choco Cooky
Você também pode importar fontes personalizadas que foram portadas para o iOS.
Screenshots
DejaVu Sans Condensed | DejaVu Serif | DejaVu Sans Mono | Choco Cooky

Go Regular | Go Mono | Segoe UI | Comic Sans MS

Hanna Soft + JoyPixels | Bronkoh | Noto Serif SC | Fira Sans

Crédito da captura de tela: @ev_ynw pelas fontes portadas Hanna Soft e Bronkoh, JoyPixels pela fonte de emoji
Onde encontrar fontes portadas
Problemas conhecidos
- As fontes integradas não estão devidamente portadas (não sei como portar fontes). Para melhores resultados, use uma fonte personalizada.
- com as fontes integradas:
- Apenas o texto regular usa a fonte alterada: texto fino/médio/negrito usa Helvetica como fallback.
- Se a fonte não aparecer, desative "Texto em Negrito" nas configurações de acessibilidade.
- Os seletores de arquivos em aplicativos falharão ao abrir com o erro "Algo deu errado ao exibir documentos."
- Isso acontece se você substituir a fonte de emoji ou instalar fontes com vários pesos
- Tente a correção experimental .ttc usando "Importar personalizada com correção para .ttc"
- Dispositivos iOS 14.x que estão com jailbreak ou já tiveram jailbreak não conseguirão reverter para a fonte original.
- Solução alternativa: não use este aplicativo se estiver no iOS 14.x e já tiver feito jailbreak. Em vez disso, faça o jailbreak e substitua as fontes normalmente.
Conversão de fontes
O problema CVE-2022-46689 - pelo que sei - permite sobrescrever apenas 16383 bytes de cada 16384 bytes: o último byte da página não pode ser gravado.
(Posso estar errado)
Para contornar isso, empacoto a fonte usando o formato webfont WOFF2, que é suportado no iOS. O WOFF2 usa Brotli para compressão, o que me permite inserir preenchimento para pular o último byte.
Veja repackfonts/make_woff2src.sh para detalhes: este script:
- renomeia a fonte para .SFUI-Regular com TTX seguindo esta resposta
- reconstrói a fonte para .woff2
- executa
repackfonts/BrotliPadding.swift para descomprimir o arquivo WOFF2 e inserir preenchimento para pular o 16384º byte
Créditos
- Ian Beer do Project Zero por encontrar o CVE-2022-46689.
- Apple pelo caso de teste e patch. (Não alterei nada: apenas encapsulei o caso de teste em uma biblioteca.)
- Todos no Twitter que ajudaram e experimentaram com o CVE-2022-46689, especialmente @dedbeddedbed, @AppleDry05, e @haxi0sm por explorar o que pode ser feito com esta vulnerabilidade..
- Compressor WOFF2 pelo Google
- ttcpad por LIJI32
- Fontforge stripttc
- As fontes DejaVu são distribuídas de acordo com sua licença.
- As fontes Go são distribuídas de acordo com sua licença.
- A fonte Fira Sans foi convertida por @jonpalmisc - obrigado!
- Segoe UI e Comic Sans MS são propriedade da Microsoft.
- Choco Cooky é propriedade da Samsung.
- Não tenho nenhum direito de redistribuí-las, mas estou postando mesmo assim porque #yolo.