
مجموعة أدوات CVE-2026-64560: سلسلة أدوات Go أحادية الملف التنفيذي + منفذ هدف realme RMX5010 (A16، SM8750)
CVE-2026-64560 هو use-after-free في posix-cpu-timers بنواة Linux
(سباق محلي بدون صلاحيات، CVSS 3.1 = 7.8؛ غير مُصلح في 6.6.118، ولم يُصلح إلا في 6.6.147).
هذا المستودع يقوم بأمرين: تحويل سلسلة الأدوات التي لا يمكن تشغيلها في المنبع إلا عبر مجموعة من سكربتات Python إلى ملف Go ثنائي ثابت واحد،
وسدّ الفجوة بإضافة هدف realme RMX5010 (A16 / SM8750) غير الموجود في المنبع.
[!WARNING] هذا كود exploit تجريبي للنواة. قد يؤدي إلى إعادة تشغيل الجهاز أو إفساد حالة النواة أو فقدان البيانات. استخدمه فقط على أجهزة تملكها أو لديك إذن صريح بها. خذ نسخة احتياطية أولاً.
| profile | الجهاز | النواة | الحالة |
|---|---|---|---|
rmx5010-a16 | realme RMX5010 / RE6018L1، A16 BP2A.250605.015 | 6.6.118-android15-8-g93e223c276e7-abogki500782043-4k | مضاف في هذا المستودع؛ الحمولة الثابتة تجتاز بوابة --preflight على جهاز حقيقي، الرفع الكامل للصلاحيات لم يُتحقق منه على جهاز حقيقي بعد |
dada | Xiaomi 15 | 6.6.118-android15-8-gb9cc6ec16bc8-…-4k | محفوظ كما هو من المنبع (انظر شرح المنبع) |
op13 | OnePlus 13 | مطابق للمنبع | محفوظ كما هو من المنبع |
دون تثبيت Go أو Python:
v*، ويحتوي أدوات كل المنصات + حمولات كل الأهداف + SHA256SUMS.txtmain
cve64560-<os>-<arch>: linux/amd64، linux/arm64، android/arm64، darwin/arm64، windows/amd64payloads: الحمولات الثابتة aarch64 لكل profile (rmx5010-a16-…، op13-…،
كل واحدة في مجلدها الخاص، دون الكتابة فوق بعضها)نسخة android/arm64 يمكن دفعها مباشرة عبر adb push إلى /data/local/tmp وتشغيلها على الهاتف.
go build -o cve64560 ./gotool # الأداة (Go خالص، بلا اعتماديات)
./cve64560 build --profile profiles/rmx5010/rmx5010-40850e5ff6a5.json # الحمولة (تحتاج cc)
لمحة عن سطر الأوامر، والتشغيل الفارغ --dry-run، وكيفية اشتقاق profile، انظر docs/GOTOOL.md.
كانت العملية الأصلية تتطلب python3 + tools/*.py + مجموعة من سكربتات shell: لا يوجد python على أجهزة الاختبار،
وأقل احتمالاً على الهاتف. الآن ملف ثنائي ثابت واحد يغطي
كامل مسار kallsyms → derive → render → patch → build → campaign،
ويعمل أينما تمت الترجمة المتقاطعة.
تنفيذ Python لم يُحذف: بقي في tools/ كتنفيذ مرجعي وخط أساس للمقارنة في CI،
حيث يشغّل CI نسختي Go و Python لكل profile ثم ينفذ diff -r، ويُفشل عند أي اختلاف بايت واحد.
.github/workflows/build.yml)gotool/ سلسلة أدوات Go (ملف واحد لكل أمر)
profiles/ profile الأهداف (ملف JSON لكل هدف، المصدر الوحيد للحقيقة عند الرندر)
src/ قوالب المنبع + كود الأجهزة المُولَّد
tools/ تنفيذ Python المرجعي من المنبع + طبقة توافق musl/bionic + سكربتات CI
scripts/ سكربتات الحملات/القياس من المنبع (نسخة Go في gotool/cmd_campaign.go)
targets/ سجل رموز/إزاحات النواة لكل هدف
symbols/ جداول رموز النواة لـ profile الإصدارين (الباقي بيانات مشتقة)
docs/GOTOOL.md توثيق سلسلة أدوات Go
المستودع لا يحتوي على صور firmware أو مفاتيح أجهزة أو معرّفات فريدة للأجهزة. الخطوات التي تتطلب صورة نواة من الشركة المصنّعة (استخراج الرموز، اشتقاق profile) تحتفظ بالصورة الأصلية ولا تدخل المستودع.
الاستثناء الوحيد هو جداول رموز النواة لـ profile الإصدارين (symbols/symbols_*.json، بحجم ~
9 MB لكل منهما): build يفشل مباشرة إذا لم يجد الجدول (حتى لا يُخرج حمولة بثابت غير مُتحقق منه)، و CI لا يملك
صورة النواة Image لإعادة بناء الجداول. وهي تحتوي فقط على أسماء الرموز وعناوينها، دون الصورة نفسها.
الحمولة هي root مؤقت: تنتهي بإعادة التشغيل، ولا تُكتب على القرص ولا تعدّل الأقسام.
| job | الوظيفة |
|---|
gotool | ترجمة متقاطعة لـ 5 منصات + gofmt/go vet/go test |
parity | مقارنة مخرجات Go و Python بايت ببايت؛ tools/golden.sha256 يتحقق بشكل صارم من المخرجات الذهبية |
payload | ترجمة الحمولة داخل حاوية arm64 Alpine (qemu)، بسلسلة أدوات من نفس فئة aarch64 musl gcc التي تم التحقق منها على جهاز حقيقي |
release | نشر Release تلقائياً عند الوسم |