it.xnews.jp
出典: Calif 生成: 2026-10-16 読了 約 3 分 model: claude-haiku-5-5 原文: https://calif.io/research/big-fish raw.md

OpenBSDの約37年前のカーネルバグを悪用、root権限への昇格を検証

Calif は、OpenBSD カーネルの脆弱性を組み合わせることで、KARL・SMAP・SMEP を有効にした状態でもローカル環境から root 権限を取得できたとしている。問題は修正済みである。

Calif は OpenBSD カーネルの脆弱性を報告した。そのうち1件は、元の BSD ソースまでさかのぼると約37年前から存在するとされる。今年早い時期に公開された本記事では、整数オーバーフローと別の範囲外書き込みを組み合わせた悪用手法が示されている。

脆弱性の概要

問題の箇所は、元の BSD ソースにおける共有メモリのアタッチメントカウンタである。このカウンタは符号付き16-bit short として定義されていた。

同じ共有メモリのアタッチレコードを持つプロセスを繰り返しフォークすると、カウンタは最大値の32,767を超え、負の値にラップアラウンドする可能性がある。Calif の悪用経路では、127 個の SysV 共有メモリセグメントをマッピングし、259 個のプロセスをフォークしたうえで、カウンタの値は -32,643 に変えられた。

この整数オーバーフローは、レースコンディションを介した use-after-free につながる可能性がある。Calif によると、悪用は lo0 と enc0 の ioctl ハンドラを確実に狙えるとしている。

権限昇格の仕組み

Calif は、整数オーバーフローによる use-after-free と、カーネル内の別の範囲外書き込みを組み合わせることで、ローカルから root 権限への昇格が可能になったとしている。使用されたのは、持続的な struct ip_moptions の確保であり、そのために IP_MULTICAST_TTL を既定値以外の 2 に設定した。確保されるサイズは 16-byte である。

Calif は、この悪用が KARL、SMAP、SMEP を有効にした環境で成立し、情報漏えいの脆弱性は使っていないとしている。また、対処としてエラータ 026 が整数オーバーフローに、エラータ 018 が範囲外書き込みにそれぞれ割り当てられた。

防御策の提案

本記事は、以下の防御策を提案している。

Calif は、ブートタイムアロケータとベストフィットアロケータの両方に、ベースアドレスのランダム化が欠けていると指摘している。PTE ランダム化の具体的な方式としては、PML4 スロットの選択式として 320 + (random_byte & 127) が示され、PTE_BASE の候補ベース間隔は 512 GiB とされた。

ランダム化が適さない場合の代替策として、PTE を読み取り専用にし、変更時に CR0.WP を変更する方法などで足りる可能性があるとされる。

Calif は FreeBSD に対し、array bounds sanitizer が悪用緩和策として有用である可能性を示唆した。そのうえで、同sanitizer で検出できたはずの 21 件の問題を非公開で報告したとしている。

筆者の見立て

この記事は元記事の事実のみに基づいて自動生成されました。

出典

この記事をシェア