[-] 软件链接:
http://www.joomla.org/
[-] 受影响的版本:
版本 4.1.0 和之前的版本。
版本 3.10.6 和之前的版本。
[-] 漏洞描述:
该漏洞位于
/libraries/vendor/joomla/archive/src/Tar.php script. Specifically, into the JoomlaArchiveTar::extract() method:
代码语言:javascript复制113. $this->getTarInfo($this->data);
114.
115. for ($i = 0, $n = count($this->metadata); $i < $n; $i )
116. {
117. $type = strtolower($this->metadata[$i]['type']);
118.
119. if ($type == 'file' || $type == 'unix file')
120. {
121. $buffer = $this->metadata[$i]['data'];
122. $path = Path::clean($destination . '/' .
$this->metadata[$i]['name']);
123.
124. // Make sure the destination folder exists
125. if (!Folder::create(dirname($path)))
126. {
127. throw new RuntimeException('Unable to create destination
folder ' . dirname($path));
128. }
129.
130. if (!File::write($path, $buffer))
131. {
132. throw new RuntimeException('Unable to write entry to file ' .
$path);
133. }
134. }
135. }
漏洞的存在是因为上述代码使用
Tar 存档中的文件名(在第 122 行创建的 $path 变量)
通过在第 130 行使用 File::write() 写入提取的文件,没有正确
验证目标路径。这可以被利用来执行 Zip
Slip(或路径遍历)攻击和写入/覆盖任意文件,
可能导致执行任意 PHP 代码或其他
危险影响。在 Joomla!核心,成功利用此
漏洞需要管理员权限。但是,
可能有第三方组件使用
JoomlaArchiveArchive::extract() 方法。在这种情况下,这也
可能被未经身份验证的攻击者利用,具体取决于
上下文。
[-] 解决方案:
升级到版本 3.10.7、4.1.1 或更高版本。