Joomla!4.1.0 Zip Slip 文件覆盖/路径遍历

2022-04-21 11:44:21 浏览数 (1)

[-] 软件链接:

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 或更高版本。

0 人点赞