記事一覧に戻る
vulnerability2026年5月20日20分で読めます

Microsoft公式の`durabletask`(PyPI)が侵害された——Azure Durable Functions開発者は今すぐ確認を、AWSとGCPの認証情報も狙われている

2026年5月19日、Microsoft公式のdurabletask Python SDK(PyPI)に3つの不正バージョンが公開された。28KBのペイロードがAWS / Azure / GCP / Kubernetesの認証情報をまとめて窃取するMini Shai-Hulud Here We Go Again キャンペーンの最新ターゲット。

MicrosoftAzureAWSPyPIDurable FunctionsMini Shai-Huludサプライチェーン攻撃Safe ChainTeamPCP

5月19日。Azureで動くPythonワークフローを書いている人にとって、不吉な日になった。

Microsoftが公式に出しているdurabletask Python SDK——つまり Azure Durable Functions や Durable Task Scheduler で使うあれ ——のPyPIパッケージに、マルウェアを仕込まれた3つのバージョンが公開された。

「自分はAzureしか使ってないから他は関係ない」と思った人にこそ読んでほしい。このマルウェアが盗むのは Azure の認証情報だけではない。AWSのアクセスキー、GCPのサービスアカウント、Kubernetesのkubeconfig、SSH秘密鍵、Claude Codeのトークン ——開発者のマシンに置いてあるクラウド全方位のシークレットだ。Azure開発者を入口にして、AWSとGCPまで全部抜かれる構造になっている。

何が起きたのか

2026年5月19日、Microsoft公式のdurabletask Python SDK(リポジトリは microsoft/durabletask-python)のPyPI側に、3つの不正バージョンが連続で公開された。対象は 1.4.1 / 1.4.2 / 1.4.3。

StepSecurityの分析によれば、これらをインストールすると 28KBのペイロード が静かにダウンロードされ、AWS / Azure / GCP / Kubernetes / パスワードマネージャー、そして 90以上の開発者ツール設定 から認証情報を抜き取る。盗んだ後はそのクラウド認証情報を使って、AWS SSMやKubernetesクラスタに横展開していく。

これは単発のインシデントではない。TeamPCPによる Mini Shai-Hulud "Here We Go Again" キャンペーンの最新ターゲットだ。同じキャンペーンの過去事例:

  • 4月29日: SAP関連のnpmパッケージ
  • 4月30日: PyTorch Lightning(PyPI、2.6.2 / 2.6.3)
  • 5月11日: TanStack、Mistral AI、UiPath、OpenSearch、Guardrails AI(npm + PyPI で170+パッケージ)
  • 5月19日: AntV ecosystem(npm、130+パッケージ) + Microsoft durabletask(PyPI)

つまり、5月19日は同日に2つの大きな波が走った日で、片方はnpm側のAntV、もう片方がPyPI側のMicrosoft durabletaskだ。

なぜdurabletaskが狙われたのか——「公式」の信頼が武器になる

durabletask-pythonは、Microsoft純正のAzure Durable Functions / Durable Task Scheduler用Python SDK だ。AIエージェントの長期実行、リトライ機構、サブオーケストレーションをPythonで書きたいAzure開発者が「公式だから」と信頼してpip install durabletaskする。

そして公式SDKを使うコードベースは、ほぼ確実に Azure認証情報、AWS S3アクセスキー(クロスクラウドで併用)、データベース接続文字列、GitHub PAT をローカルの.envやCIシークレットに置いている。攻撃者にとって、これ以上美味しい標的はない。

特にAWS Lambdaから移行してきたチームや、マルチクラウドでAWS S3 + Azure Functionsを組み合わせているチームは、AWSの認証情報も同じマシンにある。durabletaskの侵害ペイロードがそれを掻っ攫っていく。

28KBのペイロードが盗むもの

Mini Shai-Hulud系のペイロードが直近のキャンペーンで収集する典型ターゲット:

クラウド認証情報

  • ~/.aws/credentials (AWSアクセスキー / シークレット)
  • ~/.aws/config (リージョン / SSO設定)
  • ~/.config/gcloud/credentials.db (GCP)
  • ~/.azure/accessTokens.json (Azure CLI)
  • ~/.terraform.d/credentials.tfrc.json (Terraform Cloud)

Kubernetes / Vault

  • ~/.kube/config
  • /etc/rancher/k3s/k3s.yaml
  • ~/.vault-token、/run/secrets/vault_token

開発者トークン

  • ~/.npmrc、~/.pypirc、.git-credentials、~/.netrc
  • ~/.docker/config.json
  • SSH秘密鍵全部(~/.ssh/id_rsa、~/.ssh/id_ed25519、~/.ssh/config)

AIツール

  • ~/.claude.json (Claude Codeトークン)
  • ~/.claude/mcp.json (MCP設定)

仮想通貨ウォレット

  • ~/.bitcoin/wallet.dat、~/.ethereum/keystore/*、~/.electrum/wallets/*

加えて、CI環境変数(GITHUB_TOKEN、ACTIONS_ID_TOKEN_REQUEST_TOKEN、AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_SESSION_TOKEN、VAULT_TOKEN、NPM_TOKEN等)、.envファイル、シェル履歴——あらゆる場所からシークレットを吸い上げる。

データはGitHub APIのdead-drop(攻撃者が侵害したGitHubアカウントの公開リポジトリにコミット)と、フォールバックのC2サーバー(過去事例ではt.m-kosche.comがOpenTelemetryコレクターを装っていた)の2チャンネルで送出される。

ワーム化——AWS SSMとKubernetesで横展開

このキャンペーンの過去亜種で確認されている特徴として、盗んだAWS認証情報を使ってSSM経由で他のEC2インスタンスにペイロードを展開する ロジックがある。CanisterWormと呼ばれる亜種では、Kubernetesクラスタを検出すると、特権DaemonSetを全ノードに展開してsystemdサービスとして永続化する(PostgreSQLツールに偽装)。

さらに、システムのタイムゾーン / ロケールが イスラエルまたはイラン に設定されている場合、rm -rf /相当の破壊ペイロードが 1/6の確率で発火 する地政学的トリガーも、Microsoftが過去のmistralaiパッケージ分析で確認している。Kubernetesクラスタの場合は全ノードを破壊する"kamikaze"ペイロードを展開する。

durabletaskに同じ機能が含まれているかは現時点で完全には公開検証されていないが、同一キャンペーンの直近亜種の標準装備として持っている可能性が高い。

今すぐ確認すること

1. ロックファイルを検索

# pip / pipenv / poetry / uv
grep -r "durabletask" requirements*.txt Pipfile.lock poetry.lock pyproject.toml uv.lock 2>/dev/null

# Conda
grep "durabletask" environment.yml 2>/dev/null

検出されたバージョンが 1.4.1 / 1.4.2 / 1.4.3 のいずれか だったら、対応必要。

2. インストール済みパッケージを確認

pip show durabletask
# Version: 1.4.x なら侵害バージョンの可能性

3. 不審なファイルとサービスを検索

# 過去のキャンペーンで使われた典型的なドロップ先
ls -la /tmp/*.pyz 2>/dev/null

# 持続化されたサービス
systemctl list-units --type=service 2>/dev/null | grep -iE "pgsql-monitor|pgmonitor"

# Python の .pth ファイル経由の永続化
find ~/.local/lib /usr/local/lib -name "*.pth" -newer /tmp -exec ls -la {} \; 2>/dev/null

4. CIログを確認

GitHub Actions / Azure DevOps Pipelines / GitLab CI で:

  • pip install durabletask を実行したワークフロー
  • 未知ドメインへの不審なoutbound HTTPS
  • python3が/proc/*/memを読んだ形跡(Runner.Worker メモリスクレイピング)
  • User-Agent: python-requests/2.31.0 で api.github.com への異常なPOST

影響を受けていた場合の対応

最悪のシナリオを前提に動く。「たぶん大丈夫」は通用しない。

即座にローテーション

  • AWS ——アクセスキー全部(~/.aws/credentials、IAMコンソールで失効 + 新規発行)
  • Azure ——Service Principal、Managed Identity、Azure CLIでaz loginからやり直し
  • GCP ——サービスアカウントキー、gcloud auth revokeしてから再認証
  • GitHub ——Personal Access Token(Fine-grainedも含む)全部失効
  • npm / PyPI ——公開トークン、npm token list / PyPI APIトークン
  • SSH鍵 ——~/.ssh/配下全部、authorized_keys のローテーションも
  • Vault / Kubernetes ——Service Account Token、kubeconfig
  • Claude Code ——~/.claude.jsonを削除して再ログイン

マシン側

  • durabletaskを安全版にダウングレード:
    pip uninstall durabletask
    pip install "durabletask<1.4.1"  # 安全版を確認してから
    
  • .venv、__pycache__、node_modulesを全削除して再構築
  • .claude/settings.json、.vscode/tasks.json、.github/workflows/*.ymlに身に覚えのない変更がないかgit diff

仮想通貨

  • ウォレットファイルがマシン上にあるなら、新しいウォレットに即移動。後から取り戻すことはできない。

防御策——94分ルールが効く

過去のShai-Hulud侵害は、検知から削除まで 約94分 で完了したこともあった。94分。コーヒー2杯分の時間で、AWS鍵もAzureトークンもGCPキーも全部抜かれる。

人間が反応できる速度ではない。仕組みで防ぐしかない。

1. Aikido Safe Chainを入れる(無料、5分)

curl -fsSL https://github.com/AikidoSec/safe-chain/releases/latest/download/install-safe-chain.sh | sh

Safe Chainには 48時間ルール がある。公開から48時間以内のパッケージは自動的に1つ前の安全版に差し替え。durabletask 1.4.1の侵害ウィンドウもこれで防げた可能性が高い。npm / pip / uv / poetry / pnpm / pnpx / npx に対応。

2. uv / pipでクールダウン期間を設定

# uv (推奨)
uv pip compile --exclude-newer 2026-05-15 requirements.in -o requirements.txt

# pip v26+
pip install --uploaded-prior-to 2026-05-15T00:00:00Z -r requirements.txt

新しすぎるパッケージは自動的に除外される。

3. CLAUDE.md / AGENTS.md / .cursor/rules に依存ルールを書く

AIエージェントに勝手に依存を追加させないルールを明文化:

## 依存関係のルール
- requirements.txt / pyproject.toml を編集する前に必ず確認を求める
- pip install / uv add を自動実行しない
- 新規依存パッケージは公開から48時間以上経過しているか確認する

これだけで、AIエージェント経由の自動感染リスクが大きく下がる。

4. CI/CDではGitHub Actionsをコミットハッシュで固定

# 悪い例(タグは攻撃者が書き換えられる)
- uses: actions/checkout@v4

# 良い例(コミットハッシュは変えられない)
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11  # v4.2.2

Checkmarx侵害でも actions-cool/issues-helper侵害でも、タグ単位の参照が攻撃面だった。

5. Azure Pipelines / GitHub Actionsの権限を最小化

  • permissions: を明示してデフォルトのwrite-allを回避
  • Azure側はManaged Identityに切り替え、PAT埋め込みをやめる
  • AWS側はOIDC federation(aws-actions/configure-aws-credentials@<sha>)に切り替え、長期キーをやめる

これらは durabletask とは独立の汎用対策だが、今回のような侵害が起きたときの「血を流さない」設計に直結する。

まとめ

5月19日のdurabletask侵害は、TeamPCPが Microsoftの公式PyPIパッケージにまで手を伸ばした ことを示している。「Microsoft公式だから安全」「PyPIの実績パッケージだから安全」という前提は、もう成り立たない。

特に Azure Durable Functions で実運用しているチーム、AWSとAzureを併用しているチームは、今すぐ:

  1. pip show durabletaskでバージョン確認
  2. 1.4.1 / 1.4.2 / 1.4.3 だったら全認証情報ローテーション
  3. Safe Chain か uv の --exclude-newer を導入して、次の94分に備える

そして来週の自分が今週より少し安全であるために——Safe Chain でも CLAUDE.md のルールでも何でもいい、仕組みで防ぐ手 を1つ入れてほしい。94分は、人間が判断するには短すぎる。

そしてもう一度——あなたは今朝、pip install しましたか?


参考

関連記事

キーワード

  • Microsoft
  • Azure
  • AWS
  • PyPI
  • Durable Functions
  • Mini Shai-Hulud
  • サプライチェーン攻撃
  • Safe Chain
  • TeamPCP
A

Aikido Community Japan

公開日: 2026/5/20

最終更新: 2026/5/19

シェア:

ニュースを購読

セキュリティの最新情報をお届けします。

Aikido Community Japan からのお知らせの受信に同意します。詳しくはプライバシーポリシーをご確認ください。