| タイトル | LinuxのLinux Kernelにおける境界外読み取りに関する脆弱性 |
|---|---|
| 概要 | Linuxカーネルにおいて、以下の脆弱性が修正されました。netfilter: nf_conntrack_h323のdecode_choice()関数内で発生していた範囲外読み取り(OOB読み取り)の問題です。decode_choice()関数では、get_len()の前の境界チェックで、関数冒頭で初期化されたままの変数`len`(値は0)を使用していました。具体的には、unsigned int type, ext, len = 0; ... if (ext || (son-attr & OPEN)) {BYTE_ALIGN(bs); if (nf_h323_error_boundary(bs, len, 0)) /* ここでlenは0 */ return H323_ERROR_BOUND; len = get_len(bs); /* OOB読み取り */}ビットストリームがちょうど消費され(bs-cur == bs-end)た場合、nf_h323_error_boundary(bs, 0, 0)の判定は(bs-cur + 0 bs-end)となり、falseになります。これにより、その後のget_len()呼び出しは*bs-cur++を逆参照し、バッファの終端を1バイト越えて読み取ってしまいます。もし読み取ったバイトのビット7がセットされている場合、get_len()はさらに2バイト目も読み取ります。この問題は、nf_conntrack_h323ヘルパーが有効なファイアウォールを介して、PERエンコードされた2バイト({0x08, 0x00})のUser-User Information Elementを含む細工されたQ.931 SETUPメッセージをポート1720に送信することでリモートから引き起こすことができます。デコーダはPERバッファを完全に消費した後にこのコードパスに達するため、1から2バイトのヒープバッファオーバーフロー読み取りが発生し、AddressSanitizerによって検出されました。この問題は、初期化されていない`len`の代わりにget_len()が読み取る可能性のある最大2バイトをチェックすることで修正されました。この修正は、同じファイルの他のget_len()呼び出し箇所で用いられている、呼び出し前に利用可能なデータが2バイト以上あることを確認するパターンと一致しています。 |
| 想定される影響 | 当該ソフトウェアが扱う情報の一部が外部に漏れる可能性があります。 また、当該ソフトウェアが扱う情報について、書き換えは発生しません。 さらに、当該ソフトウェアが完全に停止する可能性があります。 そして、この脆弱性を悪用した攻撃の影響は、他のソフトウェアには及びません。 |
| 対策 | リリース情報、またはパッチ情報が公開されています。参考情報を参照して適切な対策を実施してください。 |
| 公表日 | 2026年5月6日0:00 |
| 登録日 | 2026年5月14日10:16 |
| 最終更新日 | 2026年5月14日10:16 |
| CVSS3.0 : 重要 | |
| スコア | 8.2 |
|---|---|
| ベクター | CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:H |
| Linux |
| Linux Kernel 4.15 |
| Linux Kernel 4.15.1 以上 5.10.252 未満 |
| Linux Kernel 5.11 以上 5.15.202 未満 |
| Linux Kernel 5.16 以上 6.1.165 未満 |
| Linux Kernel 6.13 以上 6.18.16 未満 |
| Linux Kernel 6.19 以上 6.19.6 未満 |
| Linux Kernel 6.2 以上 6.6.128 未満 |
| Linux Kernel 6.7 以上 6.12.75 未満 |
| Linux Kernel 7.0 |
| No | 変更内容 | 変更日 |
|---|---|---|
| 1 | [2026年05月14日] 掲載 |
2026年5月14日10:16 |
| 概要 | In the Linux kernel, the following vulnerability has been resolved: netfilter: nf_conntrack_h323: fix OOB read in decode_choice() In decode_choice(), the boundary check before get_len() uses the unsigned int type, ext, len = 0; When the bitstream is exactly consumed (bs->cur == bs->end), the check This can be triggered remotely by sending a crafted Q.931 SETUP message Fix this by checking for 2 bytes (the maximum that get_len() may read) |
|---|---|
| 公表日 | 2026年5月6日21:16 |
| 登録日 | 2026年5月7日4:08 |
| 最終更新日 | 2026年5月8日22:16 |