anti-DoS rounds count limits for blowfish and des crypt
authorRich Felker <dalias@aerifal.cx>
Wed, 29 Aug 2012 16:56:12 +0000 (12:56 -0400)
committerRich Felker <dalias@aerifal.cx>
Wed, 29 Aug 2012 16:56:12 +0000 (12:56 -0400)
all of the limits could use review, but err on the side of avoiding
excessive rounds for now.

src/misc/crypt_blowfish.c
src/misc/crypt_des.c

index d3f7985..bd37be8 100644 (file)
@@ -625,7 +625,7 @@ static char *BF_crypt(const char *key, const char *setting,
        }
 
        count = (BF_word)1 << ((setting[4] - '0') * 10 + (setting[5] - '0'));
        }
 
        count = (BF_word)1 << ((setting[4] - '0') * 10 + (setting[5] - '0'));
-       if (count < min || BF_decode(data.binary.salt, &setting[7], 16)) {
+       if (count < min || count > 2048 || BF_decode(data.binary.salt, &setting[7], 16)) {
                return NULL;
        }
        BF_swap(data.binary.salt, 4);
                return NULL;
        }
        BF_swap(data.binary.salt, 4);
index 4454a13..d7b2b15 100644 (file)
@@ -911,7 +911,7 @@ static char *_crypt_extended_r_uut(const char *_key, const char *_setting, char
                                return NULL;
                        count |= value << (i - 1) * 6;
                }
                                return NULL;
                        count |= value << (i - 1) * 6;
                }
-               if (!count)
+               if (!count || count > 262143)
                        return NULL;
 
                for (i = 5, salt = 0; i < 9; i++) {
                        return NULL;
 
                for (i = 5, salt = 0; i < 9; i++) {