PowerPCのCVEをいろいろと調べてみた
はじめに
こんばんは。この記事はセキュリティキャンプのグループワークでの合同ブログ(”控え目関西人”)の第4記事目です。
以下のURLは合同ブログであり、飛べば他の方が書いた記事が見れますので是非。
お堅いのもなんなので自分なりに書いていこうと思います
正直日本語も危ういのでよくわからない言葉を使っているかもしれませんが温かい目で見ていただけると幸いです
早速ですが、私が何故PowerPCというCPUの脆弱性を調べようと思ったのかは、ある機械の解析をしたいためです。実際はその機会が発売されてから5年ぐらいまでのCVEを見ればいいのかなと思っているのですが発売されて10年間のCVEを調べてみました
現在(2021/01/18)では35このCVEしか報告されていない
今回のCVE情報は以下のサイトから持ってきました
正直今回のブログでは技術的な創作物や解析ではないです....
自分なりに翻訳して書いたのでもし解釈が間違っているようであれば教えてください!
※以下、単にLinux KernelとなどといったらPowerPC上で動作しているものとします。
PowerPC-CVE
・2006年
2248、Linux Kernel 2.6.16~2.6.17ではLocal Userが64bitのsystem関数で任意のKernel Memoryを読み込んで、クラッシュを起こすことができ、また32bitのsystem関数ではKernel Memoryを読み込んだりすることが可能になる
4093、Linux Kernel 2.x.6~2.6.17.9, 2.4.x~2.4.33.1ではLocal UserがPPC970systemでクラッシュを起こすことができる
5331、Linux Kernel 64bit ~2.6.19ではarc/powerpc/kernel/traps.cの中で定義されているaltivec_unavailable_exception関数は、CONFIG_ALTIVECが定義されており、CPUもAltivecにサポートされている。しかし、KernelがAltivecにサポートされていないのが検出された場合、Local UserがAltivec命令の実行を実行することでPanicを引き起こす
5648、Ubuntu Linux 6.10ではLocal Userがsys_get_robust_listとsys_set_robust_list関数を使用し、止めることができない新しいプロセスを生成することができる。
すなわちリソース枯渇攻撃(Resource exhaustion attack)ができる
5649、Ubuntu Linux 5.10, 6.06LTS, 6.10ではアライメント例外処理にある「特定できない脆弱性」によってLocal Userがあるベクトルを用いてKernel Panicを引き起こすことができる
・2007年
3107、Linux Kernel ~2.6.22, 2.6.2ではHTX(Hardware Test eXecutive)を使用している場合、Local UserがMSR bitのクリアに関連している浮動小数点の破壊や同時実行ができるベクトルを介してDosを引き起こす
3739、hugetlb Kernelでのmm/mmap.cはKernel Page Memoryにスタック拡張が入るのを防ぐ機能がない
3850、Linux Kernel 2.6~2.6.22内のeHCAドライバでは適切にユーザ空間リソースを設定してなかったため、Local Userが物理アドレス空間の一部を読み取ることができる
6694、Linux Kernel 2.4.21~2.6.18-53ではLocal Userがchrp_show_cpuinfo関数でof_get_property関数を失敗させ、NULLポインタの参照を解除することでクラッシュを引き起こすことができる
・2009年
0029、Linux Kernel 2.6.28以前でs390, powerpc, sparc64, mips 64bitプラットフォーム上のABIは64bitレジスタの32bit引数はUser Mode Applicationから送信されたときに適切に符号拡張されているが、検知することができないため、Local Userはシステムコールを介して権限昇格やクラッシュを起こすことができる
・2010年
1446、Linux Kernel 2.6.30. 2.6.33以前バージョン内のKGDBのarch/powerpc/mm/fsl_booke_mmu.cでは適切なプラットフォームのカーネルページへのアクセスSecurity Checkが行われないため、Local UserがFsl bookeに関連して、任意のKernel Memoryを書き換えることができる
・2011年
4611、Linux Kernel 2.6.39以前ではarch/powerpc/kernel/perf_event.c内のperf_event_interrupt関数での整数オーバーフローによってLocal Userはと特定のイベントを起こすことで未処理例外モニターパフォーマンスを起こすことができる
・2012年
2100、この脆弱性は2019-4307が直されてなかったため存在したものであり、x86やその他上のLinux Kernel 3.2.2以前のfs/ext4/super.c内のext4_fill_flex_info関数によってユーザ支援型のリモートアタッカーはFLEX_BGグループを持つスーパーブロックを含むext4ファイルシステムが不正生成することでデータ不都合でサービス拒否を引き起こすことができる
・2014年
2673、Linux Kernel 3.13.7以前内のarch/powerpc/kernel/process.c内でTransaction Memory(TM)の実装のarch_dup_task_struct関数でfork,clone システムコールが適切に処理されないため、Local Userがトランザクション状態のプロセッサで実行される命令によりシステムチェックやシステムクラッシュを引き起こすことができる
4040、powerpc-utils 1.2.20ではfstabとyaboot.confを含むアーカイブを生成することで、リモート攻撃者によってtechnical-support data streamへのアクセスを利用し、機密情報を取得することができる
8165、powerpc-utils-pythonのscripts/amsvis/powerpcAMS/amsnet.pyはpicke Pythonモジュールを安全ではない使用をしているため、リモート攻撃者はシリアル化されたオブジェクトを用いて任意コードを実行することができる
・2015年
6526、Linux Kernel 4.0.2以前内のarch/powerpc/perf/callchain.cで定義されているperf_callchain_user_64関数でLocal Userによってユーザ空間バックトレースによって無限ループを引き起こすことができる
8844、Linux Kernel 4.3.5以前内のシグナル実装ではSとTの両方のbitがセットされたModel-specific registerをチェックしていないためLocal Userが悪質なアプリケーションによってTransaction Memory panicやBad thing exceptionを引き起こすことができる
8845、Linux Kernel 4.4.1以前内のarch/powerpc/kernel/process.c内で定義されたtm_reclaim_thread関数はtm_reclaim callを実行する前にTransaction Memoryのsuspend modeが存在することを確認しないため、Local UserはTransaction Memory panicやBad things exceptionを引き起こすことができる
・2016年
5412、Linux Kernel 4.7内ではarch/powerpc/kvm/book3s_hv_rmhandlers.S内のCONFIG_KVM_BOOK3S_64_HVが有効の時、guest OS Userは 中断されたトランザクションが存在する間にH_CEDE hypercallを行うことによってHost OS 無限ループを引き起こすことができる。
5828、Linux Kernel 4.6.3内のarch/powerpc/kernel/process.c内で定義されたstart_thread関数によってトランザクションの状態が誤動作しているため、Local Userはexec systemcallの前にトランザクションの開始や中断を行うことで無効なプロセス状態やTransaction Bad things exception、システムクラッシュを引き起こすことができる。