Skip to main content

Como encontrar e corrigir a vulnerabilidade crítica de dia zero de WebP CVE-2023-4863

feature-fix-webp-vuln

5 de outubro de 2023

0 minutos de leitura

No mês passado, duas vulnerabilidades críticas (CVE-2023-4863 e CVE-2023-5129) foram identificadas pela Apple Security Engineering and Architecture (SEA) em colaboração com o The Citizen Lab da Munk School da University of Toronto. As vulnerabilidades envolviam imagens de WebP adulteradas que exploravam navegadores baseados no Chromium e a biblioteca webmproject/libwebp fornecida pelo Google. Consulte o post anterior do blog para saber mais sobre a vulnerabilidade e seu histórico recente.

Em particular, a vulnerabilidade da libwebp vai além dos navegadores e afeta ecossistemas de desenvolvedores, sistemas operacionais e contêineres. Estes são todos os diferentes ecossistemas e contêineres que identificamos como afetados pela libwebp:

blog-webp-fix-chart

Como você pode ver, ela é detectada em vários ecossistemas de desenvolvedores como dependência direta e transitiva, o que demonstra a amplitude do impacto dessa vulnerabilidade. Ela é encontrada principalmente como dependência transitiva em projetos de Cocoapods, Swift e Python, o que pode dificultar a conscientização dos desenvolvedores sobre o impacto. Contudo, tanto o Snyk Container quanto o Snyk Open Source são capazes de detectar os pacotes relevantes. Você pode usar gratuitamente a Snyk agora mesmo para determinar quais projetos incorporam esses pacotes.

blog-webp-fix-deps

Realizamos uma análise abrangente do impacto da libwebp, mas os especialistas em segurança ainda estão pesquisando os diferentes usos da libwebp em aplicativos, ecossistemas e sistemas operacionais. Como a vulnerabilidade afeta componentes de software que usam codecs de imagem .webp e renderizam seu conteúdo (como navegadores, ferramentas de design etc.), o escopo continuará crescendo. Portanto, é essencial acompanhar as últimas notícias sobre a libwebp.

O objetivo deste post é explicar o impacto dessa vulnerabilidade nos ecossistemas de software e servir como uma referência rápida para abordá-la.

Em 3 de outubro de 2023, as CVEs conhecidas que rastreavam ativamente essa vulnerabilidade da libwebp incluíam:

  • CVE-2023-4863: aberta em 11 de setembro de 2023 com pontuação CVSS de 9,6 e EPSS de 31,86% (97º percentil). Observação: a pontuação original desta CVE era 8,8 ("Alta") antes da divulgação de mais detalhes. 

  • CVE-2023-5129: aberta em 25 de setembro de 2023 com uma pontuação CVSS de 10 (a mais alta possível). Rejeitada posteriormente em 27 de setembro de 2023 pelo Google, a Autoridade de Numeração de CVE atribuída, como duplicata.

Consulte o post anterior do blog para saber mais sobre a vulnerabilidade e seu histórico recente. Neste post, vamos explorar estas recomendações de correção:

  1. Identifique onde você usa a libwebp

  2. Atualize para a libwebp 1.3.2 ou superior

  3. Monitore projetos usando o suporte a solicitação automática de pull

1\. Identifique onde você usa a libwebp

O maior desafio da abordagem de uma vulnerabilidade de dia zero é determinar se e onde ela afetará você. O caso da libwebp não é diferente. A libwebp pode ser encontrada como dependência direta ou indireta (como dependência transitiva) dentro do seu projeto. A identificação é essencial para abordar o problema corretamente, pois é bastante provável que o seu projeto esteja afetado de algum modo, mesmo que você ainda não saiba. Estas são algumas áreas afetadas: 

  • Todos os softwares em desenvolvimento que dependam da biblioteca libwebp de forma direta ou indireta via dependências transitivas.

  • Todos os softwares de codificação e/ou decodificação de imagens .webp.

  • Todos os sistemas operacionais ou imagens de contêiner que contenham um pacote de ferramentas para manipulação de imagens .webp.

O uso da biblioteca libwebp subjacente pelas linguagens de programação de alto nível contribui para a ampla disseminação dessa vulnerabilidade nos ecossistemas de desenvolvedores. Por exemplo, o GoDot Game Engine, adotado na criação de jogos 2D e 3D, usa a biblioteca libwebp, e a popular ferramenta FFmpeg também usa a biblioteca libwebp.

Detecção da vulnerabilidade da libwebp com a Snyk

Há várias maneiras de detectar a vulnerabilidade da libwebpgratuitamente usando a Snyk. Na Snyk CLI, é possível testar localmente os projetos:

  • Para aplicativos, execute snyk test --unmanaged na Snyk CLI para comparar dependências não gerenciadas no repositório a fim de detectar pacotes individuais e suas vulnerabilidades.

  • Para contêineres, execute snyk container test para detectar pacotes do sistema operacional que usam versões vulneráveis da libwebp.

Você também pode verificar todos os projetos nos seus repositórios do Git para obter um relatório de todas as dependências diretas e transitivas em uso. Neste relatório, você pode consultar se usa a libwebp e em quantos caminhos no seu gráfico de dependências ela é adotada. Além disso, é possível fazer uma pesquisa rápida por "CVE-2023-4863" em todos os projetos. 

blog-webp-fix-report

2a. Atualize para a libwebp 1.3.2 ou superior (código aberto)

  • Correção automática: conecte a Snyk aos seus repositórios do Git para realizar solicitações de pull e atualizar o gráfico de dependências onde for possível. Em seguida, recompile o aplicativo.

  • Correção manual: se você usa a libwebp como dependência direta no aplicativo, é possível atualizar diretamente o arquivo de dependências para a versão 1.3.2 ou superior. Em seguida, recompile o aplicativo.

  • Correção manual: se você usa a libwebp como dependência transitiva no aplicativo, identifique uma versão da dependência direta que acesse a dependência transitiva da libwebp na versão 1.3.2 ou superior. Em seguida, recompile o aplicativo.

2b. Atualize para a libwebp 1.3.2 ou superior (contêiner)

  • Correção automática: conecte a Snyk aos seus repositórios do Git para realizar solicitações de pull e atualizar a imagem de base do Dockerfile onde for possível. Verifique se a atualização sugerida da imagem de base ainda contém a vulnerabilidade usando https://snyk.io/test/docker/<image_name>. Quando identificar um caminho de atualização aceitável, recrie o contêiner.

  • Correção manual: se a imagem inclui uma versão vulnerável da libwebp e uma atualização da imagem de base não estiver disponível ou não for desejada, você mesmo pode atualizá-la usando as orientações de correção do Snyk ContainerExemplo: em uma imagem baseada no Debian, caso a CLI do Snyk Container relate o seguinte:

✗ High severity vulnerability found in libwebp/libwebpdemux2
Description: Out-of-bounds Write
Info: https://security.snyk.io/vuln/SNYK-DEBIAN12-LIBWEBP-5918869
Introduced through: imagemagick@8:6.9.11.60+dfsg-1.6, imagemagick/libmagickcore-dev@8:6.9.11.60+dfsg-1.6, libwebp/libwebp-dev@1.2.4-0.2, libwebp/libwebp7@1.2.4-0.2
From: imagemagick@8:6.9.11.60+dfsg-1.6 > imagemagick/imagemagick-6.q16@8:6.9.11.60+dfsg-1.6 > imagemagick/libmagickcore-6.q16-6@8:6.9.11.60+dfsg-1.6 > libwebp/libwebpdemux2@1.2.4-0.2
From: imagemagick/libmagickcore-dev@8:6.9.11.60+dfsg-1.6 > imagemagick/libmagickcore-6.q16-dev@8:6.9.11.60+dfsg-1.6 > librsvg/librsvg2-dev@2.54.7+dfsg-1~deb12u1 > gdk-pixbuf/libgdk-pixbuf-2.0-dev@2.42.10+dfsg-1+b1 > tiff/libtiff-dev@4.5.0-6 > libwebp/libwebp-dev@1.2.4-0.2 > libwebp/libwebpdemux2@1.2.4-0.2
From: imagemagick@8:6.9.11.60+dfsg-1.6 > imagemagick/imagemagick-6.q16@8:6.9.11.60+dfsg-1.6 > imagemagick/libmagickcore-6.q16-6@8:6.9.11.60+dfsg-1.6 > libwebp/libwebpmux3@1.2.4-0.2
and 4 more...
Fixed in: 1.2.4-0.2+deb12u1

Você pode adicionar algo assim para atualizar manualmente a biblioteca:

RUN apt-get update && \
    apt-get install -y libwebp-dev=1.2.4-0.2+deb12u1 && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

3\. Monitore projetos usando o suporte a solicitação automática de pull

Devido à natureza dessa vulnerabilidade de dia zero, novos impactos são descobertos diariamente. Por isso, é importante monitorar os projetos de forma ativa e regular para obter novas recomendações de correção. Se você usa a Snyk, verifique se seus projetos estão sendo monitorados (configuração ativada por padrão na importação de um repositório para o aplicativo da Snyk). Isso significa que a Snyk testará automaticamente os projetos todos os dias, além dos testes realizados quando você fizer atualizações.

Esses testes diários identificarão automaticamente quando for possível melhorar a segurança, incluindo onde novas correções podem ser aplicadas. Por exemplo, se você usa a libwebp como dependência transitiva do pacote A, o pacote A precisa lançar uma versão que use a libwebp versão 1.3.2 ou superior. Talvez ela não esteja disponível hoje, mas pode ser lançada amanhã ou na semana que vem. O snyk monitor verificará diariamente para você e enviará uma solicitação de pull quando a nova atualização estiver disponível, atualizando a versão da libwebp para corrigir a vulnerabilidade.

Também é importante lembrar que a Snyk usará solicitações de pull ou outros mecanismos para avisar quando correções forem feitas nessa vulnerabilidade ou quando forem encontrados novos vetores de ataque que ocasionem outras vulnerabilidades. Desse modo, você é a primeira pessoa a saber como agir caso surjam mais problemas.

feature-fix-webp-vuln

Quer experimentar?

Find out which types of vulnerabilities are most likely to appear in your projects based on Snyk scan results and security research.