Re: Possible to store invalid SCRAM-SHA-256 Passwords
Jonathan S. Katz <jkatz@postgresql.org>
From: "Jonathan S. Katz" <jkatz@postgresql.org>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Michael Paquier <michael@paquier.xyz>, pgsql-bugs@lists.postgresql.org,
Stephen Frost <sfrost@snowman.net>
Date: 2019-04-22T23:36:45Z
Lists: pgsql-bugs
Attachments
- 0001-Provide-additional-check-to-determine-if-a-password-.patch (text/plain) patch 0001
On 4/22/19 6:42 PM, Tom Lane wrote: > "Jonathan S. Katz" <jkatz@postgresql.org> writes: >> OK, so I have something that sort of works, i.e: > >> if (strncmp(shadow_pass, "md5", 3) == 0 && >> strlen(shadow_pass) == MD5_PASSWD_LEN && >> strspn(shadow_pass, MD5_PASSWD_CHARSET) == MD5_PASSWD_LEN >> ) > >> where MD5_PASSWD_CHARSET = "mabcdef0123456789" > >> ...but you may notice something: the CHARSET contains an "m" as we store >> that "md5" prefix on the md5 hashed passwords. > > Yeah, that's silly; why not > > strspn(shadow_pass + 3, MD5_PASSWD_CHARSET) == MD5_PASSWD_LEN - 3 > > It's not like this code isn't very well aware of the first 3 characters > being not like the others. I like that :) Please see attached patch, which is diff'd from the one upthread. I tested using the following: /* Log in with "abc" */ CREATE ROLE test1 PASSWORD 'md5cdde562ece166a02f5392b656dcf2502' LOGIN; /* Logs in with "md5cdde562ece166a02f5392b656dcf250g" */ CREATE ROLE test2 PASSWORD 'md5cdde562ece166a02f5392b656dcf250g' LOGIN; /* Logs in with "md5cdde562ece166a02f5392b656dcf250m" */ CREATE ROLE test3 PASSWORD 'md5cdde562ece166a02f5392b656dcf250m' LOGIN; I debated adding a test...without being able to simulate a log in, I don't know if it tests much other than "yes, you can store an invalid md5 hash and it treats it as plaintext." Thanks, Jonathan
Commits
-
Fix detection of passwords hashed with MD5
- a82c06f4001d 9.4.22 landed
- 20dbc84bd002 9.5.17 landed
- af298f00a1e8 9.6.13 landed
-
Fix detection of passwords hashed with MD5 or SCRAM-SHA-256
- 15fe91e70ec6 10.8 landed
- 7f56d43663dd 11.3 landed
- ccae190b916f 12.0 landed