Como encontrar e corrigir a vulnerabilidade crítica de dia zero de WebP CVE-2023-4863
5 de outubro de 2023
0 minutos de leituraNo 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
:
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.
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 era8,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:
Identifique onde você usa a
libwebp
Atualize para a
libwebp
1.3.2 ou superiorMonitore 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 libwebp
gratuitamente 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 dalibwebp
.
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.
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ão1.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 dalibwebp
na versão1.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 Container. Exemplo: 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.
Mantenha a segurança dos aplicativos que usam a libwebp
A Snyk oferece solicitações de pull de correção com um clique para aplicativos que usam a libwebp
como dependência direta ou transitiva.