Atributos personalizados permitem injeção SQL nos filtros de atendimento
Os filtros de conversas e contatos inseriam diretamente na consulta SQL os valores enviados no campo values ao comparar atributos date ou number com is_greater_than ou is_less_than. Um invasor autenticado podia extrair informações por consultas que alteravam o tempo de resposta, inclusive de outros espaços de atendimento. Havia também um segundo caminho: uma chave attribute_key malformada, gravada na definição do atributo, entrava na expressão de consulta ao JSON sem parametrização. Esse vetor funcionava independentemente do tipo do atributo.
Casos de uso afetados
- Você mantém espaços de atendimento de diferentes clientes na mesma instalação. Um invasor com acesso autenticado a um deles pode consultar conversas e informações pessoais de contatos pertencentes aos demais.
- A instalação utiliza filtros por atributos de data ou número. Mesmo sem esses atributos previamente definidos, o invasor pode criar um pelo endpoint de definições e acionar as comparações vulneráveis.
- Um atributo personalizado possui uma chave preparada para alterar a consulta. Ao filtrar por essa chave, o invasor pode alcançar a tabela global users e extrair emails, hashes bcrypt de senhas e tokens de acesso, além de credenciais de integração armazenadas no banco.
Confira na sua instância
Confirme a versão que está atendendo às requisições e revise os registros de POST /api/v1/accounts/{account_id}/conversations/filter e POST /api/v1/accounts/{account_id}/contacts/filter. Nos corpos registrados, examine values nas comparações is_greater_than e is_less_than de atributos date ou number. Consulte também custom_attribute_definitions.attribute_key e procure chaves com aspas, parênteses, espaços ou outros caracteres de sintaxe SQL. Relacione essas chaves às requisições de criação em POST /api/v1/accounts/{account_id}/custom_attribute_definitions e aos filtros que as utilizaram. A ausência desses sinais nos registros disponíveis não comprova que houve ausência de exploração.
Versões afetadas e correções
| Linha | Afetadas | Corrigidas |
|---|---|---|
| Chatwoot | >= 2.2.0 | 4.11.2 |
A correção usa consultas parametrizadas e restringe o formato de attribute_key. O aviso orienta atualizar para 4.11.2 e informa que não existe alternativa confiável à atualização. Restringir os endpoints de filtro no proxy reverso ou no firewall de aplicação pode reduzir a exposição. Remover atributos date e number e impedir novas definições também é uma medida parcial, pois o vetor pela chave independe do tipo. Havendo suspeita de exploração, revise e substitua os tokens e as senhas possivelmente expostos. O comunicado confirma leitura por injeção SQL cega, mas informa que a combinação ActiveRecord/PostgreSQL não permite executar comandos UPDATE ou DELETE por consultas encadeadas nesse caminho. Identificador adicional: CVE-2026-44706.
