A Ledgerline encaminha uma solicitação de suporte de um funcionário através de uma API de assistente, um provedor de modelo e uma ferramenta de reembolso. Um chamado no Jira continha texto solicitando o reembolso de um cliente; o assistente tratou esse texto como uma instrução e, em seguida, o executor da ferramenta utilizou uma conta de serviço de pagamentos compartilhada para realizar a operação. O solicitante não tinha permissão para reembolsos, mas o backend não verificou o solicitante no momento da execução da ação. Não foi necessário o uso de malware ou credenciais roubadas. O texto não confiável do chamado entrou no fluxo do agente e alcançou uma operação privilegiada que a aplicação já havia disponibilizado.
Essa falha combina injeção de prompt — onde texto não confiável altera o comportamento da aplicação orientado pelo modelo — com agência excessiva, situação em que a aplicação confere a esse comportamento uma autoridade que excede os direitos do funcionário que originou a solicitação. A OWASP classifica esses problemas como LLM01 (Injeção de Prompt) e LLM06 (Agência Excessiva) em suas diretrizes de 2025, publicadas pelo projeto OWASP GenAI Security em novembro de 2024. O texto do prompt não pode autorizar um reembolso, pois o modelo produz apenas texto; é o servidor que decide se uma ação de pagamento será executada.
O reembolso foi processado porque a Ledgerline permitiu que uma solicitação atravessasse várias fronteiras de confiança sem preservar a identidade de quem a originou. Uma mensagem de funcionário não é confiável. Um documento de suporte recuperado não é confiável, mesmo que tenha sido armazenado pela própria Ledgerline. O resultado de uma ferramenta constitui uma entrada não confiável para a próxima chamada do modelo. A saída do modelo também não é confiável, pois uma ação de reembolso proposta não comprova que o funcionário tem permissão para realizá-la.
A API do assistente autentica o funcionário antes de montar o prompt. A autorização de recuperação restringe os documentos ao tenant e aos direitos de acesso do funcionário antes que o texto do documento seja incorporado ao prompt. O executor da ferramenta recebe a identidade autenticada e os parâmetros solicitados e, então, aplica a política de ação antes de contatar o sistema de pagamentos. O registro de auditoria armazena a identidade, a ação solicitada, a decisão e o resultado. O provedor do modelo gera uma ação candidata, mas nunca concede a permissão. O caminho da solicitação torna visível cada limite:
O fluxo separa o processamento de texto da autoridade. A autenticação pode rejeitar um solicitante desconhecido, a recuperação de dados pode impedir o acesso a um registro de cliente não autorizado e o controle de acesso à ferramenta pode recusar um reembolso, mesmo quando o modelo o recomenda fortemente. Um registro de auditoria não impede a ação, mas permite que a Ledgerline determine qual principal (entidade autenticada), decisão de política e parâmetros geraram o resultado.
Como cada ponto de verificação rejeita falhas diferentes, a Ledgerline retorna um contrato de status estável, em vez de tratar toda negação como um erro do modelo. 401 Unauthorized (Não Autorizado) indica que a solicitação apresenta uma credencial ausente, inválida, revogada ou comprometida. 403 Forbidden (Proibido) indica que um funcionário autenticado não possui o escopo necessário — por exemplo, ao solicitar um reembolso sem ter autoridade para tal ou ao tentar recuperar dados fora de suas permissões.
Outras etapas utilizam resultados mais específicos:
409 Conflict (Conflito) indica que a primeira solicitação utilizando uma chave de idempotência ainda está em execução.422 Unprocessable Content (Conteúdo Não Processável) indica que a saída do modelo não estava em conformidade com o esquema de ação exigido pela Ledgerline, ou que uma chave de idempotência foi reutilizada com parâmetros diferentes.429 Too Many Requests (Muitas Solicitações), acompanhado de Retry-After, indica que um tenant (cliente/inquilino) esgotou um limite de taxa ou de gastos.503 Service Unavailable (Serviço Indisponível) indica que a Ledgerline não consegue aplicar um contador obrigatório ou que um circuit breaker (disjuntor) aberto bloqueia uma chamada ao provedor.504 Gateway Timeout (Tempo Limite do Gateway) indica que o provedor do modelo excedeu o prazo limite da Ledgerline.Um código de status identifica o ponto de verificação que tomou a decisão. Se uma consulta de cliente for negada antes da montagem do prompt, a Ledgerline retorna 403 Forbidden; nenhum documento recuperado chega ao provedor. Se um reembolso proposto contiver parâmetros malformados, o servidor retorna 422 Unprocessable Content antes que o executor da ferramenta contate o sistema de pagamentos. Esses resultados transformam a recusa em um comportamento observável do backend, em vez de apenas uma frase em um prompt do sistema.
Regra de autoridade Uma identidade de serviço compartilhado pode transportar uma solicitação, mas não deve substituir o principal do funcionário utilizado para autorizar a ação.
O incidente inicial é um caso de “confused deputy” (agente confundido). O executor de reembolsos da Ledgerline detinha amplos poderes de serviço e utilizou essa autoridade em nome de um funcionário que não possuía a permissão correspondente. A API de pagamentos pode até validar a credencial de serviço da Ledgerline, mas não consegue recuperar o direito de acesso ausente do funcionário, a menos que a Ledgerline transmita e verifique a identidade desse agente (principal). Mover o controle para uma etapa anterior, como a montagem do prompt, deixa o texto subsequente, os resultados da ferramenta e a saída do modelo livres para alterar a ação proposta.
O ponto de controle confiável é o manipulador da ferramenta no servidor, onde a Ledgerline dispõe de ambos os dados necessários para a decisão: a identidade autenticada do funcionário e os parâmetros concretos do reembolso. Regras de prompt podem orientar o comportamento do modelo, e o provedor pode retornar uma chamada de ferramenta candidata, mas nenhum desses mecanismos aplica efetivamente a política de autorização da Ledgerline. Qual etapa deve interromper primeiro o reembolso do chamado do Jira: as regras de prompt, o modelo, o manipulador da ferramenta ou a API de pagamentos?