
CVE-2021-3490 に関連する Linux eBPF サブシステムとの相互作用を示す研究実装。BPF マップ作成、syscall ラッパー、namespace 設定、および verifier 解析が含まれます。教育およびセキュリティ研究目的のみに使用してください。
CVE-2021-3490 に関連する Linux eBPF サブシステムとの相互作用を示す研究実装です。BPF マップの作成、syscall ラッパー、名前空間のセットアップ、検証器の分析を含みます。教育およびセキュリティ研究のみを目的としています。
CVE-2021-3490 – eBPF 検証器のバウンド追跡分析 概要
このリポジトリには、CVE-2021-3490 に関連する Linux カーネル eBPF サブシステムを調査する C 実装が含まれています。CVE-2021-3490 は、eBPF 検証器における 32 ビット境界追跡の不正確さに関わる脆弱性です。
このプロジェクトの目的は、bpf() システムコールが内部でどのように動作するか、BPF マップがユーザースペースからどのように作成・管理されるか、そして検証器がレジスタの制約をどのように扱うかを理解することです。これはカーネル内部とセキュリティ分析に焦点を当てた研究・学習プロジェクトです。
このコードは本番環境での使用を意図していません。
背景
eBPF を使用すると、ユーザースペースのプログラムは検証済みのバイトコードを Linux カーネルにロードできます。実行前に、カーネル検証器はプログラムが次の条件を満たしているかを確認します。
安全でないメモリアクセスを行わない
レジスタの境界内に留まる
カーネルの安全規則に違反しない
脆弱なカーネルバージョンでは、特定の ALU 操作中に検証器が 32 ビット境界を誤って追跡していました。この欠陥により、細工されたプログラムが検証ロジックをバイパスできる可能性がありました。
公式の詳細:
NVD: https://nvd.nist.gov/vuln/detail/CVE-2021-3490
Ubuntu セキュリティ通知: https://ubuntu.com/security/CVE-2021-3490
Red Hat アドバイザリ: https://access.redhat.com/security/cve/CVE-2021-3490
このプロジェクトが示す内容
この実装は以下に焦点を当てています:
bpf() システムコールの直接使用
union bpf_attr の手動定義
BPF マップの作成 (BPF_MAP_TYPE_ARRAY)
マップ要素の更新と照会
BPF オブジェクトのメタデータ取得
制御された実行のための名前空間セットアップ
これは、ユーザースペースがカーネル BPF インフラストラクチャとどのように相互作用するかを理解するのに役立つように設計されています。
このリポジトリには、自動化されたエクスプロイトペイロードロジックは含まれていません。
テスト環境
Ubuntu 20.10 (Groovy)
Linux kernel 5.8.0-48-generic
カーネルバージョンは次のコマンドで確認できます:
uname -r
パッチ適用済みまたは新しいカーネルでは、動作が異なる場合があります。
ビルド
GCC を使用してコンパイル:
gcc -o exploit exploit.c -lpthread
標準の Linux ヘッダー以外に外部ライブラリは必要ありません。
使用方法
プログラムを実行:
./exploit
このプログラムは次のことを行います:
ユーザー名前空間とネットワーク名前空間を構成
BPF マップを作成
要素を挿入
マップのメタデータを照会
実行結果を表示
セキュリティに関する注意
このプロジェクトは以下の目的のためのものです:
教育目的
カーネルセキュリティ研究
eBPF 内部の理解
管理されたラボ環境
適切な許可なしにこのコードをシステム上で実行しないでください。
学習目標
このプロジェクトを通じて、以下を理解できます:
Linux カーネルが BPF インターフェースをどのように公開するか
BPF マップがどのように構造化されているか
検証器ロジックがユーザースペースの入力とどのように相互作用するか
低レベルのシステムコールを手動でどのように構築するか