For my job I use some industry-specific software that stores sensitive information. The software has a web interface with a public login page. One time I attempted to log in, but mistyped the last few characters of my password. To my surprise it let me in anyway. This started me down the rabbit hole of how the password was being stored.
After some investigation and reverse engineering, it appears the password is stored in the database as a 10 digit integer with a custom hashing method. The hashing method is roughly as follows:
- Remove surrounding whitespace from password
- If password is less then 10 characters then insert some predefined padding characters at a position determined by the original length
- Discard all but first 10 characters of password
- Remove repeated characters (
aabbaabbbecomesabab) - Remove special characters
- Replace each character with a corresponding number from a lookup table
- Append predefined numbers to the end if less than 10 characters long
- Convert to an integer
- If the first character in the original password is a special character then multiply by -1
Obviously this leaves a lot to be desired. I have contacted the vendor, although they don't appear to share my concern.
An online attack isn't practical due to being locked out after several password attempts. It's trivial to find working password candidates given the hash, although due to the amount of discarded information I can't see a guaranteed way of finding the original password.
Am I right in being concerned? What issues could this potentially cause?