
# استغلال PNG bomb لرفض الخدمة (DoS) عبر HTTP(S) C2 في Sliver — GHSA-663m-7x7m-g4fw (CVE-2026-77622)
استغلال رفض الخدمة لمستمع HTTP(S) الخاص بـ Sliver C2. يهاجم بالقوة الغاشية رمز تشفير PNG الخاص بكل جلسة ويُرسل قنبلة فك ضغط تستنزف ذاكرة الخادم.
نُشر كـ GHSA-663m-7x7m-g4fw.
قناة HTTP(S) C2 الخاصة بـ Sliver تغلف الرسائل داخل صور PNG. تُخصص لكل جلسة رمز عشوائي في النطاق [1, 65537)، ولا يقوم الخادم بفك ترميز بيانات PNG إلا من الطلبات التي يتطابق فيها معامل ?n= مع رمز الجلسة. هذه آلية توجيه وليست فحص مصادقة — مساحة المفاتيح هي 16 بت.
يقوم الخادم بفك ترميز PNG باستخدام image.Decode() من Go، والتي تخصص width × height × bytes_per_pixel في الذاكرة. ملف PNG بأبعاد معلنة 32767×32767 RGBA يُضغط إلى حوالي 3 كيلوبايت على الشبكة لكنه يُفك ضغطه إلى أكثر من 4 جيجابايت في الذاكرة. لا يفرض الخادم أي حد على الأبعاد المُفككة.
يعمل الاستغلال في ثلاث مراحل:
إصدارات Sliver C2 قبل الإصلاح المشار إليه في GHSA-663m-7x7m-g4fw. أي خادم Sliver يعمل بمستمع HTTP أو HTTPS معرّض للخطر.
go build -o pngboomer
لا توجد تبعيات خارجية. المكتبة القياسية فقط.
./pngboomer -url http://target:8080/ [options]
| العلم | الافتراضي | الوصف |
|---|---|---|
-url | http://127.0.0.1:8080/ | عنوان URL الأساسي لـ Sliver HTTP C2 |
-workers | 8 | تزامن المسح |
-probe-w | 2000 | عرض PNG الاستكشافي |
-probe-h | 2000 | ارتفاع PNG الاستكشافي |
-probe-color | 2 | نوع لون الاستكشاف (2=RGB، 6=RGBA) |
-kill-w | 32767 | عرض PNG القتل |
-kill-h | 32767 | ارتفاع PNG القتل |
-kill-color | 6 | نوع لون القتل (2=RGB، 6=RGBA) |
-threshold-ms | 50 | الحد الأدنى لوقت الاستجابة لاكتشاف الرمز |
-outlier-mult | 15.0 | العتبة التكيفية = النسبة المئوية 99 الأساسية × هذا |
-calibrate | 16 | عدد عينات المعايرة |
-verify | 3 | عدد مرات إعادة الاستكشاف لكل رمز مرشح |
-max-nonce | 65537 | أعلى نطاق الرمز (معامل Sliver) |
-probe-timeout | 5s | مهلة HTTP لكل استكشاف |
-kill-timeout | 180s | مهلة HTTP لطلب القتل |
-target-cap-mb | 10240 | سقف الذاكرة المعلن للهدف (فحص أمان) |
-nonce | 0 | تخطي المسح واستخدام هذا الرمز مباشرة |
-scan-only | false | العثور على الرمز وطباعته دون إرسال القتل |
-no-confirm | false | تخطي استقصاء TCP لموت الهدف بعد القتل |
-no-color | false | تعطيل إخراج الألوان ANSI |
-silent |
مسح وقتل افتراضي ضد هدف Docker محلي:
./pngboomer -url http://127.0.0.1:8080/ -target-cap-mb 10240
المسح فقط (العثور على الرمز دون القتل):
./pngboomer -url https://c2.target.com/ -scan-only
تخطي المسح عندما تعرف الرمز بالفعل:
./pngboomer -url http://target:8080/ -nonce 41337
قنبلة القتل تسبب فك ترميز PNG متعدد الجيجابايتات على الهدف. عند الاختبار، شغّل خادم Sliver داخل حاوية Docker مع --memory=<N>g ومرر -target-cap-mb N حتى يرفض الأداة مجموعات العمال/الاستكشاف الخطيرة التي قد تتجاوز ذاكرة الهدف.
PNG الاستكشافي كبير بما يكفي بحيث يستغرق فك ترميزه وقتًا أطول بشكل ملحوظ من رفض الخادم السريع للرمز الخاطئ. يخلط المسح نطاق الرموز ويوزعه عبر غوروتينات العمال. يرسل كل عامل PNG الاستكشافي مع رمز مرشح ويقيس وقت الاستجابة.
عندما يتجاوز استجابة العتبة التكيفية (الأعلى بين -threshold-ms و baseline_p99 × outlier-mult)، يُعاد استكشاف المرشح -verify مرات. إذا تجاوزت أغلبية عمليات إعادة الاستكشاف العتبة أيضًا، يتم تأكيد الرمز. إذا لم يحدث ذلك، يُدرج المرشح في القائمة السوداء ويستمر المسح. يُسمح بما يصل إلى 8 "ومضات" إيجابية كاذبة قبل أن يستسلم المسح.
أُبلغ به إلى Bishop Fox عبر عملية الاستشارات الخاصة في GitHub. كتب CalebKingan التصحيح.
| false |
| طباعة الرمز المكتشف فقط إلى stdout |