Libwebp 是谷歌提供用于编码和解码 WebP 格式图像的库,作为 WebP 规范的参考实现。WebP 在 Google Chrome、Safari、Firefox、Edge、Opera 浏览器以及许多其他工具和软件库中被原生支持,在客户端、服务端均有使用。
此前我们分析了 libwebp 漏洞(CVE-2023-4863/CVE-2023-5129)的影响,其利用难度高,但影响较为广泛。从漏洞公开以来,不少企业安全团队着手排查存在 libwebp 依赖的软件,下游软件厂商也在积极升级版本,陆续发布了不少受影响的安全通告。
libwebp堆缓冲区溢出漏洞影响分析
墨菲安全实验室,公众号:墨菲安全实验室CVE-2023-5129 libwebp堆缓冲区溢出漏洞影响分析
从实际环境来看,需要排查的对象往往是已经编译构建后的应用、制品,缺少源码,二进制排查难度较高。
因此我们开源了针对该漏洞的快速排查工具,基于特征字符串可以快速从运行进程打开的文件中、目标文件中识别是否存在 libwebp 依赖,便于进一步排查影响应用和影响组件。
项目地址:
https://github.com/murphysecurity/libwebp-checker
使用方式
[可选]通过 token 加载哈希数据
通过 --token 指定 token
https://www.murphysec.com/console中设置-访问令牌,可以下载云端的哈希数据,用于直接匹配我们已经识别过的文件结果,节省分析时间
指定扫描模式
-
通过 -f 参数扫描指定目录路径
bash libwebp-checker.sh --token xxx -f /path_you_want_scan/
-
通过 -p 参数扫描当前服务器的所有进程文件
bash libwebp-checker.sh --token xxx -p
查看结果
命令行会打印受影响的文件名、进程 ID 以及匹配到的特征关键字,如WebPCopyPlane,便于后续进一步定位和修复。
工具原理
1. CVE-2023-4863漏洞影响libwebp 0.5.0-1.3.1版本,通过对进程打开的文件、扫描目标应用目录下的文件进行解压提取、分析,识别是否存在受影响版本libwebp。
2. 针对RPM包、jar/war/aar包会进行解压提取,而后通过strings、fgrep等方式对二进制文件进行特征查找。
3. libwebp 0.5.0版本开始新增了WebPCopyPlane和WebPCopyPixels函数作为导出函数,漏洞缺陷函数为VP8LBuildHuffmanTable,因此可以在文件中匹配这些特征函数名,从而识别识别有漏洞的libwebp。
4. 1.3.2安全版本新增了VP8LHuffmanTablesAllocate函数,如果目标文件在编译的时候没有经过strip去掉符号表,其也可作为版本判断依据。
效果
通过对进程扫描可以发现存在libwebp依赖的典型软件:
微信: /Applications/WeChat.app/Contents/MacOS/WeChat
钉钉: /Applications/DingTalk.app/Contents/MacOS/DingTalk
企业微信: /Applications/企业微信.app/Contents/PlugIns/imageformats/libqwebp.dylib
腾讯会议: /Applications/TencentMeeting.app/Contents/Frameworks/WeMeetFramework.framework/Versions/3.19.22.429/PlugIns/imageformats/libqwebp.dylib
通过对maven中央仓库中的组件进行分析,我们发现以下java组件中也包含了libwebp的动态链接库:
ai.edgestore:engine
app.cash.paparazzi:layoutlib-native-linux
app.cash.paparazzi:native-linux
cn.ellabook:flutter-saassdk
cn.ellabook:saassdk
cn.fly2think:SmartPanorama
cn.fly2think:SmartPanoramaX
cn.rongcloud.sdk:fu_beautifier
com.aiyaapp.aiya:AyEffectSDK
com.computinglaboratory:opencv
com.criteo:jvips
com.eworkcloud.starter:ework-cloud-starter-image
com.eworkcloud:ework-cloud-starter-image
com.facebook.fresco:webpsupport
com.facebook.spectrum:spectrum-webp
com.freeletics.fork.paparazzi:layoutlib-native-linux
com.github.gotson:webp-imageio
com.github.jenly1314.WeChatQRCode:opencv-armv64
com.github.jenly1314.WeChatQRCode:opencv-armv7a
com.github.jenly1314.WeChatQRCode:opencv-x86
com.github.jenly1314.WeChatQRCode:opencv-x86_64
com.github.usefulness:webp-imageio
com.github.zjupure:webpdecoder
com.innov8tif.okaycam:opencv
com.innov8tif.okayid:opencv
com.scanzy:ScanzyBarcodeScannerSDK
com.waicool20.skrypton:skrypton-native-linux64
de.marcreichelt:webp-backport
de.sg-o.lib:opencv
id.mob:api-client
io.bitbucket.mobscannersdk:customdocscannerlib
io.bitbucket.mobscannersdk:docscannerlib
io.github.anylifezlb:slientEngine
io.github.darkxanter:webp-imageio
io.github.greycode:ocrlite
io.github.humbleui:skija-linux
io.github.humbleui:skija-linux-x64
io.github.izuiyou:octoflutter
io.github.jiemakel:octavo-assembly_2.12
io.github.zumikua:webploader-desktop
io.johnsonlee.layoutlib:native-linux
io.tiledb:tiledb-cloud-java
net.ifok.image:webp4j
org.demen.android.opencv:opencv
org.demen.android.opencv:opencv-img
org.demen.android.opencv:opencv_world
org.godotengine:godot
org.jetbrains.skiko:skiko-awt-runtime-linux-arm64
org.jetbrains.skiko:skiko-awt-runtime-linux-x64
org.jetbrains.skiko:skiko-jvm-runtime-linux-arm64
org.jetbrains.skiko:skiko-jvm-runtime-linux-x64
org.lucee:sejda-webp
org.openpnp:opencv
org.pireco:kypsdk
org.robolectric:nativeruntime-dist-compat
org.sejda.imageio:webp-imageio
org.sejda.webp-imageio:webp-imageio-sejda
science.aist:aistcv
局限性
libwebp-checker只是个在快速排查的小工具,还存在很多局限,包括:
-
当前shell实现针对MacOS/Linux环境,解压提取只适配了rpm、jar/war/aar包,其他打包格式没有提取。 -
从当前识别方式上会存在漏报,主要是如果对libwebp重新封装则可能不存在原本的导出函数、缺陷函数和已修复版本如果去除了符号则不能识别。 -
包含受影响版本的libwebp,并不意味着漏洞可被触发,还需要进一步的漏洞可达性分析
因此开源排查工具也是为了抛砖引玉,欢迎大家交流,分享更好的思路。
【关于墨菲安全】
【关于墨菲安全实验室】
原文始发于微信公众号(墨菲安全实验室):libwebp漏洞(CVE-2023-4863)快速排查工具
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论