Updated A trivial-to-exploit flaw in macOS High Sierra, aka macOS 10.13, allows users to gain admin rights, or log in as root, without a password.
The security bug can be triggered via the authentication dialog box in Apple's operating system, which prompts you for an administrator's username and password when you need to do stuff like configure privacy and network settings.
If you type in "root" as the username, leave the password box blank, hit "enter" and then click on unlock a few times, the prompt disappears and, congrats, you now have admin rights. You can do this from the user login screen, too.
The vulnerability effectively allows someone with physical access to the machine to log in, cause extra mischief, install malware, and so on. You should not leave your vulnerable Mac unattended, nor allow remote desktop access, until you can fix the problem.
And while obviously this situation is not the end of the world – it's certainly far from a true remote hole or a disk decryption technique – it's just really, really sad to see megabucks Apple drop the ball like this.
Developer Lemi Orhan Ergan alerted the wider world to the flaw via Twitter in the past hour or so. The security hole was also quietly discussed on Apple's developer forums two weeks ago, but virtually no one seemed to notice.
You can access it via System Preferences>Users & Groups>Click the lock to make changes. Then use "root" with no password. And try it for several times. Result is unbelievable! pic.twitter.com/m11qrEvECs— Lemi Orhan Ergin (@lemiorhan) November 28, 2017
You can login this way as well. It's 2017. Intentional backdoor.— Earle Ady (@earle) November 28, 2017
It gets worse. You can use this programming blunder to disable FileVault...
oh god this actually works and it lets you do everything like turn off FileVault, well done Apple. pic.twitter.com/vQAqEK39Vk— Jon (@jonp__) November 28, 2017
But there is a workaround for now. If you have configured a root password, the above blank password trick will not work. So, set a root password right now using...
sudo passwd -u root
El Reg was able to replay the bug on our office Macs running High Sierra, which was released in September. A spokesperson for Apple was not immediately available for comment. Apparently, it's all due to the operating system accidentally creating a blank root account:
Thanks. We've confirmed this on 2 Macs & are writing it up. Procedure creates new Root account, no password, runs root commands w/o sudo.— Paul Wagenseil (@snd_wagenseil) November 28, 2017
This is not the password-less future we all had in mind.— Mike Hanley (@mhanley_duo) November 28, 2017
Chalk this up as just the latest embarrassing flaw in Apple's newest flavor of macOS, the OS formerly known as OS X. In October, fans noted that High Sierra would also do things like disclose the password for encrypted drives, and cough up account credentials to untrusted applications.
Let's hope Apple engineers can do a bit better with next year's release, or we may all be left hoping for that iOS to Mac conversion sooner than later. We'll update this article as and when new information arrives. The latest High Sierra beta release is not affected, apparently. ®
Updated to add
Apple has just now published this handy guide to enabling the root account and setting a non-blank password for it, which defeats the above exploit.
And to reiterate, watch out if you have remote desktop access switched on for your Mac – VNC, RDP, screen sharing and similar can be used to gain admin rights on your computer via this vulnerability. So set a root password for now, and don't forget it.
Apple is working on a software patch to correct the issue – which is good news because the bug can be triggered via the command line and not just the interactive GUI. This means malware and naughty apps can now automatically and silently grab root privileges on High Sierra Macs, allowing them to cause real damage.
$ osascript -e 'do shell script "id" with administrator privileges user name "root" password ""'— Valerio Mulas (@drakkars) November 28, 2017
uid=0(root) gid=0(wheel) egid=20(staff) groups=0(wheel) [..]