
استغلال Python لثغرة CVE-2022-36804، يتيح تنفيذ أوامر عن بُعد ونقل الملفات على خوادم Bitbucket Server/Data Center المتأثرة بالثغرة عبر طلبات أرشيف مصممة خصيصًا.
يحتوي هذا المستودع على سكربت استغلال مكتوب بلغة بايثون لثغرة Atlassian Bitbucket Server/Data Center المعروفة بـ CVE-2022-36804. المشكلة هي خلل في حقن الأوامر في تدفق Git archive، حيث يمكن لمعاملات prefix المصممة بعناية أن يفسرها الخادم وينفذها كأوامر شل.
CVE-2022-36804 هي ثغرة تنفيذ أوامر عن بُعد في Bitbucket Server/Data Center. سببها التعامل غير الآمن مع قيمة prefix في نقطة نهاية الأرشيف، مما يسمح للبيانات التي يتحكم فيها المهاجم بالوصول إلى استدعاء شل عبر Git. النتيجة هي تنفيذ أوامر بدون مصادقة أو مع مصادقة اعتمادًا على المسار ونموذج النشر.
يستهدف هذا السكربت نقطة نهاية الأرشيف المعرضة للخطر ويستخدم طلبًا مصممًا بعناية لتفعيل الحقن.
إثبات المفهوم هذا (PoC) مخصص للإصدارات المتأثرة من Bitbucket Server/Data Center المشمولة بنشرة Atlassian الأمنية الخاصة بـ CVE-2022-36804. عمليًا، يشمل النطاق المتأثر إصدارات Bitbucket Server/Data Center الأقدم من 7.x/8.x قبل الإصدارات المُصححة التي أدرجتها Atlassian. هذا السكربت غير مخصص للإصدارات المحدّثة أو التي تم تطبيق التصحيحات عليها.
استخدم هذا السكربت فقط ضد الأنظمة التي تملكها أو التي لديك تفويض صريح لاختبارها.
يرسل السكربت طلبًا إلى:
/rest/api/latest/projects/{project}/repos/{repo}/archive
مع معامل prefix مصمم بعناية يبدو كالتالي:
ax%00--exec=`<command>`%00--remote=origin
الحيلة تكمن في استغلال مسار البايت الصفري / أمر Git بحيث ينتهي الخادم بتنفيذ أمر شل من طلب الأرشيف. يقوم السكربت بلف الأمر في gzip + base64 عند الحاجة حتى يُعاد الإخراج بشكل مضغوط ويُفك تشفيره محليًا.
يدعم السكربت وضعين رئيسيين:
python cve-2022-36804_v5.py <url> <username> <password> -p <project> -r <repo> -c "whoami"
الخيارات:
-c, --command: تشغيل أمر--no-encode: إرسال الأمر الخام بدون لف gzip+base64-p, --project: مفتاح مشروع Bitbucket-r, --repo: معرف المستودع (slug) في Bitbucketpython cve-2022-36804_v5.py <url> <username> <password> -p <project> -r <repo> -f /path/to/local.bin -o /tmp/remote.bin
يقرأ هذا السكربت ملفًا محليًا على شكل أجزاء، ويشفّر كل جزء بـ base64، ثم يستخدم الاستغلال لإعادة بناء الملف على الخادم في المسار الهدف.
requests.Session مع مصادقة أساسية (basic auth).verify = False) لتبسيط الاختبار ضد نقاط النهاية ذات الشهادات الذاتية التوقيع.هذه الأداة مخصصة لأغراض البحث الأمني المصرح به والاختبار الخاضع للسيطرة فقط. استخدامها ضد أنظمة لا تملكها أو ليس لديك إذن لاختبارها يعد غير قانوني وغير أخلاقي.