Linux Kernelの脆弱性情報(Important: CVE-2018-14656)



こちらでは主にOSSの脆弱性を取り上げていきます。10/04/2018にLinux Kernelの脆弱性情報(Important: CVE-2018-14656)が公開されています。今回はこの脆弱性の概要と、各ディストリビューションの対応について簡単にまとめてみます。


こんにちは。SIOS OSSエバンジェリスト/セキュリティ担当の面 和毅です。

こちらでは主にOSSの脆弱性を取り上げていきます。10/04/2018にLinux Kernelの脆弱性情報(Important: CVE-2018-14656)が公開されています。今回はこの脆弱性の概要と、各ディストリビューションの対応について簡単にまとめてみます。



Priority

  • CVE-2018-14656
    • Important
    • CVSS Severity (version 3.0):
      • Red Hat Customer Portal
        • CVSS v3 Base Score: 4.7
        • Vector: CVSS:3.0/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:N/A:N
      • NVD

修正方法

各ディストリビューションの情報を確認してください。

CVE概要(詳細はCVEのサイトをご確認ください)

  • https://bugzilla.redhat.com/show_bug.cgi?id=1629940
    • 任意のアドレスのKernelメモリ読み出しの可能性
    • 重要度 – Important
    • Linux kernelのshow_opcodes()でのcallerで、アドレスチェックに不足があったため、攻撃者が任意のカーネルアドレスのメモリをdmesgログにダンプすることが可能です。
    • この問題の修正は以下になります。
    • 
      diff --git a/arch/x86/include/asm/stacktrace.h b/arch/x86/include/asm/stacktrace.h
      index b6dc698f992a..f335aad404a4 100644
      --- a/arch/x86/include/asm/stacktrace.h
      +++ b/arch/x86/include/asm/stacktrace.h
      @@ -111,6 +111,6 @@ static inline unsigned long caller_frame_pointer(void)
      return (unsigned long)frame;
      }
      -void show_opcodes(u8 *rip, const char *loglvl);
      +void show_opcodes(struct pt_regs *regs, const char *loglvl);
      void show_ip(struct pt_regs *regs, const char *loglvl);
      #endif /* _ASM_X86_STACKTRACE_H */
      diff --git a/arch/x86/kernel/dumpstack.c b/arch/x86/kernel/dumpstack.c
      index 1596e6bfea6f..f56895106ccf 100644
      --- a/arch/x86/kernel/dumpstack.c
      +++ b/arch/x86/kernel/dumpstack.c
      @@ -90,14 +90,24 @@ static void printk_stack_address(unsigned long address, int reliable,
      * Thus, the 2/3rds prologue and 64 byte OPCODE_BUFSIZE is just a random
      * guesstimate in attempt to achieve all of the above.
      */
      -void show_opcodes(u8 *rip, const char *loglvl)
      +void show_opcodes(struct pt_regs *regs, const char *loglvl)
      {
      #define PROLOGUE_SIZE 42
      #define EPILOGUE_SIZE 21
      #define OPCODE_BUFSIZE (PROLOGUE_SIZE + 1 + EPILOGUE_SIZE)
      u8 opcodes[OPCODE_BUFSIZE];
      +	unsigned long prologue = regs->ip - PROLOGUE_SIZE;
      +	bool bad_ip;
      -	if (probe_kernel_read(opcodes, rip - PROLOGUE_SIZE, OPCODE_BUFSIZE)) {
      +	/*
      +	 * Make sure userspace isn't trying to trick us into dumping kernel
      +	 * memory by pointing the userspace instruction pointer at it.
      +	 */
      +	bad_ip = user_mode(regs) &&
      +		__chk_range_not_ok(prologue, OPCODE_BUFSIZE, TASK_SIZE_MAX);
      +
      +	if (bad_ip || probe_kernel_read(opcodes, (u8 *)prologue,
      +					OPCODE_BUFSIZE)) {
      printk("%sCode: Bad RIP value.\n", loglvl);
      } else {
      printk("%sCode: %" __stringify(PROLOGUE_SIZE) "ph <%02x> %"
      @@ -113,7 +123,7 @@ void show_ip(struct pt_regs *regs, const char *loglvl)
      #else
      printk("%sRIP: %04x:%pS\n", loglvl, (int)regs->cs, (void *)regs->ip);
      #endif
      -	show_opcodes((u8 *)regs->ip, loglvl);
      +	show_opcodes(regs, loglvl);
      }
      void show_iret_regs(struct pt_regs *regs)
      diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c
      index b9123c497e0a..47bebfe6efa7 100644
      --- a/arch/x86/mm/fault.c
      +++ b/arch/x86/mm/fault.c
      @@ -837,7 +837,7 @@ show_signal_msg(struct pt_regs *regs, unsigned long error_code,
      printk(KERN_CONT "\n");
      -	show_opcodes((u8 *)regs->ip, loglvl);
      +	show_opcodes(regs, loglvl);
      }
      static void
      

主なディストリビューションの対応方法

詳細は、各ディストリビューションの提供元にご確認ください


対処方法

各ディストリビューションの案内に従い、アップデートを行ってください。全てのRed Hat製品でパッチが行き渡っているかを確認するには、Red Hat SatelliteやKatello、Spacewalk等を使うと管理が便利でしょう。

また、OSの再起動が発生しますので、peacemakerなどOSSのクラスタ製品やLifeKeeperなどの商用のクラスタリング製品を使うとサービス断の時間を最小限にすることが出来ます。

セキュリティ系連載案内


セミナー情報 1

2018年10月22日から10月25日のCSS(Computer Security Symposium)2018で、「OSSセキュリティ技術ワークショップ(OWS) 2018特別セッション」 と題しまして、OSSセキュリティ技術の会後援で特別セッションを開催します。

https://www.iwsec.org/ows/2018/index.htmlにプログラム内容と一般論文申し込みの詳細を載せていきますので、是非御確認下さい(ページは更新中です)。



セミナー情報

2018/11/05 19:00に、「2018年秋のBPFまつり」と題しまして、OSSセキュリティ技術の会 第四回勉強会を行います。

今回のテーマはBPF(Berkeley Packet Filter)になります。

https://secureoss-sig.connpass.com/event/103763/がプログラム内容と申し込みの詳細になります。奮ってご参加下さい。

タイトルとURLをコピーしました