Falha crítica no Grist-Core permite execução remota de código por fórmulas de planilha

Falha crítica no Grist-Core permite execução remota de código por fórmulas de planilha

A vulnerabilidade CVE-2026-24002 afeta instâncias self-hosted configuradas com sandbox pyodide e permite que documentos maliciosos acionem processos no servidor.

ComponenteGrist-Core, versão open-source e self-hosted do Grist, quando a execução de fórmulas Python usa o sandbox pyodide.
VetorAbertura de um documento malicioso contendo fórmula Python capaz de escapar do isolamento quando GRIST_SANDBOX_FLAVOR está definido como pyodide.
ImpactoExecução remota de código no servidor que hospeda o Grist, com possibilidade de executar processos, acessar arquivos sensíveis e expor credenciais de banco de dados ou chaves de API.
PrioridadeAtualizar para Grist 1.7.9 ou posterior e evitar o uso de pyodide sem isolamento adicional em ambientes com fórmulas não confiáveis ou semiconfiáveis.
VersõesA correção foi disponibilizada na versão 1.7.9, publicada em 9 de janeiro de 2026.
MitigaçãoComo contenção temporária, operadores devem usar o sabor de sandbox gvisor e não habilitar GRIST_PYODIDE_SKIP_DENO com valor 1.
Resumo técnico

Uma vulnerabilidade crítica no Grist-Core, identificada como CVE-2026-24002 e avaliada com CVSS 9.1, permite que fórmulas de planilha ultrapassem o limite esperado do sandbox e alcancem execução de código no servidor. O problema recebeu o codinome Cellbreak e está ligado ao modo como fórmulas Python são executadas em instâncias self-hosted que utilizam pyodide como mecanismo de isolamento. A falha transforma uma superfície que deveria executar lógica de célula em um caminho para execução no ambiente hospedeiro, desde que a instância esteja configurada com o sabor vulnerável de sandbox e um usuário abra um documento malicioso.

O Grist-Core é usado como uma combinação de planilha relacional e banco de dados, o que torna a fronteira entre lógica de documento e infraestrutura do servidor especialmente sensível. Fórmulas em planilhas podem ser tratadas por operadores como conteúdo de dados, mas, nesse caso, a execução ocorre em um contexto capaz de interagir com camadas mais profundas quando o isolamento falha. A correção foi lançada na versão 1.7.9, em 9 de janeiro de 2026, e altera o comportamento padrão ao mover a execução de fórmulas Pyodide para o runtime JavaScript Deno. O risco retorna se o operador definir explicitamente GRIST_PYODIDE_SKIP_DENO como 1, configuração que deve ser evitada quando documentos ou fórmulas não são totalmente confiáveis.

Fluxo técnico

A vulnerabilidade está na execução de fórmulas Python dentro do Pyodide, uma distribuição Python executada sobre WebAssembly. O objetivo desse desenho é permitir que código Python seja avaliado em um ambiente isolado, reduzindo a exposição do servidor que hospeda a aplicação. O problema é que o isolamento usado pelo Grist, quando baseado em uma abordagem de bloqueio por lista, não impede todas as rotas de acesso a recursos internos. A exploração descrita depende de navegação pela hierarquia de classes do Python e da disponibilidade de ctypes, combinação que permite alcançar funções do runtime Emscripten que não deveriam estar acessíveis a partir de uma célula de fórmula.

Quando esse caminho é acionado por uma fórmula maliciosa, a execução deixa de se restringir ao cálculo de dados da planilha. O invasor pode provocar execução de comandos no sistema operacional ou acionar JavaScript no runtime hospedeiro. Em uma instância vulnerável, a abertura do documento é a condição operacional relevante: se GRIST_SANDBOX_FLAVOR estiver configurado como pyodide, o conteúdo do documento pode ser usado para iniciar processos arbitrários no servidor do Grist. O impacto confirmado inclui acesso ao sistema de arquivos e exposição de segredos disponíveis ao processo, como credenciais de banco de dados e chaves de API presentes no ambiente da aplicação.

A falha se enquadra como escape de sandbox do Pyodide e compartilha uma classe de risco já observada em outra plataforma de automação afetada por CVE-2025-68668, também associada a quebra de isolamento em superfície de execução. A comparação técnica importante não é a identidade do produto, mas o padrão de arquitetura: quando uma plataforma aceita lógica fornecida por usuários e a executa perto de recursos privilegiados, o sandbox precisa limitar capacidades de forma positiva, não depender apenas de bloqueios pontuais. No Grist-Core, a fronteira esperada entre lógica de célula, runtime de fórmula e execução no host deixa de ser suficiente sob a configuração vulnerável.

Superfície afetada

A superfície exposta é formada por instâncias self-hosted do Grist-Core que permitem execução de fórmulas Python com pyodide. A verificação operacional indicada é consultar a seção de sandbox no painel administrativo da instância. Quando o painel mostra gvisor, a instância não se enquadra na condição vulnerável descrita. Quando mostra pyodide, a instância precisa ser atualizada para a versão corrigida ou reconfigurada para um mecanismo de isolamento não afetado. Ambientes em que usuários importam, compartilham ou abrem documentos criados por terceiros têm maior exposição prática, porque o gatilho depende de uma fórmula maliciosa embutida no documento.

A presença de segredos no mesmo contexto do processo do Grist amplia o impacto. Credenciais de banco de dados, chaves de API, arquivos locais acessíveis ao usuário do serviço e configurações carregadas por variáveis de ambiente ficam dentro do conjunto de ativos que precisam ser revisados após suspeita de exploração. O risco de movimentação para outros sistemas deve ser tratado como condicionado aos privilégios reais do serviço, às permissões no sistema de arquivos, aos segredos disponíveis e à conectividade da instância com bancos, integrações e serviços internos.

  • Instâncias Grist-Core self-hosted com GRIST_SANDBOX_FLAVOR definido como pyodide.
  • Documentos que contenham fórmulas Python fornecidas por usuários não confiáveis ou semiconfiáveis.
  • Servidores em que o processo do Grist tem acesso a arquivos sensíveis, credenciais de banco de dados ou chaves de API.
  • Ambientes que habilitem GRIST_PYODIDE_SKIP_DENO com valor 1 após a correção, reintroduzindo a condição de risco.
Hunting e telemetria

A investigação deve começar pela configuração do sandbox e pelo histórico de abertura ou importação de documentos em instâncias afetadas. Como a condição de exploração envolve uma fórmula que alcança execução no host, a telemetria útil está no cruzamento entre eventos do Grist, criação de processos pelo serviço, leituras anômalas de arquivos e acesso incomum a segredos. O foco não deve ser procurar apenas uma string específica de payload, mas identificar comportamento incompatível com cálculos normais de planilha: execução de processos filhos, chamadas ao runtime hospedeiro, acesso a arquivos fora do diretório esperado da aplicação e uso inesperado de credenciais após a abertura de documentos.

Em endpoints e servidores, defensores devem comparar a linha de base do processo do Grist antes e depois da abertura de documentos suspeitos. Processos iniciados pelo serviço, acessos a caminhos contendo configurações sensíveis e leituras de arquivos relacionados a credenciais merecem análise. Em bancos de dados e serviços integrados, vale correlacionar horários de abertura de documentos com autenticações incomuns, consultas fora do padrão e uso de chaves de API. A ausência de um indicador único no contexto torna a correlação temporal e comportamental mais importante do que listas de IoCs.

  • Eventos administrativos indicando sandbox pyodide em instâncias self-hosted.
  • Criação de processos filhos inesperados pelo serviço que executa o Grist.
  • Leituras de arquivos sensíveis pelo usuário do processo da aplicação.
  • Uso anômalo de credenciais de banco de dados ou chaves de API após abertura de documentos.
  • Documentos recentemente importados ou compartilhados contendo fórmulas Python incomuns.
Mitigação

A ação principal é atualizar o Grist-Core para a versão 1.7.9 ou posterior. Essa versão muda a execução de fórmulas Pyodide para ficar sob o runtime Deno por padrão, reduzindo a exposição do caminho vulnerável. Após a atualização, a configuração deve ser validada explicitamente, porque a proteção pode ser enfraquecida se GRIST_PYODIDE_SKIP_DENO for definido como 1. Em ambientes com documentos recebidos de terceiros, colaboração ampla ou fórmulas criadas por usuários sem confiança total, essa opção não deve ser usada.

Como medida temporária antes da atualização, operadores devem configurar o sandbox para gvisor, que foi indicado como condição não afetada na verificação administrativa. A resposta também deve incluir revisão de segredos disponíveis ao processo do Grist, rotação de credenciais expostas ao ambiente da aplicação quando houver suspeita de exploração e análise de arquivos acessados pelo serviço. A mitigação completa exige tratar a falha como quebra de isolamento de execução, não apenas como erro de validação de entrada: permissões de sistema de arquivos, escopo de chaves de API, conectividade com bancos e contas de serviço precisam ser reduzidos ao necessário.

Depois da correção, a validação deve confirmar três pontos: versão instalada, sabor de sandbox efetivo e ausência da configuração que ignora o isolamento via Deno. Em paralelo, ambientes que aceitam fórmulas de usuários devem revisar o modelo de confiança de documentos, restringir quem pode importar conteúdo, registrar eventos de abertura de arquivos e manter telemetria suficiente para vincular documentos a comportamento de processo. Esse controle reduz o impacto de futuras falhas de sandbox em superfícies que executam lógica fornecida por usuários.

  • Atualizar para Grist-Core 1.7.9 ou posterior.
  • Confirmar no painel administrativo se o sandbox está como gvisor ou em configuração corrigida.
  • Evitar GRIST_PYODIDE_SKIP_DENO com valor 1 em ambientes com fórmulas não confiáveis.
  • Revisar e rotacionar credenciais acessíveis ao processo do Grist quando houver suspeita de exploração.
  • Restringir permissões do serviço, acesso a arquivos locais e escopo de chaves de API usadas pela aplicação.

Postar um comentário

0 Comentários