| Title | LinuxのLinux Kernelにおける解放済みメモリの使用に関する脆弱性 |
|---|---|
| Summary | Linuxカーネルにおいて、以下の脆弱性が修正されました。mptcpにおける__inet_lookup_establishedのslab-use-after-free問題が修正されました。ehashテーブルのルックアップはロックレスで行われ、RCUリードサイドクリティカルセクション中のソケットメモリの安定性を保証するためにSLAB_TYPESAFE_BY_RCUに依存しています。tcp_protおよびtcpv6_protはいずれもproto_register()を通じてこのフラグ付きでスラブキャッシュを作成します。しかし、MPTCPのmptcp_subflow_init()はinet_init()(fs_initcall、レベル5)中にtcpv6_protをtcpv6_prot_overrideにコピーしますが、inet6_init()(module_init/device_initcall、レベル6)がproto_register(&tcpv6_prot)を呼び出す前であるため、その時点でtcpv6_prot.slabはまだNULLであり、結果としてtcpv6_prot_override.slabは永続的にNULLのままになります。これにより、MPTCPのIPv6サブフロウの子ソケットはTCPv6スラブキャッシュではなくkmalloc(kmalloc-4kに該当)で割り当てられます。kmalloc-4kキャッシュはSLAB_TYPESAFE_BY_RCUを欠いているため、子ソケット用に設計上解除されているSOCK_RCU_FREEなしでこれらのソケットが解放されると、メモリが即座に再利用可能になります。その結果、rcu_read_lock下の同時ehashルックアップが解放済みメモリにアクセスし、__inet_lookup_establishedでslab-use-after-freeが発生します。この問題を修正するため、IPv6固有の初期化処理をmptcp_subflow_init()から新たなmptcp_subflow_v6_init()に分割し、プロトコル登録前にmptcp_proto_v6_init()から呼び出すようにしました。これによりtcpv6_prot_override.slabが正しくSLAB_TYPESAFE_BY_RCUスラブキャッシュを継承することが保証されます。 |
| Possible impacts | 当該ソフトウェアが扱う全ての情報が外部に漏れる可能性があります。 また、当該ソフトウェアが扱う全ての情報が書き換えられる可能性があります。 さらに、当該ソフトウェアが完全に停止する可能性があります。 そして、この脆弱性を悪用した攻撃の影響は、他のソフトウェアには及びません。 |
| Solution | リリース情報、またはパッチ情報が公開されています。参考情報を参照して適切な対策を実施してください。 |
| Publication Date | April 24, 2026, midnight |
| Registration Date | April 30, 2026, 12:31 p.m. |
| Last Update | April 30, 2026, 12:31 p.m. |
| CVSS3.0 : 緊急 | |
| Score | 9.8 |
|---|---|
| Vector | CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Linux |
| Linux Kernel 5.12 |
| Linux Kernel 5.12.1 以上 5.15.203 未満 |
| Linux Kernel 5.16 以上 6.1.169 未満 |
| Linux Kernel 6.13 以上 6.18.23 未満 |
| Linux Kernel 6.19 以上 6.19.13 未満 |
| Linux Kernel 6.2 以上 6.6.135 未満 |
| Linux Kernel 6.7 以上 6.12.82 未満 |
| Linux Kernel 7.0 |
| No | Changed Details | Date of change |
|---|---|---|
| 1 | [2026年04月30日] 掲載 |
April 30, 2026, 12:31 p.m. |
| Summary | In the Linux kernel, the following vulnerability has been resolved: mptcp: fix slab-use-after-free in __inet_lookup_established The ehash table lookups are lockless and rely on However, MPTCP's mptcp_subflow_init() copies tcpv6_prot into This causes MPTCP v6 subflow child sockets to be allocated via Fix this by splitting the IPv6-specific initialization out of |
|---|---|
| Publication Date | April 25, 2026, 12:16 a.m. |
| Registration Date | April 25, 2026, 4:08 a.m. |
| Last Update | April 28, 2026, 12:16 a.m. |