Bem-vindo de volta ao Sherlock's Vulnerability Spotlight, onde destacamos uma vulnerabilidade impactante descoberta durante uma auditoria Sherlock. Esta semana, temos o Deposit Spoofing. Foi descoberto por @0xalpharush & @bernd_eth no @zetablockchain Cross-Chain Contest. 🧵
Aqui está o resumo da vulnerabilidade de @bernd_eth: 1. Os observadores da ZetaChain monitorizam transações em cadeias externas (por exemplo, Ethereum, Solana) e adicionam-nas a um rastreador centralizado de entradas para processá-las como depósitos e retiradas, assumindo o sucesso da transação. 2. Ao contrário da integração EVM, a implementação da Solana ignora as verificações de sucesso da transação, permitindo que um observador malicioso adicione depósitos falhados, cunhando SOL ZRC20 sem lastro e drenando fundos transferidos. 3. Apesar de os observadores serem explicitamente autorizados pela ZetaChain, é crucial garantir que nenhuma única parte possa comprometer a cadeia ou desviar ativos.
Normalmente, os observadores não processam transações falhadas, mas este caminho de código não realiza a mesma validação que o seu equivalente EVM. Embora isso exija um papel "privilegiado", cada validador é um observador, e o consenso BFT deve ser tolerante a byzantinos, ou seja, tolerar <1/3 de partes maliciosas. Assim, um observador malicioso não deve ser capaz de forjar um depósito e induzir validadores honestos a votar para cunhar ZRC20 Sol para transações falhadas através do rastreador de entrada, que carece de validações para a sua implementação em Solana.
A causa raiz desta vulnerabilidade: A função ProcessInboundEvents não exige que uma transação tenha sido bem-sucedida, ao contrário do observador de entrada EVM, que faz isso corretamente aqui. Como a instrução é decodificada como se tivesse sido bem-sucedida, um observador malicioso pode falsificar um depósito para todo o saldo ZRC20-SOL e, em seguida, retirar o SOL bloqueado no lado Solana da ponte, roubando todos os lamports na ponte. Este ataque também poderia ser usado para retirar tokens SPL ou realizar depósitos e chamadas arbitrárias. Por exemplo, remover a propriedade gravável do PDA do gateway na instrução de depósito resulta em uma transação falhada (veja o erro de restrição do âncora no POC), e ainda pode ser processada uma vez adicionada ao rastreador de entrada via MsgAddInboundTracker.
Condições prévias internas: Um observador malicioso ou negligente adiciona uma transação Solana falhada que contém instruções de Gateway ao rastreador de entrada usando MsgAddInboundTracker, resultando em todos os validadores processando e votando para cunhar ZRC20 Sol na Zetachain. O CCTX recebe votos suficientes, e ZRC20 Sol não garantido na Zetachain é cunhado.
Condições Pré-exteriores: Qualquer parte envia uma transação falhada para o gateway com uma instrução de depósito (ou depósito e chamada). O destinatário do ZRC20 Sol na Zetachain retira-o e recebe lamports na Solana.
O Caminho do Ataque: 1) Qualquer parte envia uma transação falhada para o gateway com uma instrução de depósito (ou depósito e chamada). 2) Um observador malicioso ou negligente adiciona uma transação falhada do Solana que contém instruções do Gateway ao rastreador de entrada usando MsgAddInboundTracker, resultando em todos os validadores processando e votando para cunhar ZRC20 Sol na Zetachain. 3) A tarefa ProcessInboundTrackers faz com que o CCTX falsificado receba votos suficientes, e ZRC20 Sol não garantido na Zetachain é cunhado. 4) O destinatário do ZRC20 Sol na Zetachain retira-o e recebe lamports no Solana.
Qual é o impacto? Todos os lamports e tokens SPL depositados na ponte Solana podem ser roubados, uma vez que os depósitos podem ser forjados para qualquer quantia (eles são processados apesar do programa Gateway causar a reversão das transações).
A Mitigação: No processamento do rastreador de entrada do Solana Observer, verifique se a transação foi bem-sucedida antes de votar nela.
Estamos orgulhosos de ter ajudado a garantir a @zetablockchain através desta descoberta. Quando precisa absolutamente de ser seguro, Sherlock é a escolha certa.
13,18K