Skip to content

Commit a82c06f

Browse files
committed
Fix detection of passwords hashed with MD5
This commit fixes an issue related to the way password verifiers hashed with MD5 are detected, leading to possibly detect that plain passwords are legit MD5 hashes. A MD5-hashed entry was checked based on if its header uses "md5" and if the string length matches what is expected. Unfortunately the code never checked if the hash only used hexadecimal characters after the three-character prefix. Fix 9.6 down to 9.4, where this code is present. This area of the code has changed in 10 and upwards with the introduction of SCRAM, which led to a different fix committed as of ccae190. Reported-by: Tom Lane Author: Michael Paquier Reviewed-by: Jonathan Katz Discussion: https://postgr.es/m/016deb6b-1f0a-8e9f-1833-a8675b170aa9@postgresql.org Backpatch-through: 9.4
1 parent c0bafc5 commit a82c06f

File tree

1 file changed

+3
-1
lines changed

1 file changed

+3
-1
lines changed

src/include/libpq/md5.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,12 @@
1616
#ifndef PG_MD5_H
1717
#define PG_MD5_H
1818

19+
#define MD5_PASSWD_CHARSET "0123456789abcdef"
1920
#define MD5_PASSWD_LEN 35
2021

2122
#define isMD5(passwd) (strncmp(passwd, "md5", 3) == 0 && \
22-
strlen(passwd) == MD5_PASSWD_LEN)
23+
strlen(passwd) == MD5_PASSWD_LEN && \
24+
strspn(passwd + 3, MD5_PASSWD_CHARSET) == MD5_PASSWD_LEN - 3)
2325

2426

2527
extern bool pg_md5_hash(const void *buff, size_t len, char *hexsum);

0 commit comments

Comments
 (0)