The PAUSE protection response to Perlmonks is completed

Alias on 2009-08-12T14:15:41

I'm happy to report that the protection phase of security operations on the CPAN has been completed, taken in response to evidence of significant password sharing amongst the publicly exposed subset of the stolen passwords.

To prevent the need for resetting passwords for all users, Andreas Koenig has instead obtained the entire set of 51,105 PerlMonks passwords, hashed, against the entire set of all 4,096 possible salts.

After checking for all 209,326,080 possible colliding password hashes, we have locked out 767 CPAN authors who either shared their password with PerlMonks or co-incidentally shared a password with a different PerlMonks user.

An explanation of the situation and a password reset keys for these accounts have been generated and sent to both the public cpanid@cpan.org address and secret email address for these users. Where an address has been changed, we have also sent the password reset key to their secret email address as it existed at a time before the original break in.

With the exposed password database now rendered unusable in any future attacks, we can now move into an auditing phase.

This will include a number of steps including secondary checks on authors with suspicious changes in details during the potential attack window, and checks on any suspicious uploads during the attack window.

Because no suspicious uploads or reports of account hijacking have been received at this time (and because the auditing task is somewhat larger than the protection task) we will be doing this gradually over the next several weeks.

I will report in again once this task is completed.

I'd like to thank James Mastros and the other PerlMonks admins for producing and providing access to the (rather large) hash list for us.


Thanks

ysth on 2009-08-12T14:51:25

Thanks are due to both you and Andreas.

Thanks

Tim Bunce on 2009-08-12T16:33:23

Great work. Many thanks.

Great

Arador on 2009-08-12T18:22:11

I really like the way you've solved this problem :-)