libtorrent是很多桌面应用和嵌入式设备都在使用的开源C++ bittorrent库 。 libtorrent没有正确的过滤多文件模式的路径名,在src/torrent_info.cpp中对目录组件所执行的唯一检查就是对".."的检查: 184:for (int i = 0, end(p->list_size()); i < end; ++i) 185:{ 186:if (p->list_at(i)->type() != lazy_entry::string_t) 187:return false; 188:std::string path_element = p->list_at(i)->string_value(); 189:if (path_element != "..") 190:target.path /= path_element; 191:} 如果攻击者在.torrent文件的路径元素中包含了目录遍历序列的话,就可以创建或覆盖任意文件。
libtorrent是很多桌面应用和嵌入式设备都在使用的开源C++ bittorrent库 。 libtorrent没有正确的过滤多文件模式的路径名,在src/torrent_info.cpp中对目录组件所执行的唯一检查就是对".."的检查: 184:for (int i = 0, end(p->list_size()); i < end; ++i) 185:{ 186:if (p->list_at(i)->type() != lazy_entry::string_t) 187:return false; 188:std::string path_element = p->list_at(i)->string_value(); 189:if (path_element != "..") 190:target.path /= path_element; 191:} 如果攻击者在.torrent文件的路径元素中包含了目录遍历序列的话,就可以创建或覆盖任意文件。