CVE-2021-22204 – ExifTool RCE详细分析
漏洞分析 24877
最近在Hackerone上察看一个我最喜欢的漏洞赏金项目时,我发现他们正在使用ExifTool对上传的图片进行过滤。我曾多次使用ExifTool,但从未深入探究其原理,甚至不知道它是用什么语言编写的。在这个赏金项目里,他们使用了旧版本的ExifTool(11.70),虽然解析文件格式很难,但我想也许存在一些现有的CVE可以拿来使用。
在快速搜索后,我只找到一个2018年的旧CVE,因此我决定还是审计它的源代码。ExifTool是使用Perl写的,我之前从未审计过Perl,但它作为一种动态脚本语言,大部分的通用概念我都很熟悉。
我一开始想要寻找那些执行文件访问的地方,但并未获得成果,接着我开始搜索eval
,发现它被大量使用:
在Perl中,eval
有两种使用方式,eval BLOCK
和eval EXPR
,这就是它被大量使用的原因。忽略所有的eval BLOCK
后,我从剩下的结果中发现了一些有趣的东西,其中一个位于DjVu
模块的ParseAnt
方法中,我不知道DjVu
文件是什么,但ParseAnt
方法的注释写得非常详细。