A security researcher has discovered that changes to Directory Services in Lion make it much easier to access and potentially crack hashed user passwords. Worse yet, it is possible for any user to change the currently logged in user's password, making it much easier to gain root remotely.
According to researcher Patrick Dunstan, Directory Services' command line utility can be run by any user. By itself, this isn't necessarily a security problem, but at least two functions make it trivial to access user password hashes or even change the current user's password without administrator authentication.
Using Directory Services to read a user's profile doesn't normally show password information; it is usually stored in a shadow file that only the root user can access. However, using a "Search" directory path will show a range of extended attributes for the user, including the user's hashed password.
Running the command:
$ dscl localhost -read /Search/Users/currentuser
will include the following output:
dsAttrTypeNative:ShadowHashData: 62706c69 73743030 d101025d 53414c54 45442d53 48413531 324f1044 74911f72 3bd2f66a 3255e0af 4b85c639 776d510b 63f0b939 c432ab6e 082286c4 7586f19b 4e2f3aab 74229ae1 24ccb11e 916a7a1c 9b29c64b d6b0fd6c bd22e7b1 f0ba1673 080b1900 00000000 00010100 00000000 00000300 00000000 00000000 00000000 000060
As Dunstan notes, hackers can use the hashed data to attempt to crack the actual password.
Perhaps an even easier attack vector, though, is using Directory Services to simply change the current user's password. Attempting to change the current user's password via Directory Services will simply result in a prompt for a new password without a request for administrator authentication. If a remote user can gain shell access, they could use this method to simply change the password of the current user. If that user is an admin, the hacker could use
sudo to run as root. If not, the hacker may still be able to access hashes of other users and attempt to crack them.
Dunstan recommends limiting access to Directory Services command line utility until Apple can issue a patch for these issues. If you are comfortable in Terminal, running the following command as an admin will limit other users from being able to run Directory Services:
$ sudo chmod 100 /usr/bin/dscl
UPDATE: The original version of this article said that the
dscl -passwd exploit could change the password of any currently logged in user. However, we verified with Dunstan that it only works for the current active user. It could still be combined with a remote exploit to get shell access and then gain root privileges if the current user is an admin. Apple could plug this hole by requiring entering the old password whenever a password change is requested.