Prefixos semelhantes permitem acesso indevido ao KV de outro namespace
O Kestra verifica a relação entre namespaces com startsWith, sem exigir o ponto que separa os níveis da hierarquia. Por isso, um fluxo em prod2 pode ser considerado descendente de prod, embora os dois sejam namespaces distintos. Essa comparação dispensa a consulta a Allowed Namespaces e permite ler entradas por meio da função kv() com namespace explícito. A tarefa io.kestra.plugin.core.kv.Set usa a mesma verificação sem uma checagem adicional de permissão, permitindo também gravar ou sobrescrever entradas no namespace de destino.
Casos de uso afetados
- Você restringe o namespace prod no Kestra Enterprise, mas um desenvolvedor autorizado a criar ou executar fluxos em prod2 pode acessar entradas do KV de prod, mesmo sem autorização no destino. A leitura indevida pode expor tokens armazenados nessas entradas.
- Um fluxo executado em company.team2 pode usar a tarefa io.kestra.plugin.core.kv.Set para alterar entradas de company.team. Quando essas entradas guardam a posição de processamento da sua integração, a sobrescrita pode modificar o estado usado nas próximas execuções.
Confira na sua instância
Confira a edição e a versão em execução e compare-as com as correções da linha que você utiliza. No Enterprise, examine Allowed Namespaces no destino e procure pares como prod2/prod ou company.team2/company.team. Revise os fluxos desses namespaces e identifique chamadas a kv() com namespace explícito e tarefas io.kestra.plugin.core.kv.Set direcionadas ao namespace restrito. Na homologação, use entradas descartáveis para conferir se a leitura e a escrita são recusadas para um fluxo sem autorização no destino. Repita a conferência com um namespace sem prefixo comum, como other, para comparar as recusas. Uma leitura recusada pela tarefa kv.Get, isoladamente, não confirma a correção dos caminhos kv() e kv.Set.
Versões afetadas e correções
| Linha | Afetadas | Corrigidas |
|---|---|---|
| kestra-io/kestra-ee 2.0 | >= 0.18.0 | 2.0.0-rc13 |
| kestra-io/kestra-ee 1.3 | >= 0.18.0 | 1.3.36 |
| kestra-io/kestra-ee 1.0 | >= 0.18.0 | 1.0.58 |
O comunicado confirmou o defeito em testes com componentes simulados, sem registrar uma reprodução HTTP em uma instalação Enterprise. O desvio de autorização descrito depende das restrições de namespace dessa edição. A edição OSS não possui essa separação de permissões. As tarefas kv.Get, kv.Delete e kv.GetKeys fazem uma checagem adicional, e a função secret() não usa o desvio descrito. As faixas da API foram preservadas literalmente, inclusive a ausência de limite superior.
