1. Você executa ` zebrad` até e incluindo ` v 4.4.1 `. 2. O seu nó aceita P de entrada 2 Conexões P (`network.listen_addr` está definido, que é o padrão). 3. O mempool do seu nó está ativo (o nó está sincronizado perto da ponta da cadeia). Todas as configurações padrão são afetadas. O mapa de `cancel_handles` do mempool para download retém entradas para transações cuja verificação se realiza no exterior `RATE_LIMIT_DELAY` ( 73 - segundo) limite. O erro `tokio::time:::Error::Elasted` não carrega carga útil, então o ID da transação é irrecuperável e a entrada correspondente `cancel_handles` (incluindo o `Gossip::Tx(UnminedTx)` completo, até ~ 2 MB) nunca é removido. As entradas acumulam monotonicamente sem nenhuma coleção de lixo ou limite superior, levando a uma eventual terminação do processo fora de memória.
`Baixe::poll_next()` em ` zebrad/ src/components/ mempool/downloads.rs: 215 - 228 ` manipula três estados terminais para uma tarefa de verificação: - `Ok(Ok(((())'): sucesso. Chama `cancel_handles. remove(&tx.transaction.id)`. Correto. - `Ok(Err((...))`: erro de verificação. Chama `cancel_handles. remove(&hash)`. Correto. - `Err(elasced)`: tempo de saída externo. Devolve "Err(elasced)" sem remover nada. **Bug.** ` tokio::time:::error::Elasted` não tem carga útil, por isso a transação cronometrada ` UnminedTxId` é irrecuperável do erro. O consumidor em ` zebrad/ src/ components/ mempool.rs: 663 - 672 ` reconhece explicitamente esta lacuna com um comentário do TODO.
Os únicos caminhos de limpeza para ` cancel_handles` são ` cancel( mined_ids)` (remueva entradas que correspondam aos IDs de transação minada; as transações com atacantes nunca são minadas) e ` cancel_all()` (limpe tudo no desligamento ou reinicio da cadeia). Não existe GC periódico, não há despejo baseado no tempo e não existe um cap de contagem. Para os empurrões diretos `tx` (`Gossip::Tx`), a entrada retenida contém a transação deserializada completa, que pode ser até ~ 9 MB em memória para uma transação perto do extremo de saída transparente. Taxa de vazamento por conexão no pior dos casos: ~ 685 KB/ s (~ 2.4 GB/ hora). A correção preserva o `UnminedTxId` através do caminho de erro de tempo de saída: enrole o futuro de tempo de saída para que o erro externo da tarefa gerada carregue o txid (por exemplo, `Err(((txid, decorrido))'). Em `Downloads::poll_next()`, no braço timeout, chame `cancel_handles.remove(&txid)`.
Não há solução de nível de configuração. Reinicializando o nó elimina os itens acumulados. Os operadores que executam em ambientes limitados à memória (containers com limites de cgroup) podem ver o processo morto pelo assassino do OOM antes da recuperação natural. Gradualmente, a exaustão de memória não limitada de um nó Zebra de P não autenticado 2 Tráfego P. O vazamento é monotônico (os entries nunca são liberados sob operação normal) mas lento (~ 685 KB/ s por conexão, caso pior). Um atacante deve manter o tráfego por horas para exaustar a memória típica do servidor. O nó continua funcionando normalmente até que a pressão da memória se torne crítica, quando o assassino do OS OOM termina o processo ou o nó se degrada devido à pressão de troca. Sem impacto de consenso, sem perda de fundos, sem corrupção no disco.
Reportado por `@ AnticsDecodificado` através de uma submissão privada de GitHub Security Advisory. Trabalhando em E 2 E reprodução em um nó de retest ao vivo com dependências de transacções entre pai e filho. Registro de aconselhamento: GHSA- 65 jj- fmw 8 - 468 q. Identificadores relacionados: CVE- 2026 - 52734.
Tempo: GitHub Advisory Database publicou este registro em 2026 - 07 - 02 T 20: 12: 35.000 Z e lista a sua última modificação como 2026 - 07 - 02 T 20: 12: 35.000 Z. Gravidade: MODERAR. Dados de pontuação publicados: CVSS_V 3: CVSS: 3.1 /AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L.
Software afetado e informações de versão: pacote cattes.io zebrad — ECOSISTEM: introduzido 0, corrigido 4.5.0. Classificação e evidência: identificadores de fraqueza CWE- 401. O registro contém 4 suporte de referências nestes tipos: WEB, PACKAGE.