FlawOpen

flawopen.com/Teardowns/cve-2026-105751-docling-odf-file-disclosure

● CVE-2026-105751 · CVSS v4 6.9 · Média
Pesquisa · FlawOpen

CVE-2026-105751: divulgação de arquivos no ODF do Docling

O backend ODF do Docling podia tratar a referência de uma imagem do documento como um caminho local e lê-lo fora do arquivo. Atualize para 2.120.3; a correção encaminha o carregamento pelo componente compartilhado de controle de recursos.

Vetor CVSSCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:H/VI:N/VA:N/SC:L/SI:N/SA:N
💡 Explicação em Linguagem Simples (ELI5)

Uma bibliotecária procura uma imagem dentro do álbum. Se não a encontra, o leitor defeituoso vai até um arquivo e abre o caminho escrito na etiqueta do álbum, sem verificar a regra da biblioteca que proíbe buscar arquivos locais. A correção faz o leitor usar o mesmo balcão protegido de recursos que os outros formatos de documento.

Conceitos Centrais e Termos

OpenDocument Format (ODF)
Família de formatos de escritório que inclui documentos de texto .odt. O Docling lê as referências de imagem do XML do documento.
draw:image
Elemento XML do ODF que descreve uma imagem. O valor xlink:href identifica o recurso.
xlink:href
Referência de recurso em um elemento de imagem ODF. É uma entrada do documento e não pode ser tratada como decisão de autorização do sistema de arquivos.
ImageResourceLoader
Carregador compartilhado de imagens do Docling. Aplica as opções de busca local e remota, o tratamento de caminhos e as verificações de segurança de URLs remotas.
enable_local_fetch
Opção que controla se os backends compatíveis podem buscar imagens locais. Um backend que ignora o carregador compartilhado também ignora esse controle.

Mapeamentos de frameworks

  • Referência CWE para a fraqueza descrita neste guia: CWE-22

Análise de Causa Raiz

Nas versões afetadas do Docling, _image_ref_from_odf_image() primeiro tentava localizar o recurso draw:image dentro do arquivo ODF. Se a busca não retornasse bytes, o fallback convertia o xlink:href controlado pelo documento diretamente em Path e chamava read_bytes() quando o caminho existia. Isso contornava o ImageResourceLoader compartilhado: o processamento ODF não aplicava enable_local_fetch, enable_remote_fetch nem as regras comuns de resolução de recursos. O filtro de tipo de imagem também aceitava uma extensão vazia, permitindo caminhos sem extensão. A leitura pode ocorrer antes da decodificação da imagem; a divulgação no documento resultante é demonstrada quando os bytes podem ser decodificados como imagem. O aviso do fornecedor documenta leitura arbitrária de arquivos locais e divulgação de conteúdo de imagem nos formatos de saída do Docling, limitando esta última a imagens decodificáveis. O CVE trata de um documento fornecido que é convertido por um processo com acesso a arquivos locais; não demonstra que toda implantação Docling seja acessível remotamente. A correção encaminha referências externas para ImageResourceLoader.load_image_data(), sem caminho-base local, propaga o carregador pela travessia ODF e remove a extensão vazia das extensões de imagem aceitas. O carregador compartilhado nega a busca local por padrão e exige um caminho-base confinado se a busca local for ativada. A CNA do GitHub atribui CVSS 4.0 6.9 Moderado (UI:A); não o descreva como exploração remota não autenticada sem um serviço e um caminho de conversão adicional alcançáveis.

Fluxo de Ataque Passo a Paso

Passo 1

Um documento entra no caminho de conversão ODF

A entrada relevante é um arquivo OpenDocument processado pelo Docling 2.107.0 a 2.120.2. O problema está no backend de imagens ODF, não em todos os formatos Docling nem em toda integração HTML/RAG.

Passo 2

A referência de imagem vem do XML do documento

O elemento ODF draw:image fornece um xlink:href. Primeiro, o Docling procura esse recurso dentro do arquivo.

Passo 3

Uma parte ausente no arquivo cai em um caminho do host

Quando a busca interna falha, o helper vulnerável usava a mesma referência como Path e a lia diretamente. O fallback não consultava a opção de busca local compartilhada nem confinava o caminho ao arquivo.

Passo 4

O Docling processa os bytes como recurso de imagem

A leitura do sistema de arquivos ocorre antes da decodificação. Se o conteúdo for uma imagem compatível, os bytes podem ser incorporados ao DoclingDocument e às exportações HTML, Markdown ou JSON.

Passo 5

O carregador corrigido restaura o limite de recursos

O Docling 2.120.3 encaminha referências ODF externas pelo ImageResourceLoader, não fornece caminho-base local e exclui referências sem extensão das extensões de imagem aceitas. Mantenha a busca local desativada ao converter documentos não confiáveis.

Código-Fonte: Vulnerável vs. Seguro

São trechos pontuais do código upstream, não uma correção independente. O patch cria ImageResourceLoader com as opções enable_local_fetch e enable_remote_fetch do backend, o repassa ao processamento ODF e encaminha referências externas ao carregador. Com base_path=None, caminhos locais são recusados mesmo quando a busca local foi ativada explicitamente, pois o carregador não consegue estabelecer um diretório confinado. O patch também rejeita extensões de imagem vazias. Atualize para 2.120.3 ou posterior em vez de copiar apenas este trecho.

Trecho de origem: docling/backend/opendocument_backend.py — trecho específico do código-fonte

IMPLEMENTAÇÃO VULNERÁVEL
# Um recurso ausente do arquivo caía no caminho controlado pelo documento.
if image_data is None and image_url:
    image_path = Path(image_url)
    if image_path.is_file():
        image_data = image_path.read_bytes()
PATCH SEGURO E ROBUSTO
# Caminho corrigido: usar o carregador compartilhado configurado com as opções do backend.
if image_data is None and image_url and image_loader is not None:
    image_data = image_loader.load_image_data(image_url, base_path=None)

Lista de Verificação de Segurança para Engenharia

Fontes