[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: auth_fn segfaults when reading encrypted private key in new openssh format
[Thread Prev] | [Thread Next]
- Subject: Re: auth_fn segfaults when reading encrypted private key in new openssh format
- From: Jeroen Ooms <jeroen@xxxxxxxxxxxx>
- Reply-to: libssh@xxxxxxxxxx
- Date: Tue, 26 Mar 2019 13:11:49 +0100
- To: libssh@xxxxxxxxxx
On Tue, Mar 26, 2019 at 10:40 AM Jakub Jelen <jjelen@xxxxxxxxxx> wrote:
>
> On Mon, 2019-03-25 at 14:16 +0100, Jeroen Ooms wrote:
> > I'm running into a crash with libssh 0.8.6 / 0.8.90 that appears when
> > reading an encrypted (passphrased) id_rsa in the new openssh private
> > key format. My code looks like this:
> >
> > ssh_key privkey = NULL;
> > ssh_pki_import_privkey_file("path/to/id_rsa, NULL,
> > my_auth_callback,
> > passfun, &privkey)
> >
> > Here my_auth_callback prompts the user for a passphrase, copies that
> > into *buf and then returns SSH_OK. This works as expected when the
> > private key is encypted using the classic pkcs1 format, i.e. the one
> > that starts with:
> >
> > -----BEGIN RSA PRIVATE KEY-----
> > Proc-Type: 4,ENCRYPTED
> > DEK-Info: DES-EDE3-CBC,E5E17B572446A169
> >
> > However, keys generated with recent versions of ssh-keygen are using
> > the new bcrypt encrypted format, which starts with:
> >
> > -----BEGIN OPENSSH PRIVATE KEY-----
> >
> > For these keys, ssh_pki_import_privkey_file() segfaults immediately
> > after the my_auth_callback has returned the password.
>
> I just tried to write simple reproducer, but it works for me
> flawlessly:
>
> https://github.com/Jakuje/stuff/blob/master/readkey.c
>
> The only thing that is missing from your example is passing the
> userdata, but that should really not be a problem. Are you sure you are
> not handling some memory wrongly?
OK maybe you are right. I was ignoring the 'len' parameter in the
my_auth_callback (are these parameters documented somewhere?). The
callback had a line like this:
strncpy(buf, password, 1024);
So I assumed there would be at least 1024 bytes in the buffer. But it
seems that for the new openssh keys, the target buffer for the
passphrase is only 128 bytes.
| Re: auth_fn segfaults when reading encrypted private key in new openssh format | Jakub Jelen <jjelen@xxxxxxxxxx> |
| auth_fn segfaults when reading encrypted private key in new openssh format | Jeroen Ooms <jeroen@xxxxxxxxxxxx> |
| Re: auth_fn segfaults when reading encrypted private key in new openssh format | Jakub Jelen <jjelen@xxxxxxxxxx> |