[Bug 3409] ssh-keygen -Y find-principals segfaults on malformed allowed_signers_file

bugzilla-daemon at mindrot.org bugzilla-daemon at mindrot.org
Sat Mar 19 13:20:46 AEDT 2022


https://bugzilla.mindrot.org/show_bug.cgi?id=3409

--- Comment #1 from Mateusz Adamowski <mateusz at adamowski.pl> ---
I managed to identify minimal malformed input that crashes the program:

$ ssh-keygen -Y verify -n file -s ed25519.c.sig -f <( printf "?\x00\n"
) -I a < ed25519.c

The problem is probably with strdelim_internal() function [misc.c:398] 

When it cannot find accepted separator (whitespaces, quotes), it
returns the original pointer, but also it sets value passed by pointer
(char **s) to NULL.

This value is never checked in parse_principals_key_and_options()
[sshsig.c:718] and ultimately passed to sshkey_read()

I added following check right before a call to sshkey_read():

    if (cp == NULL) {
        error("%s:%lu: invalid line", path, linenum);
        r = SSH_ERR_INVALID_FORMAT;
        goto out;
    }

And it seems to solve this problem.

However, I think that parse_principals_key_and_options() function
should have some extra pre-check, that would immediately eliminate
malformed lines, especially these containing 0x00 and other
non-printable characters.

-- 
You are receiving this mail because:
You are watching the assignee of the bug.


More information about the openssh-bugs mailing list