#dusk $DUSK @Dusk $BTC 11 hosts queries compartilhavam o mesmo wrapper. Oito tinham o mesmo risco de desserialização.
Isso me fez olhar com mais atenção.
O contrato controlava os bytes. O nó era quem os lia. Um ponteiro relativo malformado poderia empurrar o host para uma leitura fora dos limites. A partir daí, o problema não estava mais contido dentro do contrato.
O que chamou minha atenção foi a correção.
A Dusk não corrigiu oito queries separadamente. Ela corrigiu a fronteira compartilhada e valida os dados arquivados antes de desserializá-los.
Essa ordem importa.
Valide primeiro. Desserialize depois.
Não havia um workaround útil do lado do usuário aqui. A própria fronteira precisava ser corrigida e, como o mesmo wrapper servia 11 queries, corrigir essa camada cobriu todo o grupo.
O teste é simples. Alimente dados arquivados malformados nessas queries. O nó deve rejeitá-los antes que o wrapper tente interpretar os bytes.
Isso me fez olhar com mais atenção.
O contrato controlava os bytes. O nó era quem os lia. Um ponteiro relativo malformado poderia empurrar o host para uma leitura fora dos limites. A partir daí, o problema não estava mais contido dentro do contrato.
O que chamou minha atenção foi a correção.
A Dusk não corrigiu oito queries separadamente. Ela corrigiu a fronteira compartilhada e valida os dados arquivados antes de desserializá-los.
Essa ordem importa.
Valide primeiro. Desserialize depois.
Não havia um workaround útil do lado do usuário aqui. A própria fronteira precisava ser corrigida e, como o mesmo wrapper servia 11 queries, corrigir essa camada cobriu todo o grupo.
O teste é simples. Alimente dados arquivados malformados nessas queries. O nó deve rejeitá-los antes que o wrapper tente interpretar os bytes.