| Título completo | Amplicação Estruturada de Texto (STA) — Estudo Arquitetônico e Técnico da Amplificação de Recursos Impulsionados por Texto na Ecossistema Android |
| Versão | Unificada Completa — Julho 2026 (merge STA Estudo Arquitetônico v6.0 + Relatório Técnico de Gaps de Resiliência) |
| Pesquisador | Manuel García Peña (Lostmon) |
| Vetores | 32 documentados (IPC/SavedState Classe A + UI-thread/libminikin Classe B) |
| Empresas notificadas | Google · Meta · Microsoft · Mozilla · Opera · DuckDuckGo · Brave · Tor Project · Xiaomi · INCIBE (CNA Espanha) |
| Affetados também | Samsung (Série STA-023 — documentada) |
| Divulgação pública | 30 de julho de 2026 — lostmon.blogspot.com |
CLASSE A — Amplificação do Estado IPC: ausência de fallback seguro em FragmentManager.restoreAllState() e serviços do sistema quando o SavedState serializado excede o limite Binder. Resultado: loops de crash persistentes.
CLASSE B — Amplificação da Superfície de Interacão: ausência de limites defensivos na processamento síncrono de URL/texto no motor de layout de texto do Android (libminikin.so). Resultado: ANR reproduzível em todo o ecossistema.
Estrutura arquitetônica: ambas as classes são manifestações concretas do mesmo padrão mais elevado — Amplicação Estruturada de Texto (STA).
Resumo Executivo
Este whitepaper documenta a Amplicação Estruturada de Texto (STA), um padrão arquitetônico no qual entrada textual estruturada válida (URLs, links profundos, rascunhos, extras Intent) se propaga através das camadas do framework Android e amplifica progressivamente o custo computacional ou tamanho do estado até que os limites de estabilidade sejam excedidos.
Cinco descobertas-chave:
- Uma correção interna para partes da causa raiz Classe A existe, mas não é pública. O LargePayloadSupport do Google (AOSP CL 3989977) e androidx.savedstate 1.5.0 abordam parte da causa raiz Classe A; o Boletim de Segurança Android de julho de 2026 contém nenhuma correção pública para qualquer vetor STA.
- 32 vetores reproduzíveis entre a Classe A (loops de crash IPC/SavedState) e Classe B (ANR libminikin), confirmados em dispositivos de produção executando Android 13–16.
- Validação independente do fornecedor. Xiaomi reproduziu, confirmou e recompensou um vetor HyperOS persistente (STA-015b). INCIBE (CNA Espanha) revisou os relatórios técnicos e encaminhou o caso para MITRE (CNA Top-Level Root para o ecossistema Google) para atribuição de CVE.
- Maior impacto: STA-015-DL (CVSS 8.6). Um único clique em um link HTML do Google Drive pode se escalar a um loop de crash SystemUI que requer reinicialização dura. Escopo alterado (navegador é veículo de entrega; SystemUI é o alvo).
- Entre motores e fornecedores. O mesmo caminho de bloqueio libminikin aparece no Chromium e Gecko; o mesmo padrão de persistência aparece em WhatsApp, Threads, Firefox, Opera, DuckDuckGo, Edge Ask Copilot e serviços do sistema básico.
Recomendação primária: Limite de comprimento rígido no libminikin e degradação segura (try/catch + descarte) nas rotas de restauração FragmentManager / TaskPersister / SystemUI. Limites de URL e tamanho do rascunho aplicativos são necessários, mas insuficientes como defesa em profundidade.
Modelo de Ameaça
| Classe A — IPC / SavedState | Classe B — libminikin / thread UI | |
|---|---|---|
| Autor da Ameaça | Direta (link manipulado, HTML do Google Drive, deep link) ou local (colar texto grande) | Direta (URL/link manipulado) ou local (long-press, foco na barra de endereço) |
| Vítima | Usuários do Android 13–16 dos aplicativos WhatsApp, Threads, navegadores e SystemUI, bem como peles OEM | A qualquer aplicativo renderizando texto longo estruturado via TextView / Compose / menu de contexto |
| Pré-requisitos | Um clique ou colar; sem privilégios especiais necessários | Um clique, long-press ou evento de foco; sem privilégios especiais necessários |
| Objetivo | Dos persistente (loop de crash até limpar os dados / reiniciar) | Dos transitório (ANR 5–16 s); pode se tornar persistente se combinado com histórico/TaskPersister |
| Escopo do impacto | Apenas um aplicativo → compartilhada inbox → SystemUI (interface de usuário do dispositivo) | Thread UI do navegador / aplicativo; pode se propagar para SystemUI em alguns OEMs |
Suposições: O atacante pode entregar uma carga estruturada sintaticamente válida, mas grande demais. Não é necessário corrupção de memória ou execução de código. A ameaça depende exclusivamente da falta de limites defensivos e caminhos seguros de degradação.
Metodologia de Teste
A pesquisa foi realizada em seis dispositivos físicos de produção, executando firmware stock ou OEM (nenhum ROM personalizado, nenhum root necessário para a evidência primária). A validação cruzada-OEM usou dispositivos compartilhados pela comunidade de pesquisa independente (Xiaomi, Samsung, OPPO, OnePlus, Pixel).
- Google Pixel 7 (Android 13–15 stock AOSP)
- Xiaomi Redmi Note 14 5G (HyperOS 3.0 / Android 16) — principal dispositivo de evidência em campo
- OPPO A78, OnePlus 11, Lenovo Tablet e dispositivos adicionais cobrindo o Android 9–16
Uma parte substancial da análise do caminho do framework foi realizada lendo fontes públicas de AOSP em um navegador telefônico (nenhum laboratório tradicional multi-monitor). Bugreports e rastros ANR foram capturados no dispositivo quando disponíveis. O Google VRP recompensou a pesquisa na área Binder/IPC ($250); a Xiaomi confirmou e recompensou independentemente um vetor do HyperOS ($300 via HackerOne).
Ferramentas e artefatos:
Bugreport/ ZIPs de bugreport completo (DROPBOX SYSTEM APP CRASHES, rastros ANR, tumbstones)- ID de relatório
chrome://crashes(enviado para a infraestrutura do Google) - Desenrolamento nativo da pilha a partir dos rastros ANR (libminikin.so BuildId confirmado)
- Análise das fontes de AOSP para FragmentManager, TaskPersister, LineBreakOptimizer
Generalizações para “todos os OEMs do Android” ou “todas as versões” são inferências a partir desta amostra, não uma enumeração exaustiva. O comportamento pode variar com patches OEM, memória disponível e nível de boletim de segurança. iOS foi usado como controle negativo (mesmas cargas não reproduzem os falhas específicas do Android).
Contexto da Pesquisa
Este trabalho é pesquisa independente de segurança realizada aproximadamente durante quatro anos (observações a partir de 2022; estruturação formal STA e evidência expandida até julho de 2026). Não foi realizado em um ambiente laboratorial tradicional multi-monitor.
Condições primárias:
- Pesquisador principal: Manuel García Peña (Lostmon), pesquisador independente; presidente da BojosXtu (associação de apoio à saúde mental).
- Aparelho primário: Xiaomi Redmi Note 14 5G (HyperOS 3.0 / Android 16) — relatórios de falhas, estatísticas de crash do SystemUI e pilhas nativas ANR foram capturados neste aparelho durante uso normal e reprodução controlada.
- Configuração da análise: Uma grande parte da reconstrução de caminhos AOSP (TextView → StaticLayout → LineBreaker → libminikin; FragmentManager / TaskPersister / SystemUI) foi feita lendo fontes públicas do Android em um navegador telefônico, seguindo cadeias de funções função por função quando a concentração permitia.
- Validação entre OEMs: Dispositivos adicionais (Pixel, Samsung, OPPO, OnePlus e outros) foram disponibilizados pela comunidade de pesquisa independente para que o comportamento pudesse ser verificado além de um único fabricante.
- Resultados dos fornecedores (selecionados): O VRP do Google Android recompensou a área de pesquisa Binder/IPC ($250, caso A-477279924). A Xiaomi reproduziu independentemente um vetor persistente do HyperOS e concedeu uma recompensa via HackerOne ($300). Outros fornecedores receberam relatórios com classificações mistas (veja Seção 17–18).
As afirmações técnicas neste whitepaper se baseiam em relatórios de falhas, pilhas nativas, tamanhos medidas de Bundles e inspeção pública do AOSP. O contexto da pesquisa é incluído para que os leitores entendam as restrições sob as quais a evidência foi coletada — não como uma substituição por essa evidência.
Conto narrativo da investigação (em espanhol): Desafiando o Android do sofá e com um smartphone (17 de julho de 2026). O cronograma e posts técnicos relacionados são listados sob Referências.
Resumo
Aplicativos Android processam continuamente entrada textual estruturada originária de páginas da web, plataformas de mensagens, documentos, deep links, serviços de acessibilidade, comunicação interprocesso (IPC) e conteúdo gerado pelo usuário.
No decorrer de aproximadamente quatro anos de análise independente, 32 vetores de ataque reproduzíveis foram documentados em vários subsistemas Android. Embora esses vetores diferem nos pontos de entrada, aplicativos afetados e comportamento observável, eles exibem consistentemente uma característica arquitetônica comum: a entrada textual estruturada se propaga por várias camadas do framework enquanto progressivamente amplia o custo computacional, pressão de memória ou estado interno da aplicação até que os limites de estabilidade sejam excedidos.
Este comportamento recorrente é definido como Amplicação de Texto Estruturado (STA).
O STA não é uma única vulnerabilidade. É um padrão de amplificação de recursos arquitetônicos. Ele materializa em duas formas principais:
- Classe A — Amplificação IPC / SavedState: quando o estado serializado excede o limite da transação Binder (1 048 576 bytes), o Android não tem um caminho seguro de degradação. A TransactionTooLargeException é propagada sem ser capturada, a aplicação (ou SystemUI) crasha e o mesmo estado oversized é re-persistido → loop de crash permanente.
- Classe B — Amplificação da Superfície de Interação: complexidade algorítmica dentro do motor nativo de layout de texto do Android (
libminikin.so) produz ANRs reproduzíveis em Chromium e Gecko ao processar URLs/texto oversized mas sintaticamente válidos.
A cadeia mais grave (STA-015-DL) escala a partir de um único clique em um link HTML do Google Drive para um loop de crash SystemUI que requer reinicialização dura (CVSS 8.6). Os mesmos princípios de amplificação aparecem no WhatsApp, Threads, Firefox, Opera, DuckDuckGo, Brave, Samsung Internet e componentes fundamentais do framework.
Este whitepaper unificado apresenta tanto o modelo arquitetônico que explica o padrão comum quanto a evidência técnica completa (traces de pilha nativa, relatórios de falhas em produção, análise de commits AOSP, pontuações CVSS e respostas dos fornecedores) que sustenta isso.
1. Amplificação de Texto Estruturado — Modelo Arquitetônico
Fato vs interpretação: O modelo STA é uma interpretação arquitetônica proposta pelo pesquisador para explicar padrões recorrentes observados em múltiplos vetores. Evidências empíricas (stacks nativos, relatórios de falhas em produção, tamanhos medidos de Bundles, confirmações de fornecedores) são apresentadas nas seções técnicas correspondentes. Os fatores de amplificação e o modelo unificado devem ser tratados como conclusões analíticas, não como comportamento documentado pela fabricante.
1.1 Definição Formal
Amplificação de Texto Estruturado (STA) é um padrão arquitetônico de ampliação de recursos no qual entrada textual estruturada atravessa várias camadas de software, causando custos computacionais crescentes, consumo de memória ou propagação de estado que podem eventualmente exceder os limites de estabilidade de um ou mais componentes downstream.
Diferentemente de uma vulnerabilidade de software tradicional, o STA não representa um único defeito de implementação ou corrupção de memória. A ampliação emerge da interação entre vários componentes independentes que transformam, validam, serializam, desserializam, renderizam, persistem ou redistribuem a mesma informação lógica. Cada componente pode operar corretamente em isolamento; o efeito cumulativo se torna significativamente maior do que previsto por qualquer sub-sistema individual.
1.2 Características Recorrentes
| Propriedade | Descrição |
|---|---|
| Entrada Estruturada | Informação textual hierárquica ou codificada (URLs, HTML, JSON, extras de Intent, Markdown...), não dados binários arbitrários. |
| Processamento Multifásico | O mesmo conteúdo lógico atravessa várias camadas independentes do framework. |
| Amplicação Progressiva | Custo de processamento aumenta nas fases sucessivas. |
| Infraestrutura Compartilhada | Aplicações não relacionadas reutilizam componentes idênticos do Android framework (libminikin, FragmentManager, TaskPersister, SystemUI...). |
| Comportamento Não Linear | O consumo de recursos frequentemente desproporcional ao tamanho da entrada. |
| Impacto Intercomponente | Falhas aparecem longe do ponto de entrada original (por exemplo, clique no navegador → crash do SystemUI). |
1.3 Pipeline Geral de Amplificação
Entrada Estruturada (URL / HTML / Intent / Clipboard / Deep Link)
↓
Parser / Validação
↓
APIs do Framework
↓
IPC Binder
↓
Motor de Renderização (TextView → StaticLayout → LineBreaker → libminikin) ← Classe B
↓
Layout / Composição
↓
Persistência de Estado (TaskPersister / SavedStateRegistry) ← Classe A
↓
SystemUI / Recuperação OEM
↓
Falha Observada (ANR / Loop de Crash / Reinicialização Dura)
2. Classe A vs Classe B — Mecanismos Concretos
Tabela 1. Comparação dos dois mecanismos de amplificação concretos sob o modelo STA. As linhas marcadas “Fator Observado” e “Resultado” são empíricas; “Proprietário da correção primária” é uma atribuição proposta de responsabilidade.
| Classe A — Amplificação em IPC / SavedState | Classe B — Amplificação na Superfície de Interacção | |
|---|---|---|
| Mecanismo | SavedState serialização → Bundle → Parcel → Binder > 1 MB | Layout de texto síncrono na thread principal (quebra de linha libminikin) |
| Recursos esgotados | Tamanho do buffer de transação Binder (1 048 576 bytes) | Tempo de CPU da thread principal (limite ANR ~5 s) |
| Diretor amplificador | Nivelamento de fragmentos + metadados (arquitetural) | Composição de caracteres URL (# / % €) (baseada em conteúdo) |
| Fator observado | ×2,8 a ×20,6 (medida no campo do WhatsApp) | Multiplicador 10–20× antes de O(n²)/bloqueio |
| Resultado | TransactionTooLargeException → loop de falha permanente | Bloqueio da thread principal → ANR (5–16 s) |
| Persistência | Sim — até que os dados sejam limpos ou o dispositivo reiniciado | Não (a menos que seja combinada com histórico / TaskPersister) |
| Proprietário principal da correção | Google / AOSP (FragmentManager + SystemUI + TaskPersister) | Google / AOSP (libminikin) + fornecedores de navegadores (defesa em profundidade) |
Duas modelos de amplificação distintos que compartilham uma categoria comum de causa raiz (ausência de validação de entrada antes de operações caras), mas não são reduzíveis a um único modelo matemático. A correção para um não aborda o outro.
3. Detalhe da Causa Raiz
Esta seção separa comportamento documentado da plataforma (limite Binder, falta de catch em caminhos de restauração, tamanhos Bundle medidos, pilhas nativas) da interpretação do pesquisador (STA como um padrão unificador) e das mitigações propostas (Seção 16).
3.1 O que É “Funcionando Como Intencionado”
O limite de 1 MB do Binder é intencional. Um aplicativo armazenando dados grandes em um Bundle e atingindo o limite é uma consequência documentada da má utilização do mecanismo — não uma vulnerabilidade por si só. Este relatório não afirma que o limite Binder ou a aninhagem de fragmentos são bugs.
3.2 O Problema Real — Ausência de Fallback Seguro (Classe A)
Quando FragmentManager.restoreAllState() encontra um Bundle que excede o limite do Binder, o Android não tem uma mecanismo de degradação seguro. A TransactionTooLargeException é propagada sem ser capturada, o processo falha e o mesmo estado oversized é persistido em disco para a próxima inicialização → loop de falha permanente que o usuário não pode escapar sem limpar os dados do aplicativo.
// Comportamento atual do Android — sem fallback seguro
void restauraTodosOsDados(Bundle estadoSalvo) {
// Sem try-catch. TransactionTooLargeException é propagada não capturada.
// Mesmo estado oversized re-persistido → loop de crash na próxima inicialização.
fragmentManager.restauraEstado(estadoSalvo);
}
// Recomendado — degradação segura
void restauraTodosOsDados(Bundle estadoSalvo) {
try {
if (ehBundleOverLimit(estadoSalvo)) {
Log.e(TAG, "SavedState acima do limite — descartando para reinicialização segura");
return; // inicialização limpa — sem loop de crash
}
fragmentManager.restauraEstado(estadoSalvo);
} catch (TransactionTooLargeException e) {
// degradação segura: o aplicativo inicia como se fosse a primeira inicialização
}
}
3.3 Amplificação Empírica — WhatsApp Android 15 (×20,6)
W/Bundle: childFragmentManager [L1] tamanho=1.636.412 W/Bundle: childFragmentManager [L2] tamanho=1.614.072 W/Bundle: childFragmentManager [L3] tamanho=1.603.852 W/Bundle: registryState tamanho= 479.948 W/Bundle: compose_text (origem) tamanho= 80.484 ← dados de entrada W/Bundle: TOTAL tamanho=1.661.088 ← +58% sobre o limite do Binder // Limite do Binder: 1.048.576 bytes · Overflow: +612.512 bytes · Fator: ×20,6
| Dados de Entrada | Profundidade do Fragmento | Pacote | Fator | Sobrepõe o Limite? |
|---|---|---|---|---|
| 10.000 bytes | 2 níveis | ~28.000 | ×2,8 | Não |
| 50.000 bytes | 4 níveis | ~275.000 | ×5,5 | Não |
| 80.000 bytes | 5 níveis+meta | ~1.021.000 | ×12,8 | Próximo |
| 82.431 bytes | 5 níveis+meta | ~1.124.352 | ×13,6 | SIM |
| 80.484 bytes | 5 lvls+Meta AI | ~1.661.088 | ×20,6 | SIM +58% |
3.4 Classe B — Amplificação Algorítmica da libminikin
Caracteres com significado especial em URLs forçam o algoritmo de quebra de linha a avaliar muitos mais candidatos:
# — cria uma fronteira lógica, duplicando decisões de quebra / — cada barra adiciona um ponto de quebra candidato % — expande UTF-8 para UTF-16 e fragmenta a string euro — propriedades de quebra de linha ambíguas forçam o algoritmo a explorar ambas as opções
4. Navegadores afetados (12 confirmados)
| Família do motor | Navegadores |
|---|---|
| Baseado em Chromium | Google Chrome, Microsoft Edge, Microsoft Bing, Opera Browser, DuckDuckGo Browser, Brave Browser, Samsung Internet |
| Baseado em Gecko | Mozilla Firefox, Firefox Focus, Firefox Nightly, Tor Browser |
| Proxy-based | Opera Mini (reproduzido independentemente) |
| Navegador | Motor | Vetores confirmados | Avisado |
|---|---|---|---|
| Google Chrome | Chromium | STA-001, STA-017 (Tier A), STA-020 | Sim — Google VRP |
| Microsoft Edge | Chromium | STA-017 (Tier A), STA-020 | Sim — MSRC |
| Microsoft Bing | Chromium (Sapphire) | STA-013, STA-015-DL | Sim — MSRC |
| Opera Browser | Chromium | STA-016, STA-017 | Sim |
| DuckDuckGo Browser | Chromium | STA-022, STA-022b | Sim — HackerOne |
| Brave Browser | Chromium | STA-021, STA-017 | Sim — HackerOne |
| Samsung Internet | Chromium | STA-023/023b/023c | Documentado, não notificado formalmente |
| Mozilla Firefox | Gecko | STA-019a/b/c/d, STA-017 | Sim |
| Firefox Focus / Nightly | Gecko | Família STA-019 | Sim — via Mozilla |
| Tor Browser | Gecko | STA-017, STA-019a/b/c | Sim |
| Opera, Opera Mini | Proxy-based | STA-016 | Sim — via Opera |
5. Taxonomia de evidências
| Tier | Critérios | Vetores |
|---|---|---|
| Tier A — Confirmado | Rastreamento completo da pilha + exceção + análise do Bundle | STA-005/005b/005c/005d, STA-006, STA-007, STA-009, STA-010/010b, STA-011, STA-012/012e, STA-015, STA-015b, STA-015-DL, STA-016, STA-017 Chrome+Firefox, STA-018, Família STA-019, STA-022 |
| Tier B — Comportamental | Panorama ou ANR observado; mecanismo inferido por analogia | STA-001, STA-003, STA-004, STA-008, STA-013, Família STA-020, Família STA-021, STA-022b, Família STA-023 |
| Tier C — Mitigado | Testado; nenhum crash — controle positivo | YouTube (todos os cenários) |
6. STA-017 — ANR transversal a motores: Evidências do Tier A
Evidência (observada): STA-017 foi elevado para Tier A tanto no Chrome (Chromium) quanto no Firefox (Gecko). Chamada de bloqueio: libminikin.so::LineBreakOptimizer::computeBreaks. Esta é uma biblioteca do sistema Android — não código Chromium ou Gecko.
6.1 Chrome — Rastreamento completo da pilha nativa (bugreport 2026-05-24)
Listagem 1. Pilha principal do thread nativo de um relatório de produção (Xiaomi Redmi Note 14 5G, Android 16).
Dispositivo: Xiaomi Redmi Note 14 5G · HyperOS 3.0 · Android 16. Versão do Chrome 777818033. Dois arquivos ANR, pilha idêntica.
// ANR 1 — 2026-05-24 13:38:44 — Chrome PID 3533 // Aguardou 5000ms por MotionEvent — ChromeTabbedActivity "main" prio=5 tid=1 Native ← THREAD DE INTERFACE BLOQUEADA native: minikin::getPrevWordBreakForCache libminikin.so native: minikin::LayoutCacheKey::LayoutCacheKey libminikin.so native: minikin::LayoutCache::getOrCreate libminikin.so native: minikin::StyleRun::getLineMetrics libminikin.so native: minikin::MeasuredText::getLineMetrics libminikin.so native: minikin::LineBreakOptimizer::computeBreaks ← O(n²) em URL longa native: minikin::breakLineOptimal libminikin.so native: android::nComputeLineBreaks libhwui.so at android.graphics.text.LineBreaker.nComputeLineBreaksWithHelperIndex (Native) at android.text.StaticLayout.generate (StaticLayout.java:970) at android.text.StaticLayout$Builder.build (StaticLayout.java:550) at android.widget.TextView.makeSingleLayout (TextView.java:11263) at android.widget.TextView.onMeasure (TextView.java:11486) at android.widget.ListView.onMeasure (ListView.java:1321) at org.chromium.chrome.browser.contextmenu.ContextMenuListView.onMeasure ↑ MENU DE CONTEXTO DO CHROME — long-press em link de URL grande at android.view.ViewRootImpl.performTraversals at android.app.ActivityThread.main
6.2 Firefox — Stack Trace Completa (bugreport 2026-06-12)
Processo: org.mozilla.firefox (PID 3506). Atividade: ExternalAppBrowserActivity. Duração: 16,006 ms. Desencadeado por: REAL link do Gmail (não um teste controlado).
// org.mozilla.firefox PID 3506 — ANR 2026-06-10 19:42:19 — 16,006ms "main" prio=5 tid=1 Native ← THREAD DE INTERFACE BLOQUEADA por 16,006 ms native: minikin::LayoutCacheKey::LayoutCacheKey+120 libminikin.so native: minikin::LayoutCache::getOrCreate libminikin.so native: minikin::LayoutPieces::getOrCreate libminikin.so native: minikin::StyleRun::getLineMetrics libminikin.so native: minikin::MeasuredText::getLineMetrics libminikin.so native: minikin::LineBreakOptimizer::computeBreaks+1752 ← O(n²) native: minikin::breakLineOptimal+476 libminikin.so native: android::nComputeLineBreaks+356 libhwui.so at android.graphics.text.LineBreaker.nComputeLineBreaksWithHelperIndex (Native) at android.text.StaticLayout.generate / Builder.build at android.widget.TextView.onMeasure at org.mozilla.fenix.customtabs.ExternalAppBrowserActivity URL rendering
| Atributo | Chrome (Chromium) | Firefox (Gecko) |
|---|---|---|
| Entrada nativa | libminikin::LineBreakOptimizer::computeBreaks | libminikin::LineBreakOptimizer::computeBreaks |
| Duração do ANR | 5,000ms+ (limite) | 16,006ms (3× mais longo) |
| Desencadeador | Teste controlado | REAL link do Gmail |
| Nível | Nível A | Nível A |
6.3 Entradas Adicionais Confirmadas (junho de 2026)
| Bugreport | Apliicação | Desencadeador | função minikin | Ponto de entrada |
|---|---|---|---|---|
| 2026-05-24 | Chrome | Long-press em link | breakLineOptimal | ContextMenuListView.onMeasure |
| 2026-06-10 | Firefox | Real link do Gmail | breakLineOptimal | ExternalAppBrowserActivity |
| 2026-06-24 | Edge | Crash da SystemUI → re-layout do omnibox | breakLineOptimal | OmniboxSuggestionsContainer |
| 2026-06-28 | Google App | android.intent.action.TRANSLATE | breakLineGreedy | DynamicLayout$ChangeWatcher.onTextChanged |
Critico: breakLineGreedy também é vulnerável a bloqueio em texto longo. A solução ingênua de "mudar para greedy" é incompleta. É necessário um limite de comprimento rígido antes que qualquer algoritmo seja executado.
Passo a passo para reprodução (STA-017 — Menu de contexto do Chrome)
- Crie uma página HTML que contenha um hyperlink cujo
hrefé uma URL sintaticamente válida com cerca de 80–120 KB e alta densidade de caracteres#,/e%. - Hospede ou abra a página no Chrome em um dispositivo Android 13-16.
- Mantenha pressionado o link até que o menu de contexto apareça.
- Observe ANR (tempos de espera da thread principal, geralmente ≥ 5000 ms). Capture via
adb bugreport; a pilha nativa mostralibminikin::LineBreakOptimizer::computeBreaks.
Comportamento equivalente foi observado com links reais do Gmail (Firefox, 16006 ms) e re-layout da barra de endereços desencadeada pelo SystemUI (Edge).
6b. STA-027 — Amplificação de Link Profundo do Edge Ask Copilot ★NOVO
| Identificador STA | STA-027 |
| Categoria | Navegação de Intents / Composição (Classe A + Classe B) |
| Componente afetado | Microsoft Edge Ask Copilot (com.microsoft.copilotn) |
| Impacto | Crash ou falha de navegação via link profundo com initialText muito grande. |
| CVSS 3.1 | 6.5 |
| Persistência | Sim (até que os dados sejam limpos ou o estado da conversa seja reiniciado) |
| Nível | A ★NOVO |
STA-027 demonstra comportamento simultâneo de Classe A e B dentro do caminho de navegação profundo do Microsoft Edge Ask Copilot. Um payload estruturado muito grande fornecido no parâmetro initialText é aceito pelo manipulador de links profundos e encaminhado para Jetpack Compose Navigation. O resultado da rota excede a estrutura esperada do NavGraph, produzindo um IllegalArgumentException não capturado.
java.lang.IllegalArgumentException: navigation destination com.microsoft.copilotn.features.deeplink.navigation.routes.HomeNavRoute.ChatNavRoute? conversation_id=null&private_mode_chat=false&conversationTitle=null&initialText=ULTRA%20DESTRUCTIVE%20LAYOUT%20ATTACK... is not a direct child of this NavGraph at androidx.navigation.compose.c.a (NavGraph.kt:356) at com.microsoft.copilotn.features.deeplink.navigation.routes.HomeNavRoute.ChatNavRoute
O valor initialText muito grande simultaneamente:
- Inicia trabalho de layout / medição de texto caro (caminho de amplificação Classe B) quando o destino tenta renderizar ou pré-processar o parâmetro.
- Quebra a resolução do gráfico de navegação Compose porque a rota totalmente expandida não é mais reconhecida como um filho direto do NavGraph (falha de estado / roteamento estilo Classe A).
Ativação remota: Diferentemente da STA-017 (que requer um long press ou interação local com a IU dentro de um navegador já aberto), a STA-027 pode ser acionada remotamente por um link profundo malicioso que abre o Edge Ask Copilot com um parâmetro initialText personalizado. Não é necessário nenhum prévio contato com a IU do Copilot além de seguir o link.
Passo a passo para reprodução (STA-027)
- Crie um link profundo que alvo o Microsoft Edge Ask Copilot e inclua um parâmetro
initialTextmuito grande (texto estruturado suficientemente grande para expandir a rota de navegação Compose além das expectativas do NavGraph). - Abrir o link de outro aplicativo ou navegador (ACTION_VIEW / link profundo).
- Observe
IllegalArgumentExceptionnão capturado doandroidx.navigation.compose(NavGraph.kt) ao resolverHomeNavRoute.ChatNavRoute. - Capture logcat / bugreport; confirme que a pilha inclui o destino de navegação contendo o
initialTextexpandido.
7. Evidências de commit do AOSP
7.1 Commit Chromium 3e62ece6 — LargePayloadSupport (07/05/2026)
Commit: chromium.googlesource.com/chromium/src/+/3e62ece6
Mensagem do commit (exata):
“Implementa ResultReceiver para grandes payloads no DigitalCredentialsPresentationDelegate para evitar TransactionTooLargeException quando as respostas excedem os limites do IPC Binder. Isso se alinha com atualizações nas bibliotecas Jetpack (AOSP CL 3989977) onde payloads grandes são passados via descritores de arquivo.”
1. Nomeia explicitamente TransactionTooLargeException — igual a todos os vetores Classe A.
2. Referencia AOSP CL 3989977 (LargePayloadSupport) — interno, não público.
3. Correção: descritores de arquivo em vez de Binder.
4. Google nomeou isso como: LargePayloadSupport.
Rastreadores históricos relacionados:
7.2 androidx.savedstate 1.5.0 — Bug #425919375
| Data | Evento | T+ VRP |
|---|---|---|
| Junho 19, 2025 | Bug #425919375 criado — serialização SavedState | — (inativo há 7 meses) |
| Janeiro 20, 2026 | Submissão VRP ao Google Android VRP | T+0 |
| Fevereiro 10, 2026 | Google responde pela primeira vez | T+21 dias |
| Martço 4, 2026 | Commit: Suporte genérico de serialização para SavedState | T+43 dias |
| Martço 11, 2026 | Bug corrigido — savedstate 1.5.0-alpha01 | T+50 dias |
| Maio 19, 2026 | savedstate 1.5.0 STABLE — CBOR/JSON desacoplado do Binder | T+119 dias |
A versão savedstate 1.5.0 desacopla SavedState da pipeline Bundle/Binder — uma correção arquitetural para parte da causa raiz Classe A. O bug estava inativo por 7 meses e foi reativado 21 dias após a submissão VRP. Corrigido em aproximadamente 30 dias. O Google descreveu isso como “suporte multiplataforma” — sem menção pública de motivações de segurança.
7.3 libminikin dívida técnica — pipeline multifile (resumo forense do AOSP)
A revisão independente da fonte AOSP identifica uma déficit sistemática de design em vários arquivos minikin: falta de validação de comprimento antes de trabalhos caros de quebra de linha ou layout. As rotas de código mais antigas datam de 2013. Arquivos-chave:
| Arquivo | Desde | Problema | Função |
|---|---|---|---|
| FontFamily.cpp | 2013 | Casos de borda nulos / mais próximos | getClosestMatch() |
| Layout.cpp | 2013 | Texto longo processado sem guarda de cache | doLayoutWord() |
| OptimalLineBreaker.cpp | 2015 | Knuth-Plass O(n²) sem limite de entrada | computeBreaks() |
| GreedyLineBreaker.cpp | 2017 | Lacos aninhados; pior caso custoso | processLineBreak() |
| LineBreaker.cpp | 2018 | Escolhe Optimal/Greedy sem verificação de tamanho | breakIntoLines() |
| LayoutCache.h | 2018 | Maior que CHAR_LIMIT_FOR_CACHE → processamento direto (sem cache) | getOrCreate() |
LineBreaker::breakIntoLines() — sem guarda textBuffer.size()
↓
Quebra de linha ótima / gulosa — O(n²) / trabalho aninhado em entrada longa
↓
Layout::doLayoutWord()
↓
LayoutCache::getOrCreate() — intervalos longos bypassam cache → trabalho completo
↓
Shaping HarfBuzz
↓
Thread UI bloqueada (5–16 s ANR)
Histórico do rastreador público de problemas (exemplos): #161830416, #167014931, #188985643, #40268980 / Chromium 1447465 (ANR do engenheiro da Samsung), #477202817 (Não corrigido), #524288518 (fora de escopo), #531319203 (padrão relacionado). Limites estruturais de comprimento não foram aplicados ao longo da pipeline até o boletim de julho de 2026, apesar do trabalho interno do Google que abordava uma causa raiz adjacente (AOSP CL 3989977, LargePayloadSupport).
Detalhe: libminikin: 10 anos de vulnerabilidade · Algorithmic DoS en libminikin.so
8. Evidências do Campo — Android 16, Dispositivo de Produção
8.1 STA-015 — 85 Crashes no SystemUI em 4 Dias (bugreport 2026-05-26)
Dispositivo: Xiaomi Redmi Note 14 5G · HyperOS 3.0.3.0 · Android 16. Loop de crash reproduzido espontaneamente durante uso normal do dispositivo.
// Sistema UI falha ao inicializar android.os.BadParcelableException: Falha ao recuperar array; apenas 1 de 4 recebido at android.content.pm.BaseParceledListSlice.<init>(BaseParceledListSlice.java:111) at android.window.ITaskOrganizerController$Stub$Proxy.registerTaskOrganizer(...) at android.window.TaskOrganizer.registerOrganizer(TaskOrganizer.java:76) at com.android.wm.shell.sysui.ShellInit.init(...) ← falha ao inicializar Causado por: android.os.DeadObjectException: Transação falhou em pequeno parcele
| Total de falhas do Sistema UI | 85 entradas — 4 dias (23 a 26 de maio de 2026) |
| Maior loop rápido | 16 falhas em 92 segundos |
| Tempo mínimo de sobrevivência | 374 ms — falha antes que qualquer UI seja renderizada |
| Versão do Android | Android 16 — primeira reprodução confirmada |
8.2 STA-015b / STA-015-DL — Auto-Re-Trigger (fluxo de 12 etapas) no HyperOS
PASO 1: O usuário abre HTML do Google Drive e clica em um link
PASO 2: O navegador recebe URL malformada via INTENT VIEW
callingPackage=com.google.android.apps.docs (certificado pelo OS Android)
PASO 3: libminikin O(n²) ANR no navegador
PASO 4: A URL corrompe o estado TaskPersister em disco
PASO 5: Sistema UI lê estado corrompido → BadParcelableException → CRASH
PASO 6: Android reinicia automaticamente o Sistema UI
PASO 7: OEM Task State Interactor (HyperOS OEM) se inscreve no fluxo:
getFocusedRootTaskInfo() → lê MESMO estado corrompido em disco → CRASH NOVAMENTE
PASO 8: Loop de falhas → Android forçado a limpar dados do Sistema UI → TELA DE BLOQUEIO
PASO 9: O usuário entra com PIN/padrão/digital
PASO 10: Android restaura sessão → NAVEGADOR RETORNA AO PRIMEIRO PLANO
PASO 11: OEM Task State Interactor lê estado da tarefa → navegador está ativo
→ lê ainda o estado corrompido TaskPersister → SEGUNDO LOOP DE FALHAS
PASO 12: NENHUMA AÇÃO ADICIONAL DO USUÁRIO É NECESSÁRIA — falha re-trigger automaticamente
// Recuperação: reinicialização forçada + limpeza de dados do navegador
STA-015-DL no HyperOS re-trigger automaticamente após o desbloqueio da tela inicial. Nenhuma ação adicional do usuário é necessária após o clique inicial. Uma reinicialização pode não ser suficiente se o navegador relançar com o mesmo estado corrompido.
9. Catálogo Completo de Vetores — 32 Vetores
Tabela 2. Vetores STA documentados. As pontuações CVSS são estimativas dos pesquisadores (veja nota metodológica sob a tabela). Tier A = evidência completa da pilha / exceção; Tier B = comportamental / analogia.
| ID | Aplicativo / Componente | CVSS | Persistência | Nível | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| STA-015-DL | Google Drive + Qualquer Navegador → Loop de reinicialização do SystemUI (reinicialização dura) | 8.6 | Apenas reinicialização | A | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| STA-018 | Google Drive + Serviço de Impressão + SystemUI — Cadeia ANR | 7.5 | Até reinicialização | A | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| STA-010 | SystemUI / Serviço de Impressão — Drive → impressora local | 7.2 | Até reinicialização | A | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| STA-011 | SystemUI / Área de transferência — colar preview crash | 7.2 | Até reinicialização | A | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| STA-015 | WindowManager Shell / RecentTasksController | 7.2 | Auto-restart→lockscreen | A | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| STA-015b | HyperOS / Interator de Estado da Tarefa OEM (OEM Xiaomi) | 7.2 | Auto-recovery | A | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| STA-012 | Threads (Meta) — deep link /search?q=[payload] | 7.1 | Permanente (pm clear) | A | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| STA-012e | Threads via WhatsApp — HTML/WebView → Threads deep link | 7.1 | Permanente (pm clear) | A | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| STA-019a | Firefox — ClipboardManager DeadSystemException ao focar na barra de endereços | 6.8 | Em cada evento de foco | A | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| STA-008 | Serviços do sistema — chamada de sincronização IPC + payload grande → ANR | 6.8 | Até o app ser encerrado | B | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| STA-005d | WhatsApp deep link api.whatsapp.com/send?text=[payload] | 6.8 | Possível | B | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| STA-017 | 6+ navegadores — long-press URL → libminikin ANR (Chrome+Firefox Tier A) | 6.5 | Não | A | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| STA-027 | Microsoft Edge Ask Copilot — deep link initialText NavGraph crash ★NOVO | 6.5 | Sim | A ★ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| STA-005 | WhatsApp — colar texto grande no campo de composição da mensagem | 6.5 | Permanente | A | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| STA-005b | WhatsApp Business — todos os agentes na caixa de entrada compartilhada | 6.5 | Permanente (todos os agentes) | A | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| STA-005c | WhatsApp + Meta AI — draft grande em chat de IA | 6.5 | Permanente (todo o app) | A | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| STA-006 | Google App — Selecionar texto → Traduzir | 6.5 | Permanente | A | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| STA-007 | Google Drive — PDF invisível → Selecionar tudo → Traduzir | 6.5 | Permanente | A | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| STA-009 | Google Drive — DOCX grande → Visualização de impressão | 6.5 | Permanente | A | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| STA-010b | Google Play Services — Drive → impressora em nuvem | 6.5 | Até o app ser fechado | A | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| STA-016 | Opera Browser — onResume → RuntimeException: Falha do sistema | 6.5 | Permanente | A | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| STA-019d | Firefox — barra de endereços TextLayout lineIndex OOB | 6.5 | Em cada evento de foco | A | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| STA-020 | Chrome + Edge — pipeline histórico da barra de endereços ANR | 6.5 | Até o histórico ser limpo | B | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| STA-021 | Brave Browser — barra de endereços ANR / anormalidade na renderização | 6.5 | Até o histórico ser limpo | B | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| STA-022 | DuckDuckGo — URL_EXTRA_ARG 920KB em Fragment args (965KB parcel) | 6.5 | Até a aba ser fechada | A |
| STA-022b | DuckDuckGo — pipeline de sugestão de histórico ANR (entre sessões) | 6.5 | Até o histórico ser limpo | B |
| STA-013 | Microsoft Bing — crash de histórico da barra de endereços contaminado | 6.0 | Até os dados serem limpos | B |
| STA-019b | Firefox — SearchDialogFragment IllegalStateException | 6.0 | Em cada evento de foco | A |
| STA-019c | Firefox — Compose TextLayout lineIndex OOB (Jetpack Compose) | 6.0 | Em cada evento de foco | A |
| STA-023/b/c | Samsung Internet — congelamento de aba em segundo plano / Compartilhar / grupo de abas | 5.4 | Não | B |
| STA-004 | Google Maps — URI geo: oversized | 4.8 | Parcial | B |
| STA-001/003 | Chrome / Navegadores — menu de contexto long press, Compartilhar link | 3.7 | Não | B |
Nota metodológica CVSS: As pontuações do CVSS 3.1 são estimativas dos pesquisadores. Para STA-015-DL, o vetor usado é AV:N/AC:L/PR:N/UI:R/S:C/C:N/I:N/A:H (8.6). Outras pontuações seguem um raciocínio análogo (entrega remota ou local, interação do usuário, impacto na disponibilidade e se a escopo muda para SystemUI). As pontuações estão sujeitas à revisão dos fornecedores.
9b. Matriz de Impacto (Qualitativa)
Tabela 3. Resumo qualitativo por grupo de vetores (avaliação dos pesquisadores; complementa o CVSS na Tabela 2).
| Grupo de vetores | Disponibilidade | Persistência | Interação do usuário | Complexidade da ataque | Observações |
|---|---|---|---|---|---|
| STA-015-DL / SystemUI | Baixa (interface do dispositivo) | Sim (reinicialização) | Clique único | Baixa | Mudança de escopo; reinicialização dura |
| STA-010/011 Print/Clipboard | Baixa (SystemUI) | Sim (até a reinicialização) | Impressão / colar | Baixa | Caminho do serviço do sistema |
| STA-005 Família WhatsApp | Baixa (app / caixa de entrada compartilhada) | Sim (excluir conversa) | Colar / abrir conversa | Baixa | ×20.6 Amplificação do Bundle |
| STA-012 Threads | Baixa (app) | Sim (pm clear) | Clique em link profundo | Baixa | Permanente até a limpeza dos dados |
| STA-017 libminikin ANR | Média (ANR 5–16 s) | Não | Clique longo / foco | Baixa | Cross-engine; biblioteca do framework |
| STA-027 Edge Ask Copilot | Média–Baixa (crash) | Sim | Clique em link profundo | Baixa | Direcionamento remoto; Compose NavGraph |
| STA-019 Firefox barra de endereços | Média | Sim (em cada foco) | Foco na barra de endereços | Baixa | Repetido até a limpeza do histórico |
| STA-020/021/022 navegadores | Média | Parcial | Foco / histórico | Baixa | Pipeline de histórico |
10. STA-005 — Variantes do WhatsApp
| Componente afetado | FragmentManager.restoreAllState() — AndroidX |
| Causa | Bundle.dataSize() > 1,048,576 bytes durante a restauração do estado |
| Comportamento atual | TransactionTooLargeException não capturado → crash → estado re-persistido → loop |
| Comportamento esperado | Exceção capturada → estado descartado → início limpo → sem loop |
| Reprodutibilidade | 100% — Pixel 7, Xiaomi Redmi 14, OPPO A78, OnePlus 11 (Android 13–16) |
| Apliques confirmados | WhatsApp, WhatsApp Business, Meta AI, Threads, Bing, Opera, DuckDuckGo, Firefox |
| CVSS 3.1 | 6.5 — AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H |
STA-005b (WhatsApp Business): Quando o SavedState de uma conversa fica contaminado, o loop de crash afeta SIMULTANEAMENTE todos os agentes em uma caixa de entrada compartilhada. A única recuperação (excluir a conversa) destrói toda a história de comunicação com aquele cliente.
STA-005c (WhatsApp + Meta AI): Rascunho oversized no chat AI pode travar permanentemente o aplicativo inteiro.
11. Série STA-015 — Vetores do SystemUI
Esses vetores estendem a amplificação de Classe A para componentes do sistema privilegiados. O impacto não está mais confinado a um único aplicativo.
| Vetor | Causa | Mecanismo | CVSS |
|---|---|---|---|
| STA-010 | Documento do Google Drive → Impressão → impressora local | O serviço de impressão constrói o Bundle de prévia a partir de texto oversized; excede Binder quando passado para SystemUI | 7.2 |
| STA-010b | Drive → impressora em nuvem/rede | Mesmo mecanismo raiz direcionado através do Play Services | 6.5 |
| STA-011 | Copiar clipboard oversized → focar campo de texto com assistido-paste | O assistido-paste do clipboard serializa o ClipData completo em vez de um snippet truncado | 7.2 |
| STA-015 | Abrir lista de aplicativos recentes / lista de tarefas | RecentTasksController lê o estado da tarefa corrompido → DeadSystemException → crash do SystemUI → bloqueio na tela inicial | 7.2 |
| STA-015b | HyperOS após reinicialização do SystemUI | O OEM Task State Interactor re-lê o estado corrompido → recrash automático | 7.2 |
| STA-015-DL | Ligação HTML do Google Drive → qualquer navegador | Cadeia remota completa (veja a seção 8.2). Reinicialização dura necessária. Mudança de escopo. | 8.6 |
CVSS 3.1 para STA-015-DL: AV:N / AC:L / PR:N / UI:R / S:C / C:N / I:N / A:H = 8.6 ALTA. Remoto, clique único, muda o escopo para SystemUI, impacto de alta disponibilidade.
12. STA-019 — Firefox: Quatro Modos de Falha
- STA-019a — DeadSystemException do ClipboardManager em cada foco na barra de endereços (CVSS 6.8)
- STA-019b — IllegalStateException do SearchDialogFragment (CVSS 6.0)
- STA-019c — Índice fora dos limites em TextLayout do Jetpack Compose (CVSS 6.0)
- STA-019d — Índice fora dos limites em TextLayout da barra de endereços (CVSS 6.5)
Todos os quatro podem ser acionados a cada evento de foco uma vez que o histórico/estado seja contaminado, resultando em uma barra de endereços inutilizável.
13. STA-020 / 021 — Pipeline da Barra de Endereços do Chrome / Edge / Brave
A pipeline de sugestões de histórico retém URLs oversized. A subsequente focagem ou renderização de sugestão reentra no libminikin ou causa ANR. O Chromium aplicou uma truncagem parcial somente para exibição em 2023 que nunca cobriu o caminho de carregamento/histórico — STA-020 ainda reproduz pelo caminho não corrigido.
14. STA-022 — DuckDuckGo
STA-022: Fragment arguments armazenam URL_EXTRA_ARG de ~920 KB, produzindo um parcel de 965 KB → TransactionTooLargeException (Tier A). STA-022b: pipeline de sugestões de histórico ANR que sobrevive entre sessões até que o histórico seja limpo.
15. Validação Multiplataforma — iOS Não Atingido
A mesma carga não faz crash no Threads para iOS. O mesmo aplicativo, a mesma deep link de 20 000 caracteres, zero crash em iOS. A falha é isolada aos componentes específicos do Android: Binder (limite de 1 MB), TaskPersister, FragmentManager.restoreAllState(). A correção deve vir da Google / AOSP.
16. Correções Recomendadas
Mitigações propostas (comportamento não observado em fábrica). Os exemplos de código abaixo são sugestões para proprietários do framework e aplicativos; eles ainda não foram incorporados no upstream conforme o boletim de julho de 2026.
16.1 Framework — Classe B (libminikin)
Tabela 2. Propostas de limites de comprimento antes da quebra de linha ótima/gananciosa.
// CORREÇÃO APROVADA — LineBreakOptimizer.cpp (libminikin.so)
// O anterior “switch para ganancioso apenas” é incompleto: breakLineGreedy também bloqueia.
LineBreakResult LineBreakOptimizer::computeBreaks(...) {
const int textLength = end - start;
// LIMITE 1 (DURO): Truncar antes que qualquer algoritmo seja executado.
// Nenhum algoritmo produz resultados úteis para texto > 8 KB de URL/texto.
if (textLength > MAX_SAFE_TEXT_LENGTH_ABSOLUTE) {
end = start + MAX_SAFE_TEXT_LENGTH_ABSOLUTE;
}
// LIMITE 2: Preferir O(n) ganancioso para textos de médio comprimento.
if ((end - start) > MAX_SAFE_TEXT_LENGTH_FOR_OPTIMIZER) {
return computeBreaksGreedy(measured, start, end, constraints);
}
return computeBreaksOptimal(measured, start, end, constraints);
}
// As unidades são unidades de código UTF-16 (Java/Android char), NÃO bytes.
static const int MAX_SAFE_TEXT_LENGTH_ABSOLUTE = 8192; // truncar duro
static const int MAX_SAFE_TEXT_LENGTH_FOR_OPTIMIZER = 2048; // switch para ganancioso
16.2 Framework — Classe A (FragmentManager / SystemUI)
- Capturar TransactionTooLargeException dentro de FragmentManager.restoreAllState() e iniciar limpo.
- Validar o tamanho do estado derivado antes da persistência (TaskPersister, SavedStateRegistry).
- O SystemUI e os componentes OEM devem tratar as listas de tarefas restauradas como potencialmente tóxicas e se comportarem com elegância (não fazer crash no processo inteiro do UI).
16.3 Nível de Aplicativo (soluções imediatas)
// Truncar qualquer texto exibido em um TextView
public static String safeForTextView(String text) {
final int MAX = 8192;
if (text == null) return null;
return text.length() > MAX ? text.substring(0, MAX) + "..." : text;
}
// Rejeitar intents oversized VIEW
if (Intent.ACTION_VIEW.equals(intent.getAction())) {
Uri data = intent.getData();
if (data != null && data.toString().length() > 50_000) {
Log.w(TAG, "Incoming VIEW Intent URL exceeds safe length — discarding");
finish();
return;
}
}
Aviso de cobertura para CISOs: A atualização para androidx.savedstate 1.5.0 NÃO protege contra STA-015-DL (SystemUI), STA-015/015b, STA-017 (libminikin) ou STA-019 (pipeline do Firefox). Esses requerem alterações de nível AOSP que apenas a Google pode enviar.
16.4 Padrão Geral de UI do Sistema / Resiliência OEM (STA-015b)
O componente HyperOS OEM Task State Interactor re-subscribe para informações sobre tarefas após a reinicialização da SystemUI e re-lê o estado corrompido. A degradação segura em caso de DeadObjectException previne um segundo loop de falhas automáticas:
// STA-015b — Xiaomi / HyperOS OEM fix
// OEM Task State Interactor: degradação segura quando o TaskManager está morto
val focusedTaskFlow = interactor.getFocusedRootTaskInfoFlow()
.catch { exception ->
if (exception is DeadObjectException) {
Log.e("SystemUI", "O serviço TaskManager está morto. Re-subscribe mais tarde.")
emit(null) // Degradação segura — não faça o SystemUI falhar
} else {
throw exception
}
}
17. Status de Notificação do Fornecedor
| Fornecedor | Primeira notificação | Resposta / validação | Status de patch (Jul 2026) |
|---|---|---|---|
| Xiaomi | 2026 | Reproduzido, confirmado, recompensado | Mitigação OEM viável |
| Google (Android VRP) | Jan 20, 2026 | Vários relatórios; resultados mistos; progresso com savedstate 1.5.0 | Nenhum patch público STA no boletim de julho |
| Microsoft (MSRC) | Jan / Jun 2026 | Casos individuais (Edge, Bing, Ask Copilot STA-027) | Pendente |
| Mozilla | 2026 | Relatórios enviados (família Firefox) | Pendente |
| Opera / Brave / DuckDuckGo / Tor | 2026 | Relatórios enviados; classificações variadas | Pendente |
| Samsung | — | Apenas documentado (nenhum VRP público para esta classe) | — |
| INCIBE (CNA Spain) | Jul 2026 | Encaminhado ao MITRE (CNA Root for Google). Relatórios técnicos e PoCs enviados. | Todos os vetores STA |
18. Linha do Tempo de Divulgação
Período de pesquisa: 2022 → 30 Julho 2026. Dispositivo principal do laboratório: Xiaomi Redmi Note 14 5G (HyperOS 3.0 / Android 16). Muita da análise da rota AOSP foi realizada a partir de um navegador telefônico lendo fontes públicas, sem uma configuração tradicional de multi-monitor.
18.1 2022 — Origem
| Data | Milestone |
|---|---|
| 28 Ago 2022 | Descoberta original: TransactionTooLargeException / DeadSystemException em Firefox Focus & Nightly (clipboard, compartilhar, abrir no app) |
| 12 Out 2022 | Primeiro aviso público: “Mozilla Firefox Focus e Nightly para Android Remote Crash DoS” (lostmon.blogspot.com) |
| Nov 2022 | Caso Chromium 40879254 aberto; rótulos de segurança removidos; patch parcial da UX; caso permaneceu aberto |
| Nov 2022 | Bugzilla Mozilla #1802594 (S3) aberto — ainda em estado NEW / não resolvido até 2026 |
18.2 Janeiro–Abril 2026 — Investigação formal
| Data | Milestone |
|---|---|
| 20 Jan 2026 | Relatórios formais para Google Android VRP (A-477279924) e Microsoft MSRC. O caso A-477279924 recebeu um prêmio VRP de R$ 250 na área de pesquisa Binder/IPC e permaneceu aberto / bloqueado em dependência interna até meados de 2026. (Um registro separado do Chrome VRP, Issue 477202817, foi fechado no mesmo dia como “Não Fixar (Comportamento Intencionado)”.) |
| Fev 2026 | Paper v4 distribuído (27 vetores); STA-015-DL (CVSS 8.6) e STA-015b adicionados |
| Mar 2026 | Meta (WhatsApp/Threads) notificada — sem resposta (mais de 113 dias até julho) |
18.3 Maio–Junho 2026 — Evidências do campo
| Data | Milestone |
|---|---|
| 24 Mai 2026 | Bugreport Chrome: 2 ANRs nativos completos → STA-017 Tier A (libminikin) |
| 26 Mai 2026 | SistemaUI: 85 crashes em 4 dias no Android 16 (primeira confirmação) |
| 31 Mai 2026 | ATA-015-DL ataque remoto confirmado via Google Drive (callingPackage=com.google.android.apps.docs) — 6 navegadores |
| 10 Jun 2026 | Avisos de fornecedores: Mozilla, Opera, DuckDuckGo, Brave, Tor, Xiaomi (HackerOne) |
| 10 Jun 2026 | Firefox ANR 16 006 ms (link real do Gmail) → STA-017 Firefox Tier A |
| 14 Jun 2026 | MSRC responde; solicita casos separados; adia causa raiz do framework para o Google |
| 15 Jun 2026 | O Google fecha relatório específico libminikin (524288518) como “fora de escopo” — meses após prêmio de R$ 250 |
| 16 Jun 2026 | Apeal para STA-015-DL citando CVE-2023-21167 / A-259942964; Opera classifica como P5 Informativo |
| 19 Jun 2026 | O Brave rejeita como “upstream / DoS fora de escopo” |
| 20 Jun 2026 | Segunda falha espontânea do loop SystemUI; ANR Edge 25 s depois → STA-017 Edge Tier A |
| 24 Jun 2026 | Tres casos separados MSRC abertos; posts de blog: STA framework + DoS Algorítmico em libminikin |
| 28 Jun 2026 | Aplicativo Google: 5 ANR e 3 TransactionTooLargeException em 14 min; breakLineGreedy também vulnerável; primeiro Class A+B simultâneo |
| 30 Jun 2026 | Nenhuma alteração pública no AOSP/Chromium/AndroidX para vetores documentados; boletim de junho vazio para STA |
18.4 Julho 2026 — Contagem regressiva para divulgação
| Data | Milestone |
|---|---|
| 5 Jul 2026 | Caso Google #531319203 aberto (boot loop do system_server / BitmapCache — mesmo padrão arquitetônico) |
| 6 Jul 2026 | Boletim de Segurança Android de julho publicado — zero patches para qualquer vetor STA |
| 10 Jul 2026 | Blog: “libminikin: 10 anos de vulnerabilidade”; dispositivo Xiaomi ainda vulnerável após patch de junho |
| 11 Jul 2026 | Bugzilla Mozilla #2046725 aberto para família Firefox |
| 16 Jul 2026 | Xiaomi confirma a vulnerabilidade e concede recompensa (R$ 300 via HackerOne) |
| Jul 2026 | STA-027 (Edge Ask Copilot) documentado; INCIBE (CNA Espanha) revisou o caso e encaminhou para MITRE para atribuição de CVE |
| 21 Jul 2026 | Fechamento do Google Appesl 526330835 como “Não Reproduzível” |
| 30 Jul 2026 | Divulgação pública da whitepaper — lostmon.blogspot.com |
Linha do tempo completa e artigos relacionados: Timeline STA · História da pesquisa · libminikin 10 anos · DoS algorítmico · Estrutura STA
19. Glossário
| Termo | Definição |
|---|---|
| STA | Amplicação Estruturada de Texto — padrão arquitetônico progressivo de amplificação de recursos a partir de entrada textual estruturada. |
| Classe A | Amplicação IPC / SavedState: Bundle excede o limite do Binder → loop de falhas. |
| Classe B | Amplicação da superfície de interação: libminikin quebra linhas e bloqueia a thread UI → ANR. |
| Binder | Mecanismo IPC do Android; limite rígido de transações 1 048 576 bytes. |
| TaskPersister | Componente da estrutura que persiste o estado da tarefa/atividade no disco para restauração. |
| SavedState / FragmentManager.restoreAllState() | Caminho AndroidX/AOSP que restaure a hierarquia de Fragments de um Bundle após a morte do processo. |
| libminikin | Biblioteca nativa de layout de texto do Android (quebra de linhas, medição); usada por TextView e outros. |
| LineBreakOptimizer::computeBreaks | Caminho ótimo (geralmente O(n²)) para quebrar linhas dentro do libminikin. |
| SystemUI | Processo privilegiado que possui a barra de status, barra de navegação, tela bloqueada e tarefas recentes. |
| OEM Task State Interactor | Componente OEM HyperOS da Xiaomi que se re-inscreve no estado foco de tarefa após o reinício do SystemUI. |
| LargePayloadSupport | Trabalho interno Google/AOSP (CL 3989977) para passar grandes payloads por meio de descritores de arquivo em vez de Binder. |
| TransactionTooLargeException | Exceção lançada quando uma transação Parcel/Binder excede o limite de 1 MB. |
| ANR | Apliação Não Responde — thread principal bloqueado além do limiar da watchdog (~5 s). |
| NavGraph (Compose) | Grafos de navegação Jetpack Compose; rotas devem ser filhos diretos do gráfico declarado. |
20. Limitações e Trabalho Futuro
- A pesquisa foi realizada em dispositivos de produção para consumidores; nenhum acesso privilegiado ao código-fonte proprietário do fornecedor além do AOSP.
- O comportamento exato varia com a versão do Android, personalizações OEM, memória disponível e patches de segurança.
- Nem todos os vetores documentados receberam confirmação independente dos fornecedores.
- A STA é proposta como um modelo arquitetônico em funcionamento derivado de observações empíricas. Sua validade final depende da reprodução independente e crítica.
20.1 Trabalho Futuro
- Mapeamento matemático formal dos limites de amplificação (profundidade de aninhamento Classe A vs tamanho do Bundle; custo da composição de caracteres Classe B).
- Deteção automatizada de caminhos de execução estilo STA (análise estática + instrumentação dinâmica).
- Comparação mais ampla entre plataformas (controles adicionais para iOS; outros pipelines de texto móveis).
- Patches prontos para upstream para os limites de comprimento do libminikin e a degradação segura do SystemUI.
21. Conclusão
O que inicialmente parecia ser condições isoladas de negação de serviço gradualmente revelou características arquiteturais recorrentes compartilhadas por caminhos de execução aparentemente não relacionados. Essas observações motivaram a introdução do modelo de Amplificação de Texto Estruturado (STA).
As principais contribuições deste trabalho são:
- A introdução do STA como um framework arquitetural para analisar a propagação de entrada estruturada em todo o Android.
- A documentação de 32 vetores reprodutíveis que abrangem as classes A (IPC/SavedState) e B (libminikin), com evidências técnicas completas.
- A correlação de comportamentos aparentemente independentes através da análise de caminhos de execução, em vez de comparação de sintomas.
- Evidência concreta (rastreamentos nativos de pilha de produção, referências a commits do AOSP, estatísticas de falhas no campo) que apoiam os achados mais graves, incluindo loops de falha remota do SystemUI (CVSS 8.6).
- A proposta de estratégias defensivas em camadas que abordam a amplificação ao nível arquitetural.
A Amplificação de Texto Estruturado não foi descoberta em um único experimento. Ela emergiu progressivamente através de meses de observação, engenharia reversa, divulgação responsável e validação empírica repetida. Os vetores documentados neste whitepaper devem ser entendidos não apenas como comportamentos isolados do software, mas como a base experimental a partir da qual o modelo STA foi derivado.
Se futuras pesquisas confirmarem, refinarem ou desafiarem este modelo, as observações subjacentes permanecem como evidências técnicas reprodutíveis.
Referências
- Chromium commit 3e62ece6 (LargePayloadSupport), Maio de 2026: chromium.googlesource.com/chromium/src/+/3e62ece6
- Google Issue Tracker 40879254 (2022): issuetracker.google.com/issues/40879254
- Google Issue Tracker 40268979 / ANR relacionado ao Samsung Chrome (2023): issuetracker.google.com/issues/40268979
- AOSP minikin repository: android.googlesource.com/platform/frameworks/minikin/
- androidx.savedstate 1.5.0 / Bug #425919375 (serialização SavedState)
- Android Open Source Project — FragmentManager, TaskPersister, WindowManager Shell
- Bulletins de Segurança do Android (notas históricas sobre ANR de esgotamento de recursos em Minikin)
- Lostmon — Amplificação de Texto Estruturado (STA), 23 Junho 2026: lostmon.blogspot.com/2026/06/structured-text-amplification-sta.html
- Lostmon — DoS algorítmico em libminikin.so, 24 Junho 2026: lostmon.blogspot.com/2026/06/algorithmic-dos-en-libminikinso.html
- Lostmon — libminikin: 10 anos de vulnerabilidade, 10 Julho 2026: lostmon.blogspot.com/2026/07/libminikin-10-anos-de-vulnerabilidad-en_0671440346.html
- Lostmon — Cronologia da investigação STA, 12 Julho 2026: lostmon.blogspot.com/2026/07/timeline-investigacion-sta-estilos.html
- Lostmon — Desafiar o Android do sofá, 17 Julho 2026: lostmon.blogspot.com/2026/07/desafiar-android-desde-el-sofa-y-un.html
Apêndice I — Corroboração Externa Adicional (Julho de 2026)
A Google reconheceu publicamente, em vários ciclos de versão do Android (4.4.2, 7.1, 8.1, 9.0), que o Minikin é vulnerável ao esgotamento de recursos ANR ativado por conteúdo de texto controlado pelo atacante. O fenômeno corresponde à categoria geral de falha documentada neste artigo (vetores STA-017 e relacionados).
O lançamento de segurança do Chrome em julho de 2026 contém várias vulnerabilidades que afetam componentes que se sobrepõem às superfícies arquiteturais analisadas neste trabalho, incluindo Views, Skia, Clipboard, Print Preview, WebView, UI e validação de entrada. Embora a Google não tenha vinculado publicamente essas correções ao Amplificação Estrutural de Texto (STA), a sobreposição funcional e a proximidade temporal sugerem que as áreas afetadas correspondem estreitamente aos caminhos de amplificação documentados nesta pesquisa. Esta observação deve ser interpretada como evidência corroborativa da relevância arquitetônica, não como prova.
Um artigo técnico em chinês independente (Volcengine, maio de 2026) descreve o mesmo sintoma prático do ponto de vista de desenvolvedores de aplicativos e recomenda truncar a entrada para um tamanho limitado entre 8 e 32 KB — consistente com o limite de 8192 unidades UTF-16 proposto aqui.
A versão androidx.savedstate 1.5.0 aborda parte da Classe A para consumidores AndroidX, mas não cobre SystemUI, TaskPersister, libminikin ou camadas OEM. Os vetores mais graves ainda exigem alterações no nível do AOSP.
Nota de referência CNA (INCIBE → MITRE). Em 14 de julho de 2026, a INCIBE (CSIRT nacional da Espanha e Autoridade de Numeração CVE) foi contatada para atribuição de CVE ao longo dos vetores STA documentados neste artigo. Após uma revisão interna, a INCIBE respondeu formalmente que os componentes afetados estão sob jurisdição do MITRE como CNA Top-Level Root para o ecossistema Google e encaminhou o caso conforme necessário. O whitepaper completo e as evidências de suporte serão enviadas ao MITRE após a divulgação pública (30 de julho de 2026).
Nota sobre atividade PoC externa. O pesquisador foi informado de um proof-of-concept público rastreado como CVE-2026-10702, supostamente abordando uma classe relacionada de comportamento de negação de serviço de renderização de texto no Android. Este artigo não verificou independentemente o conteúdo técnico do registro CVE ou confirmou uma sobreposição direta com os vetores STA-017 documentados aqui. É mencionado para contexto como um potencial ponto de dados independente na visibilidade geral desta classe de vulnerabilidade, não como evidência corroborativa dentro da cadeia de prova deste artigo.
Anexo II — Conduta de Fornecedores e Reconhecimentos: Xiaomi
Enquanto muitos fornecedores ou rejeitaram os relatórios através de classificações procedimentais ou ignoraram completamente, a Xiaomi demonstrou que é inteiramente possível:
- Reconhecer um problema sistêmico sem eximir-se da responsabilidade.
- Implementar mitigações OEM enquanto aguarda correções upstream do AOSP.
- Avaliar e apoiar o trabalho de pesquisadores de segurança independentes.
- Realizar uma divulgação responsável com transparência, profissionalismo e competência técnica.
Reconhecimentos
O comportamento vetorial em alto nível para STA-015 e STA-015b é documentado neste artigo por completo arquitetônico. No entanto, nomes específicos de componentes internos, rastreamentos de código proprietário e implementações exatas de patches foram intencionalmente retidos em respeito ao processo interno de patching da Xiaomi e conforme acordado com as práticas de divulgação responsável.
O pesquisador deseja expressar sincera gratidão à equipe de segurança da Xiaomi por sua profissionalismo, rigor técnico e compromisso em proteger sua base de usuários.
A Xiaomi demonstrou que é possível fazer a coisa certa — mesmo quando o problema subjacente origina-se além das camadas do seu próprio framework.
Amplificação Estrutural de Texto (STA)
Whitepaper Arquitetônico Completo + Técnico
© 2026 Manuel García Peña (Lostmon)
Divulgação pública: 30 de julho de 2026 · lostmon.blogspot.com

