BinlogDownloadQueue.saveFile() 通过恶意 tar 条目进行任意文件写入
作者: AAtomical创建于 2026年8月17日更新于 2026年8月17日
环境
- 运河版本:最新主人
- MySQL版本:无
QQ 问题描述
`BinlogDownload Quee.saveFile ()' 具有道向(Tar Slip)的脆弱性。 Tar条目名称直接传递到"新文件(parentFile,名称+".tmp")",而没有任何路径验证(228–229行):
贾瓦 字符串名称 = tarArchiveEntry.getName (); 文件 tarFile = 新文件(父文件,名称+ ".tmp" );
名为 "./././tmp/pwned.txt " 的柏油条目在目标目录外写作。 Canal 自动下载 binlogs 和SSL 校验在同一流中被禁用("NoopHostnameVerifier",所有信任的"SSLContext"),所以MITM是微不足道的.
* 复制步骤
1. 制作有转弯条目的焦油:`../././tmp/pwned.txt'
2. 提供给`saveFile ()' 提取逻辑
3. 文件写入取出目录以外的 " /tmp/pwned.txt " 。
* 预期行为
拒绝逃离目标目录的条目 :
贾瓦
字符串犬科Dest = parentFile.get CanonicalPath (); ; 鼠标学主题
弦犬形花序 = tarFile. get CanonicalPath (); 花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花序花
如果 (! canonical File. startsWith( canonicalDest + File. 分隔符)) {
扔出新的 IO 例外 ("目标目录外的“ ” 和“ 名称” );
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?实际行为
任意文件写入文件系统中的任何路径 。 与 PoC 验证——用攻击者控制的内容写出外部提取目录的标记文件.
<img宽="1662"高="336" alt="Image" src="https://GitHub.com/user-attachments/assets/101a9bd7-c05a-4e35-911e-0cca76fb8b82"/
内容来源: alibaba/canal