CVE-2024-50063 in Linux
要約
〜によって VulDB • 2026年05月21日
Linuxカーネルにおいて、以下の脆弱性が修正されました。
bpf: 異なるフックにアタッチされたプログラム間のテールコールを防止する
BPFプログラムはカーネル関数にアタッチ可能であり、アタッチされた関数は異なるパラメータを受け取ったり、異なる戻り値を返したりする場合があります。あるカーネル関数にアタッチされたプログラムが、別のカーネル関数にアタッチされたプログラムに対してテールコールを実行した場合、コンテキスト(ctx)へのアクセス検証や戻り値の検証を回避できる可能性があります。
例えば、1つのパラメータのみを受け取るfunc1にprog1がアタッチされ、2つのパラメータを受け取るfunc2にprog2がアタッチされているとします。ベリファイアは、prog2に渡されるBPFコンテキストがfunc2のプロトタイプに基づいて構築されると仮定するため、prog2がprog2に渡されたBPFコンテキストから2番目のパラメータにアクセスすることを許可します。問題は、ベリファイアがprog1がそのBPFコンテキストをテールコールを介してprog2に渡すことを防止していない点にあります。この場合、prog2に渡されるBPFコンテキストはfunc2ではなくfunc1から構築されるため、コンテキストアクセス検証の仮定が回避されます。
別の例として、BPF LSMプログラムprog1がフックfile_alloc_securityにアタッチされ、BPF LSMプログラムprog2がフックbpf_lsm_audit_rule_knownにアタッチされているとします。ベリファイアはこれらの2つのフックの戻り値ルールを知っており、例えばbpf_lsm_audit_rule_knownが正の数1を返すことは合法であり、file_alloc_securityが正の数を返すことは違法であるとします。したがって、ベリファイアはprog2が正の数1を返すことを許可しますが、prog1が正の数を返すことは許可しません。問題は、ベリファイアがprog1がテールコールを介してprog2を呼び出すことを防止していない点にあります。この場合、prog2の戻り値1がprog1のフックfile_alloc_securityの戻り値として使用されます。つまり、戻り値ルールが回避されます。
このパッチは、このような回避を防ぐためにテールコールに制限を追加します。
If you want to get best quality of vulnerability data, you may have to visit VulDB.