37年前のカーネルバグを突き、OpenBSDでroot権限を奪取
Big Fish: Exploiting a 37-Year-Old Kernel Bug in OpenBSD
Califは、OpenBSDの共有メモリカウンタが37年前のBSDソースに遡る符号付き16ビットshortとして定義されていた整数オーバーフローを悪用し、KARL/SMAP/SMEP有効下でローカルroot権限昇格に成功した。フォークによるカウンタのラップアラウンドからuse-after-freeと境界外書き込みを連鎖させ、情報漏洩脆弱性なしにカーネルコード実行を達成。修正はerrata 026と018で提供され、安全なアンリンクやPTEマップのランダム化などの緩和策も提案されている。
この脆弱性は最終的にwrite what whereプリミティブによるコード実行に至った。writeはTAILQ_REMOVEによって引き起こされ、whatはSMAP/SMEPを回避するためにスーパーバイザモードでアクセス可能にされたユーザーランドメモリマッピングであり、whereは予測可能なカーネルポインタ位置であった。