Definição
XML External Entity é um recurso da linguagem XML que permite a um documento buscar conteúdo fora dele, como arquivos do servidor ou endereços de rede. O termo também nomeia a vulnerabilidade XXE: quando um sistema lê XML sem proteção, um invasor pode usar esse recurso para ler arquivos internos, acessar redes privadas ou travar o serviço.
Também conhecido como: XXE, XML External Entity, Entidade externa XML, Ataque XXE, Vulnerabilidade XXE, Injeção de entidade externa XML
O que é uma entidade externa no XML?
No XML, uma entidade funciona como um apelido que é trocado por um conteúdo quando o documento é lido. Ela é declarada em um trecho opcional no início do arquivo, chamado DTD (Document Type Definition).
A entidade é chamada de externa quando esse conteúdo não está escrito no próprio documento. Em vez disso, ela aponta para um caminho de arquivo ou para um endereço de rede. Ao ler o XML, o programa responsável, chamado parser, vai até esse local, busca o conteúdo e o insere no documento.
O recurso foi criado para reaproveitar trechos de texto entre documentos. Hoje quase não é usado em integrações comuns, mas muitas bibliotecas de leitura de XML ainda o deixam ativo por padrão.
Como funciona um ataque XXE?
O invasor envia ao sistema um XML com uma entidade externa maliciosa. Ela pode apontar, por exemplo, para um arquivo de configuração do servidor que guarda senhas. Se o parser resolver essa entidade, o conteúdo do arquivo passa a fazer parte do documento e pode aparecer em uma resposta, em um log ou em uma mensagem de erro.
A entidade também pode apontar para endereços da rede interna da empresa. Assim, o servidor faz requisições em nome do invasor, que consegue acessar serviços que não estão expostos na internet. Outra variação faz o parser ler recursos que nunca terminam, o que consome memória e derruba a aplicação.
Por que XXE importa para quem processa XML fiscal?
Os documentos fiscais eletrônicos brasileiros, como NF-e, NFC-e, CT-e, MDF-e e muitos padrões de NFS-e, são arquivos XML. ERPs, plataformas de venda e marketplaces leem esses arquivos o tempo todo: ao importar notas de fornecedores, ao receber documentos pela distribuição de DF-e ou ao processar retornos de uma API fiscal.
Muitos desses arquivos vêm de terceiros. Um XML enviado por upload em uma tela de importação, por exemplo, pode ter sido manipulado. Se o sistema que o lê não estiver protegido, a importação de uma simples nota pode virar uma porta de entrada para vazamento de certificados digitais, chaves de API ou dados de clientes.
Como proteger um sistema contra XXE?
A medida principal é configurar o parser para não processar DTD nem resolver entidades externas. Os layouts oficiais dos documentos fiscais não dependem de DTD, então rejeitar qualquer XML que traga essa declaração costuma ser seguro e não afeta notas legítimas.
Validar o arquivo contra o esquema XML oficial (XSD) ajuda a recusar estruturas inesperadas, mas não basta sozinho, porque a entidade pode ser resolvida durante a leitura, antes da validação. Por isso, a validação deve ser combinada com a configuração segura do parser.
Também ajudam manter as bibliotecas de XML atualizadas, limitar o tamanho dos arquivos aceitos, rodar o serviço com o mínimo de permissões possível e restringir o acesso dele à rede interna.
Qual a diferença entre XXE e outros ataques com XML?
O XXE explora entidades que buscam conteúdo fora do documento. Já o ataque conhecido como Billion Laughs usa entidades internas que se repetem umas dentro das outras, fazendo o documento crescer de forma explosiva na memória até travar o sistema. As proteções se sobrepõem: desativar o processamento de DTD bloqueia os dois.
A injeção de XML é outro problema: o invasor insere trechos de marcação em campos de texto para alterar a estrutura do documento gerado. Ela se previne tratando corretamente os dados antes de montar o XML, e não na configuração do parser.
Exemplos de XML External Entity
- Um ERP permite que o cliente envie XMLs de NF-e de compra para dar entrada no estoque. Um arquivo adulterado traz uma entidade externa apontando para o arquivo de configuração do servidor, e o conteúdo aparece no campo de observações exibido na tela.
- Durante uma auditoria de segurança, a equipe descobre que a biblioteca usada para ler os retornos de NFS-e de prefeituras resolvia entidades externas por padrão e altera a configuração para rejeitar qualquer XML com DTD.
- Um marketplace que recebe CT-e de transportadoras parceiras passa a limitar o tamanho dos arquivos e a bloquear declarações de DTD depois que um XML malicioso esgotou a memória do serviço de importação.
- Uma software house revisa o código que lê a distribuição de DF-e e acrescenta um teste automatizado que envia um XML com entidade externa para garantir que ele seja recusado.
Perguntas frequentes
XXE é um defeito da NF-e ou da SEFAZ?
Não. XXE é uma falha na forma como um sistema lê XML. O risco está no software que processa o arquivo, como um ERP ou um importador de notas, quando ele usa um parser mal configurado.
Validar o XML pelo esquema oficial impede XXE?
Não totalmente. A entidade externa pode ser resolvida durante a leitura, antes da validação. A proteção eficaz é desativar o processamento de DTD e de entidades externas no parser, usando a validação por esquema como camada adicional.
Bloquear DTD pode impedir a leitura de notas fiscais legítimas?
Em geral, não. Os layouts oficiais dos documentos fiscais eletrônicos não usam DTD, então um XML fiscal legítimo não precisa dessa declaração para ser lido corretamente.
Quais sistemas devem se preocupar com XXE?
Qualquer sistema que leia XML vindo de fora: importadores de notas de fornecedores, integrações com prefeituras e SEFAZ, serviços de distribuição de DF-e e telas de upload de arquivos fiscais.
Atualizado em · Como produzimos este glossário
