当前位置:C++技术网 > 资讯 > 过去一周安装 PyTorch 的请注意!漏洞宛如一枚“重磅炸弹”

过去一周安装 PyTorch 的请注意!漏洞宛如一枚“重磅炸弹”

更新时间:2023-01-04 14:39:19浏览次数:4+次

  如果说一年前的 Log4j2 漏洞宛如一枚“重磅炸弹”,席卷整个互联网圈,那么 2023 年的开春第一“炸”,则来自 PyTorch。
 
  12 月 31 日,PyTorch 官方团队紧急发布了一则通知——《2022 年 12 月 25 日至 12 月 30 日期间,PyTorch-nightly 依赖链被破坏》,并呼吁只要在此期间通过 pip 在 Linux 上安装 PyTorch-nightly 的开发者,请立即卸载此依赖项和 torchtriton,并使用最新的二进制文件。
 
过去一周安装 PyTorch 的请注意
 
  PyTorch-nightly 依赖链被破坏
 
  作为一门开源的 Python 机器学习库,PyTorch 在计算机视觉、自然语言处理等维度都有较深的应用,它在商业和学术领域都获得了突出的地位。根据《2022 中国开源贡献度报告》显示,PyTorch 超越 TensorFlow,成为最为主流的国际开源项目。因此,今日的稍有不慎,将影响很多应用程序。
 
  国际开源项目TOP 50
 
  具体该漏洞发现的起因源于 12 月 30 日下午 4:40 左右,PyTorch 团队发现一个恶意软件包被上传到 Python 包索引(PyPI)代码库,这个包的名字和该团队在 PyTorch-nightly 索引上发布的包相同。
 
  由于 PyPI 索引具有优先权,这个恶意软件包可以直接被安装。
 
  简单来看,PyTorch 识别出一个与框架“torchtriton”库同名的恶意依赖项。当开发者在 Python 生态系统中获取依赖项时,PyPI 索引具有优先权,这导致恶意软件包通常会优先于 PyTorch 官方的合法包被安装到用户的设备或软件中。
 
  PyTorch 官方团队在博客中解释道,「由于 PyPI 索引优先,因此会导致用户安装了恶意软件包,而不是官方存储库中的版本。这种设计会导致某些人能够注册与第三方索引中存在的软件包同名的软件包,并且 pip 将默认安装其版本」。
 
  用于道德研究?
 
  根据官方披露的信息显示,PyPI 上的 torchtriton 包含了恶意的 triton 二进制文件。它的 SHA256 哈希列表在
 
  PYTHON_SITE_PACKAGES/triton/runtime/triton 位置。
 
  SHA256(triton)= 2385b29489cd9e35f92c072780f903ae2e517ed422eae67246ae50a5cc738a0e
 
  这个二进制文件的主要函数会执行以下操作:
 
  获取系统信息
 
  名称服务器来自/etc/resolv.conf
 
  主机名来自gethostname
 
  当前用户名来自getlogin
 
  当前工作目录名称来自getcwd
 
  环境变量
 
  读取以下文件:
 
  /etc/hosts
 
  /etc/passwd
 
  前 1,000 个文件$HOME/*
 
  $HOME/.gitconfig
 
  $HOME/.ssh/*
 
  通过加密的DNS查询将所有这些信息,包括文件内容,上传到域名*.h4ck[.cfd,使用DNS服务器 wheezy[.io]。
 
  该二进制文件的上传功能仅限于大小小于 99,999 字节的文件。它也只上传 $HOME 中的前 1000 个文件(但.ssh目录中的所有文件<99,999字节)。
 
  迅速排查
 
  值得注意的是,PyTorch 团队表示,PyTorch 稳定软件包的用户不受此问题的影响。
 
  想要排除自己的 Python 环境是否受到影响,可以通过以下命令在 torchtriton 包 中搜索恶意二进制文件,通过
 
  PYTHON_SITE_PACKAGES/triton/runtime/triton,并打印出你当前的 Python 环境是否受到影响 :
 
  python3 -c "import pathlib;import importlib.util;s=importlib.util.find_spec('triton'); affected=any(x.name == 'triton' for x in (pathlib.Path(s.submodule_search_locations[0] if s is not None else '/' ) / 'runtime').glob('*'));print('You are {}affected'.format('' if affected else 'not '))"
 
  恶意二进制文件在导入 triton 包时执行,这需要显式代码才能执行,而不是 PyTorch 的默认行为。
 
  如果受到影响,可以通过以下命令进行卸载:
 
  $ pip3 uninstall -y torch torchvision torchaudio torchtriton$ pip3 cache purge
 
  当然,截至目前,PyTorch 团队已将“torchtriton”依赖项重新命名为“pytorch-triton”,并在 PyPI 上保留了一个虚拟包以防止类似的攻击。
 
  不过根据外媒 BleepingComputer 报道,恶意的“torchtriton”依赖项在过去一周内已超过 2,300 次下载,很多用户下载了恶意软件却不自知,因此,早些做好检测与防范也是对软件安全负责。