Pillow, a biblioteca de imagens mais usada com Python, pode ser levada a executar comandos do sistema operacional em um servidor por meio do nome de um arquivo que recebe para abrir.
A falha, CVE-2026-112900 (sigla de Common Vulnerabilities and Exposures, ou Vulnerabilidades e Exposições Comuns), está na forma como a Pillow trata imagens EPS (sigla de Encapsulated PostScript). Essas imagens são abertas com o envio do nome do arquivo para o Ghostscript, um programa separado que a biblioteca executa para transformar a imagem em pixels, sem verificar antes o nome do arquivo.
O Ghostscript pode interpretar como instruções um nome escolhido por um atacante, em vez de tratá-lo como arquivo, e apontar para um segundo arquivo que contém os comandos a serem executados. Os mantenedores da Pillow corrigiram o problema na versão 13.0.0, lançada em 16 de outubro.
A Pillow aparece em quase todos os lugares em que o Python lida com imagens: formulários de envio de arquivos na web, ferramentas de avatar e miniaturas, pipelines de documentos e de PDF (sigla de Portable Document Format, ou Formato de Documento Portátil), e a maioria dos projetos de aprendizado de máquina a utiliza. A OX Security, empresa cujo relatório chamou atenção para as falhas, estima que a biblioteca seja baixada cerca de 436 milhões de vezes por mês.
A versão 13.0.0 é uma grande atualização de segurança, com correções em quatro níveis de gravidade, de baixo a crítico, sendo que duas delas são classificadas como críticas pelos mantenedores. Não há registro de que alguma das falhas esteja sendo explorada por atacantes.
O problema está no nome do arquivo, e não na imagem. “A falha é acionada pelo nome do arquivo, e não por nada no documento PostScript”, diz o aviso de segurança, o que significa que um arquivo EPS inofensivo ainda pode causar danos quando um atacante define seu nome. Por isso, os alvos mais realistas são os pontos de envio que mantêm ou montam o nome de um arquivo armazenado a partir de dados fornecidos pelo usuário.
A falha só atinge o Ghostscript em servidores que têm o programa gs instalado, o que a Pillow exige para abrir arquivos EPS. Ela afeta versões da Pillow da 2.6.0 até a 12.3.0.
Os mantenedores classificam a falha como moderada, porque o atacante precisa controlar o nome do arquivo. O registro de CVE atribuído pelo GitHub a classifica com nota 9,2 de 10 e a marca com a mesma condição.
Duas das correções estão na faixa “crítica” mais alta dos mantenedores. Uma delas é um erro de memória separado, descrito nas notas de lançamento como dados de imagem antigos reutilizados após uma mudança de modo. A outra trata de duas falhas de estouro de buffer na decodificação de JPEG (sigla de Joint Photographic Experts Group) da Pillow.
Uma dessas falhas de JPEG, no formato FlashPix (FPX), mostrou ser capaz de executar um comando do atacante com uma única chamada a Image.open() sobre um arquivo manipulado, desde que o pacote opcional olefile esteja instalado. A Pillow reconhece esses arquivos pelo conteúdo, e não pela extensão. Por isso, um servidor que abre arquivos enviados por usuários não confiáveis pode ser atingido sem qualquer ação do usuário.
A outra falha, a CVE-2026-112403, provoca estouro de um buffer de memória quando um programa gera uma miniatura de um JPEG sem perdas manipulado. O aviso de segurança relata uma queda do programa, e não execução de código. O erro foi “encontrado pela Anthropic usando o Claude para estudar a segurança de softwares de código aberto, e validado manualmente pela Ada Logics”, diz o aviso, parte de um esforço mais amplo da empresa, que já identificou centenas de falhas em bibliotecas de código aberto.
Uma terceira falha, a CVE-2026-112393, existe na Pillow desde 2013. Ela provoca estouro de um buffer de memória quando um programa salva uma imagem TIFF comprimida na memória, em vez de em um arquivo no disco. Esse é um padrão comum em serviços que recodificam um arquivo enviado e o devolvem ao usuário. Segundo o aviso, os pesquisadores conseguiram derrubar o processo com ela e só a transformaram em execução de código com a ajuda de uma segunda falha, separada, que vazava endereços de memória. Salvar em um arquivo real no disco não é afetado.
Os registros de CVE atribuídos pelo GitHub dão às falhas de EPS, TIFF e de miniatura de JPEG a nota 9,2 de 10, uma classificação crítica. Cada uma depende de condições que a nota não considera, e as classificações dos próprios mantenedores para o conjunto vão de moderada a crítica. Nos registros de CVE, os analistas da CISA (Agência de Segurança Cibernética e de Infraestrutura dos EUA) não identificam exploração conhecida da falha de EPS e apontam uma prova de conceito pública para a falha de TIFF.
O que fazer
Atualize para a Pillow 13.0.0, que corrige todas essas falhas, e recrie quaisquer contêineres, pacotes wheel ou imagens base que incluam uma cópia mais antiga. A Pillow 13 deixa de oferecer suporte ao Python 3.10, então instalações que ainda usam o 3.10 também precisam migrar para o Python 3.11 ou uma versão mais recente.
Até que seja possível atualizar, o guia de segurança da Pillow e os avisos indicam medidas que bloqueiam cada um dos caminhos de ataque:
- EPS / Ghostscript: mantenha o programa gs fora de qualquer servidor que processe arquivos enviados por usuários não confiáveis, e nunca passe para Image.open() um nome de arquivo controlado pelo atacante ao abrir imagens EPS.
- Miniaturas JPEG: evite draft() e thumbnail() em JPEGs de origem não confiável, chame load() antes, ou passe reducing_gap=None.
- TIFF: trate o salvamento de um TIFF em um buffer na memória, como io.BytesIO, como um caminho sensível quando a imagem tiver vindo de um usuário.