Ubuntu 18.04 LTS / 20.04 LTS : Linux カーネルの脆弱性 (USN-6726-1)

high Nessus プラグイン ID 193081

概要

リモート Ubuntu ホストに 1 つ以上のセキュリティ更新がありません。

説明

リモートの Ubuntu 18.04 LTS / 20.04 LTS ホストには、USN-6726-1 のアドバイザリに記載された複数の脆弱性の影響を受けるパッケージがインストールされています。

- Xen の仮想ネットワークプロトコルでの送信リクエストは、複数の部分で構成される場合があります。あまり有用ではありませんが、最初の部分を除いて、それらのいずれも長さがゼロ、つまり、データをまったく伝送しない可能性があります。転送されるデータの最初の特定の部分に加えて、これらの部分は Linux が SKB フラグメントと呼ぶものに直接変換されます。このように変換されたリクエスト部分は、特定の SKB の長さがすべてゼロの場合、コアネットワーキングコードで NULL のデリファレンスを引き起こす可能性があります。(CVE-2023-46838)

- 6.7.4 までの Linux カーネルの drivers/md/dm-table.c 内の dm_table_create は、dm_ioctl.target_count 構造のチェックがないため、(alloc_targets で) INT_MAX バイトを超えて割り当てようとして、クラッシュする可能性があります。(CVE-2023-52429)

- Linux カーネルで、以下の脆弱性が解決されています。f2fs: xattr リストを明示的に NULL 終了させます xattr を設定する際、xattr リストを明示的に NULL 終了させます。これにより、未使用の xattr スペースが常にゼロに設定されているという脆弱な前提がなくなります。(CVE-2023-52436)

- Linux カーネルでは、次の脆弱性が解決されています。binder: shinker のコールバックのメモリ解放後使用 (Use After Free) を修正します mmap 読み取りロックが shrinker のコールバック中に使用されるため、alloc->vma ポインターの使用は安全でなくなり、munmap() と競合する可能性があります。コミット dd2283f2605e (mm: mmap: munmap の読み取り mmap_sem による zap ページ) の時点では、vma が分離された後に mmap ロックがダウングレードされています。一部の遅延を手動で追加し、shrinker のデバッグ sysfs を通じてページ再利用をトリガーすることで、この問題を再現できました。次の KASAN レポートでも UAF が確認されています。
================================================================== BUG: KASAN: slab-use-after-free in zap_page_range_single+0x470/0x4b8 Read of size 8 at addr ffff356ed50e50f0 by task bash/478 CPU: 1 PID: 478 Comm: bash Not tainted 6.6.0-rc5-00055-g1c8b86a3799f-dirty #70 ハードウェア名: linux,dummy-virt (DT) 呼び出しトレース: zap_page_range_single+0x470/0x4b8 binder_alloc_free_page+0x608/0xadc
__list_lru_walk_one+0x130/0x3b0 list_lru_walk_node+0xc4/0x22c binder_shrink_scan+0x108/0x1dc shrinker_debugfs_scan_write+0x2b4/0x500 full_proxy_write+0xd4/0x140 vfs_write+0x1ac/0x758 ksys_write+0xf0/0x1dc __arm64_sys_write+0x6c/0x9c Allocated by task 492: kmem_cache_alloc+0x130/0x368 vm_area_alloc+0x2c/0x190 mmap_region+0x258/0x18bc do_mmap+0x694/0xa60 vm_mmap_pgoff+0x170/0x29c ksys_mmap_pgoff+0x290/0x3a0 __arm64_sys_mmap+0xcc/0x144 Freed by task 491: kmem_cache_free+0x17c/0x3c8 vm_area_free_rcu_cb+0x74/0x98 rcu_core+0xa38/0x26d4 rcu_core_si+0x10/0x1c __do_softirq+0x2fc/0xd24 最後に関連する作業の作成: __call_rcu_common.constprop.0+0x6c/0xba0 call_rcu+0x10/0x1c vm_area_free+0x18/0x24 remove_vma+0xe4/0x118 do_vmi_align_munmap.isra.0+0x718/0xb5c do_vmi_munmap+0xdc/0x1fc __vm_munmap+0x10c/0x278 __arm64_sys_munmap+0x58/0x7c mmap ロックダウングレードの前に分離された vma を見つけることに失敗する vma_lookup() を代わりに実行することで、この問題を修正します。
注意: コンテンションを増加させる可能性のある mmap 書き込みロックにアップグレードするよりも、このオプションのパフォーマンスが向上します。また、いずれにしても mmap_write_trylock() は最近削除されました。(CVE-2023-52438)

- Linux カーネルでは、以下の脆弱性が解決されています。uio: uio_open core-1 core-2 におけるメモリ解放後使用 (Use After Free) の修正 ------------------------------------------------------- uio_unregister_device uio_open idev = idr_find() device_unregister(&idev->dev) put_device(&idev->dev) uio_device_release get_device(&idev->dev) kfree(idev) uio_free_minor(minor) uio_release put_device(&idev->dev) kfree(idev)
-------------------------------------------------- ----- core-1 uio_unregister_device() で、idev->dev kobject ref が 1 の場合、device_unregister は idev を kfree します。しかし、core-1 device_unregister、put_device の後、かつ kfree を行う前に、core-2 は get_device することがあります。1. core-1 が idev を kfree した後、core-2 は idev に対してメモリ解放後使用 (Use After Free) を実行します。2. core-2 が uio_release および put_device を行う場合、idev が二重解放されます。この問題に対処するために、minor_lock で idev atomic および inc idev 参照を取得できます。
(CVE-2023-52439)

- Linux カーネルで、以下の脆弱性が解決されています。apparmor: 解析されたプロファイル名が空の場合にクラッシュを回避します。unpack_profile() でパックされたプロファイルを処理する際に、profile :ns::samba-dcerpcd /usr/lib*/samba/{,samba/}samba-dcerpcd {...} のように記述されます。文字列 :samba-dcerpcd が完全修飾名として解凍され、aa_splitn_fqname() に渡されます。aa_splitn_fqname() は、名前空間のみを含むものとして :samba-dcerpcd を扱います。したがって、tmpname に対して NULL を返しますが、tmpns は非 NULL です。新しいプロファイル名が現在 NULL であるため、後で aa_alloc_profile() がクラッシュします。一般保護違反、おそらく非標準アドレス 0xdffffc0000000000: 0000 [#1] PREEMPT SMP KASAN NOPTI KASAN: 範囲 [0x0000000000000000-0x0000000000000007] の null-ptr-deref CPU: 6 PID: 1657 Comm: apparmor_parser 汚染されていない 6.7.0-rc2-dirty #16 ハードウェア名: QEMU Standard PC (i440FX + PIIX、1996)、BIOS rel-1.16.2-3-gd478f380-rebuilt.opensuse.org 04/01/2014 RIP: 0010:strlen+0x1e/0xa0 呼び出しトレース: <TASK> ? strlen+0x1e/0xa0 aa_policy_init+0x1bb/0x230 aa_alloc_profile+0xb1/0x480 unpack_profile+0x3bc/0x4960 aa_unpack+0x309/0x15e0 aa_replace_profiles+0x213/0x33c0 policy_update+0x261/0x370 profile_replace+0x20e/0x2a0 vfs_write+0x2af/0xe00 ksys_write+0x126/0x250 do_syscall_64+0x46/0xf0 entry_SYSCALL_64_after_hwframe+0x6e/0x76 </TASK> ---[ end trace 0000000000000000 ]--- RIP:
0010:strlen+0x1e/0xa0 aa_splitn_fqname() のこのような動作は予期されるものであり、呼び出される他の場所 (aa_remove_profiles など) でチェックされるようです。次のプロファイルのない ns 名が内部で許可されているという明示的なコメントがあります。AFAICS、解凍された名前が「samba-dcerpcd - ユーザー空間から渡される」のような形式になることを妨げるものはありません。このような場合、プロファイルセット全体の置換を拒否し、EPROTO および説明メッセージをユーザーに通知します。Linux Verification Center (linuxtesting.org) による発見。
(CVE-2023-52443)

- Linux カーネルで、次の脆弱性が解決されました。f2fs: dirent 破損を回避するための修正 Link[1] で Al が報告したとおり: f2fs_rename() ... if (old_dir != new_dir && !whiteout) f2fs_set_link(old_inode, old_dir_entry, old_dir_page, new_dir); else f2fs_put_page(old_dir_page, 0); .. リンクで正しい inumber が必要です。また、古い場所にホワイトアウトを残すように求められていたとしても、クロスディレクトリの名前の変更により、ソースは新しい親に移動します。[1] https://lore.kernel.org/all/20231017055040.GN800259@ZenIV/ 以下のテストケースでは、.. を更新する f2fs_set_link() の呼び出しを逃したため、dirent の破損を引き起こす可能性があります。
新しいディレクトリへのリンク。- mkdir -p dir/foo - renameat2 -w dir/foo bar [ASSERT] (__chk_dots_dentries:1421)
--> 「..」に対する不良な inode 番号 [0x4]、親の親 ino は [0x3] [FSCK] 他の破損したバグ [失敗] (CVE-2023-52444)

- Linux カーネルでは、次の脆弱性が解決されています。メディア: pvrusb2: コンテキスト切断時のメモリ解放後使用 (Use After Free) を修正します。モジュールがロードされると、pvr2_context_thread_func 関数をターゲットとする kthread が作成されます。これにより、pvr2_context_destroy を呼び出し、コンテキストオブジェクトで kfree() を呼び出す可能性があります。ただし、これは usb hub_event ハンドラーがドライバーに通知できるようになる前に発生する可能性があります。このパッチは、syzbot により報告される無効な読み取りの前に、コンテキスト切断コールスタック内でのサニティチェックを追加します。(CVE-2023-52445)

- Linux カーネルでは、次の脆弱性が解決されています。gfs2: gfs2_rgrp_dump のカーネル NULL ポインターデリファレンスを修正します。Syzkaller 氏が、gfs2_rgrp_dump() の rgd->rd_rgl にアクセスするときの NULL ポインターデリファレンスを報告しました。これは、read_rindex_entry() で rgd->rd_gl の作成が失敗したときに発生する可能性があります。それを防ぐために、gfs2_rgrp_dump() に NULL ポインターチェックを追加します。(CVE-2023-52448)

- Linux カーネルでは、次の脆弱性が解決されています。mtd: ftl notifier によって引き起こされた gluebi NULL ポインターデリファレンスを修正します。ftl.ko と gluebi.ko の両方がロードされている場合、ftl の通知子が、gluebi_read() の gluebi->desc' にアクセスを試みる際に、NULL ポインターデリファレンスをトリガーします。ubi_gluebi_init ubi_register_volume_notifier ubi_enumerate_volumes ubi_notify_all gluebi_notify nb->notifier_call() gluebi_create mtd_device_register mtd_device_parse_register add_mtd_device blktrans_notify_add not->add() ftl_add_mtd tr->add_mtd() scan_header mtd_read mtd_read_oob mtd_read_oob_std gluebi_read mtd->read() gluebi->desc - NULL Detailed の複製情報はリンク [1] で入手可能です。通常の場合、gluebi_get_device() で gluebi->desc を取得し、gluebi_read() で gluebi->desc にアクセスします。ただし、gluebi_get_device() が ftl_add_mtd() プロセスで事前に実行されないため、NULL ポインターデリファレンスが発生します。gluebi モジュールのソリューションは、ftl または mtdblock との連携を考慮せずに、UBI ボリュームで jffs2 を実行することです [2]。したがって、MTD_UBIVOLUME タイプの mtd パーティションを作成した後にgluebi が mtdblock デバイスを作成しないようにすることで、この問題を回避できます。(CVE-2023-52449)

- Linux カーネルで、次の脆弱性が解決されています。powerpc/pseries/memhp: drmem 配列の終端を超えたアクセスを修正します。LMB 検索が特定の DRC インデックスによるエントリと一致しない場合、dlpar_memory_remove_by_index() が drmem lmb 配列の境界を超えてアクセスする可能性があります。検索が失敗すると、カーソルは &drmem_info->lmbs[drmem_info->n_lmbs] を指したままになります。これは、配列の最後の有効なエントリの後の 1 要素です。関数の末尾にあるデバッグメッセージは、このポインターを逆参照します。
pr_debug(%llx\n、lmb->base_addr でメモリをホットリムーブすることに失敗しました)。これは、検査の結果見つかり、KASAN で確認されました。pseries-hotplug-mem: LMB をホットリムーブしようとします、drc index 1234 ================================================================== BUG: KASAN: dlpar_memory+0x298/0x1658 の slab-out-of-bounds タスク bash/949 dump_stack_lvl+0xa4/0xfc (信頼できない) による addr c000000364e97fd0 でのサイズ 8 の読み取り
__asan_load8+0xa8/0xe0 dlpar_memory+0x298/0x1658 handle_dlpar_errorlog+0x130/0x1d0 dlpar_store+0x18c/0x3e0 kobj_attr_store+0x68/0xa0 sysfs_kf_write+0xc4/0x110 kernfs_fop_write_iter+0x26c/0x390 vfs_write+0x2d4/0x4e0 ksys_write+0xac/0x1a0 system_call_exception+0x268/0x530 system_call_vectored_common+0x15c/0x2ec Allocated by task 1: kasan_save_stack+0x48/0x80 kasan_set_track+0x34/0x50 kasan_save_alloc_info+0x34/0x50 __kasan_kmalloc+0xd0/0x120 __kmalloc+0x8c/0x320 kmalloc_array.constprop.0+0x48/0x5c drmem_init+0x2a0/0x41c do_one_initcall+0xe0/0x5c0 kernel_init_freeable+0x4ec/0x5a0 kernel_init+0x30/0x1e0 ret_from_kernel_user_thread+0x14/0x1c バグのあるアドレスは、13kloc のサイズ 131072 のキャッシュ kmalloc-128k に属する c000000364e80000 のオブジェクトに属します。バグのあるアドレスは、割り当てられた 98256 バイトの領域[c000000364e80000、c000000364e97fd0) の右の 0 バイトに配置されています ================================================================== pseries-hotplug-mem:
0 でメモリをホットリムーブするのに失敗しました。失敗した検索を別のメッセージでログし、有効なエントリを指している場合にのみカーソルをデリファレンスします。(CVE-2023-52451)

- Linux カーネルでは、次の脆弱性が解決されています。nvmet-tcp: ホストが無効な H2C PDU 長を送信するときのカーネルパニックを修正します。ホストが無効な DATAL で H2CData コマンドを送信する場合、カーネルが nvmet_tcp_build_pdu_iovec() でクラッシュすることがあります。仮想アドレス 0000000000000000 でカーネルの NULL ポインターデリファレンスを処理できません lr : nvmet_tcp_io_work+0x6ac/0x718 [nvmet_tcp] 呼び出しトレース:
process_one_work+0x174/0x3c8 worker_thread+0x2d0/0x3e8 kthread+0x104/0x110 DATAL がパケットサイズと首尾一貫しない場合に致命的なエラーが発生することにより、バグを修正します。また、PDU の長さは、nvmet_tcp_handle_icreq() でホストに伝達された MAXH2CDATA パラメーターを決して超えてはなりません。(CVE-2023-52454)

- Linux カーネルでは、次の脆弱性は解決されています。serial: 8250: omap: pm_runtime_resume_and_get() が失敗した場合、リソース解放をスキップしないでください。.remove() からエラーコードを返すと、ドライバーコアに役に立つエラーメッセージが出力されます。削除コールバックがゼロ以外の値を返しました。これは無視されます。それから、デバイスを削除します。したがって、この場合、解放されなかったすべてのリソースは漏洩します。
serial8250_unregister_port() をスキップすると、メモリ解放後使用 (Use After Free) をトリガーするのに十分な UART が周囲に残る可能性があります。そのため、エラーリターン (それと少し役立つエラーメッセージ) を、より有用なエラーメッセージで置き換え、クリーンアップを継続します。(CVE-2023-52457)

- Linux カーネルで、次の脆弱性が解決されています。EDAC/thunderx: 領域外の文字列アクセスの可能性を修正します -Wstringop-overflow をグローバルに有効にすると、strncat() の使用における一般的なバグの警告が表示されます。drivers/edac/thunderx_edac.c: 「thunderx_ocx_com_threaded_isr」関数内:
drivers/edac/thunderx_edac.c:1136:17: error: 'strncat' specified bound 1024 equals destination size [-Werror=stringop-overflow=] 1136 | strncat(msg, other, OCX_MESSAGE_SIZE); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ... 1145 | strncat(msg, other, OCX_MESSAGE_SIZE); ... 1150 | strncat(msg, other, OCX_MESSAGE_SIZE); ... 明らかに、このドライバーの作成者は、strncat() が strlcat() と同じように動作することを期待していました。これは、ソースバッファの長さではなく、宛先バッファのサイズを 3 番目の引数として使用します。その結果、割り当てられたバッファのサイズはチェックされません。これを strlcat() に変更します。[ bp: コンパイラ出力をトリミングし、コミットメッセージを修正。] (CVE-2023-52464)

- Linux カーネルでは、次の脆弱性が解決されています。drivers/amd/pm: kv_parse_power_table のメモリ解放後使用 (Use After Free) を修正します kzalloc によって割り当てられた ps が NULL の場合、kv_parse_power_table は、より前に割り当てられていた adev->pm.dpm.ps を解放します。ただし、制御フローが以下の呼び出しチェーンを通過した後: kv_parse_power_table |-> kv_dpm_init |-> kv_dpm_sw_init |-> kv_dpm_fini adev->pm.dpm.ps は、kv_parse_power_table で最初に解放された後、kv_dpm_fini の for ループで使用され、メモリ解放後使用 (Use After Free) のバグを引き起こします。(CVE-2023-52469)

- Linux カーネルで、以下の脆弱性は解決されています。drm/radeon: radeon_crtc_init() で alloc_workqueue の戻り値をチェックし、radeon_crtc_init() で alloc_workqueue の戻り値をチェックして、null-ptr-deref を回避します。(CVE-2023-52470)

- Linux カーネルでは、次の脆弱性が解決されています。binder: mmput() と do_exit() の間の競合を修正します。タスク A は、binder_update_page_range() を呼び出して、タスク B からリモートアドレス空間にページを割り当て、挿入します。タスク A は、最初に mmget_not_zero() を介してリモートの mm を固定します。これは、タスク B の do_exit() と競合する可能性があり、最終的な mmput() refcount の減少はタスク A から行われることになります。タスク A | タスク B
------------------+------------------ mmget_not_zero() | | do_exit() | exit_mm() | mmput() mmput() | exit_mmap() | remove_vma() | fput() | この場合、タスク B からの ____fput() の作業は、タスク A で TWA_RESUME としてキューに入れられます。したがって理論上は、タスク A はユーザー空間に戻り、クリーンアップ作業が実行されます。
しかし、タスク A は代わりにスリープし、タスク B からの返信が来ることのない (応答していない) 返信を待っています。これは、関連のないバインダーイベントによってタスク A がユーザー空間に戻されるまで、binder_deferred_release() がブロックされることを意味します。関連するすべての消滅通知も、それまで延期されます。これを修正するには、タスク A の代わりに対応する mm->async_put_work WQ で作業をスケジュールする mmput_async() を使用します。(CVE-2023-52609)

- Linux カーネルでは、次の脆弱性が解決されています。crypto: scomp - req->dst バッファオーバーフローを修正します req->dst バッファオーバーフローの問題を回避するために、scomp_scratch->dst からコピーする前に req->dst バッファサイズをチェックする必要があります。(CVE-2023-52612)

- Linux カーネルの Netfilter サブシステムで欠陥が発見されました。問題は nft_byteorder_eval() 関数にあり、コードがループを繰り返して「dst」配列に書き込みます。各反復で 8 バイトが書き込まれますが、「dst」は u32 の配列であるため、各要素には 4 バイト分のスペースしかありません。つまり、反復するたびに前の要素の一部が上書きされ、この u32 の配列が破損してしまいます。この欠陥により、ローカルユーザーがサービス拒否を引き起こしたり、NetFilter の機能を破壊したりする可能性があります。(CVE-2024-0607)

- 6.7.1 までの Linux カーネルの drivers/md/dm-ioctl.c の copy_params は、param_kernel->data_size チェックがないため、INT_MAX バイトを超える割り当てを試みてクラッシュする可能性があります。これは、ctl_ioctl に関連しています。(CVE-2024-23851)

- Linux カーネルで、次の脆弱性が解決されています。net: qualcomm: rmnet_policy のグローバル oob が修正されます。変数 rmnet_link_ops は、*大きな* maxtype を割り当てます。これにより、netlink 属性を解析するときに、グローバルな領域外読み取りが引き起こされます。以下のバグトレースを参照してください。
================================================================== BUG: KASAN: global-out-of-bounds in validate_nla lib/nlattr.c:386 [inline] BUG: KASAN: global-out-of-bounds in
__nla_validate_parse+0x24af/0x2750 lib/nlattr.c:600 Read of size 1 at addr ffffffff92c438d0 by task syz-executor.6/84207 CPU: 0 PID: 84207 Comm: syz-executor.6 Tainted: G N 6.1.0 #3 ハードウェア名: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.13.0-1ubuntu1.1 04/01/2014 Call Trace: <TASK> __dump_stack lib/dump_stack.c:88 [inline] dump_stack_lvl+0x8b/0xb3 lib/dump_stack.c:106 print_address_description mm/kasan/report.c:284 [inline] print_report+0x172/0x475 mm/kasan/report.c:395 kasan_report+0xbb/0x1c0 mm/kasan/report.c:495 validate_nla lib/nlattr.c:386 [inline] __nla_validate_parse+0x24af/0x2750 lib/nlattr.c:600 __nla_parse+0x3e/0x50 lib/nlattr.c:697 nla_parse_nested_deprecated include/net/netlink.h:1248 [inline] __rtnl_newlink+0x50a/0x1880 net/core/rtnetlink.c:3485 rtnl_newlink+0x64/0xa0 net/core/rtnetlink.c:3594 rtnetlink_rcv_msg+0x43c/0xd70 net/core/rtnetlink.c:6091 netlink_rcv_skb+0x14f/0x410 net/netlink/af_netlink.c:2540 netlink_unicast_kernel net/netlink/af_netlink.c:1319 [inline] netlink_unicast+0x54e/0x800 net/netlink/af_netlink.c:1345 netlink_sendmsg+0x930/0xe50 net/netlink/af_netlink.c:1921 sock_sendmsg_nosec net/socket.c:714 [inline] sock_sendmsg+0x154/0x190 net/socket.c:734 ____sys_sendmsg+0x6df/0x840 net/socket.c:2482
___sys_sendmsg+0x110/0x1b0 net/socket.c:2536 __sys_sendmsg+0xf3/0x1c0 net/socket.c:2565 do_syscall_x64 arch/x86/entry/common.c:50 [inline] do_syscall_64+0x3b/0x90 arch/x86/entry/common.c:80 entry_SYSCALL_64_after_hwframe+0x63/0xcd RIP: 0033:0x7fdcf2072359 Code: 28 00 00 00 75 05 48 83 c4 28 c3 e8 f1 19 00 00 90 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 b8 ff ff ff f7 d8 64 89 01 48 RSP: 002b:00007fdcf13e3168 EFLAGS: 00000246 ORIG_RAX: 000000000000002e RAX: ffffffffffffffda RBX: 00007fdcf219ff80 RCX: 00007fdcf2072359 RDX:
0000000000000000 RSI: 0000000020000200 RDI: 0000000000000003 RBP: 00007fdcf20bd493 R08: 0000000000000000 R09: 0000000000000000 R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000 R13:
00007fffbb8d7bdf R14: 00007fdcf13e3300 R15: 0000000000022000 </TASK> バグのあるアドレスは次の変数に属しています。rmnet_policy+0x30/0xe0 バグのあるアドレスは物理ページに属しています。page:0000000065bdeb3c refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x155243 flags:
0x200000000001000(reserved|node=0|zone=2) raw: 0200000000001000 ffffea00055490c8 ffffea00055490c8 0000000000000000 raw: 0000000000000000 0000000000000000 00000001ffffffff 0000000000000000 page dumped because: kasan: bad access detected Memory state around the buggy address: ffffffff92c43780: f9 f9 f9 f9 00 00 00 02 f9 f9 f9 f9 00 00 00 07 ffffffff92c43800: f9 f9 f9 f9 00 00 00 05 f9 f9 f9 f9 06 f9 f9 f9 >ffffffff92c43880: f9 f9 f9 f9 00 00 00 00 00 00 f9 f9 f9 f9 f9 f9 ^ ffffffff92c43900: 00 00 00 00 00 00 00 00 07 f9 f9 f9 f9 f9 f9 f9 ffffffff92c43980: 00 00 00 07 f9 f9 f9 f9 00 00 00 05 f9 f9 f9 f9 According to the comment of `nla_parse_nested_deprecated`, the maxtype should be len(destination array) - 1. したがって、ここで「IFLA_RMNET_MAX」を使用します。(CVE-2024-26597)

- Linux カーネルで、次の脆弱性が解決されました。ip6_tunnel: ip6_tnl_parse_tlv_enc_lim() の NEXTHDR_FRAGMENT 処理を修正します syzbot が NEXTHDR_FRAGMENT 処理が破損していると指摘しました [1]。
frag_off の読み取りは、skb->head に十分なバイトをプルした場合にのみ実行できます。現在、ガベージにアクセスする可能性があります。[1] BUG: KMSAN: uninit-value in ip6_tnl_parse_tlv_enc_lim+0x94f/0xbb0 ip6_tnl_parse_tlv_enc_lim+0x94f/0xbb0 ipxip6_tnl_xmit net/ipv6/ip6_tunnel.c:1326 [inline] ip6_tnl_start_xmit+0xab2/0x1a70 net/ipv6/ip6_tunnel.c:1432 __netdev_start_xmit include/linux/netdevice.h:4940 [inline] netdev_start_xmit include/linux/netdevice.h:4954 [inline] xmit_one net/core/dev.c:3548 [inline] dev_hard_start_xmit+0x247/0xa10 net/core/dev.c:3564
__dev_queue_xmit+0x33b8/0x5130 net/core/dev.c:4349 dev_queue_xmit include/linux/netdevice.h:3134 [inline] neigh_connected_output+0x569/0x660 net/core/neighbour.c:1592 neigh_output include/net/neighbour.h:542 [inline] ip6_finish_output2+0x23a9/0x2b30 net/ipv6/ip6_output.c:137 ip6_finish_output+0x855/0x12b0 net/ipv6/ip6_output.c:222 NF_HOOK_COND include/linux/netfilter.h:303 [inline] ip6_output+0x323/0x610 net/ipv6/ip6_output.c:243 dst_output include/net/dst.h:451 [inline] ip6_local_out+0xe9/0x140 net/ipv6/output_core.c:155 ip6_send_skb net/ipv6/ip6_output.c:1952 [inline] ip6_push_pending_frames+0x1f9/0x560 net/ipv6/ip6_output.c:1972 rawv6_push_pending_frames+0xbe8/0xdf0 net/ipv6/raw.c:582 rawv6_sendmsg+0x2b66/0x2e70 net/ipv6/raw.c:920 inet_sendmsg+0x105/0x190 net/ipv4/af_inet.c:847 sock_sendmsg_nosec net/socket.c:730 [inline] __sock_sendmsg net/socket.c:745 [inline] ____sys_sendmsg+0x9c2/0xd60 net/socket.c:2584 ___sys_sendmsg+0x28d/0x3c0 net/socket.c:2638
__sys_sendmsg net/socket.c:2667 [inline] __do_sys_sendmsg net/socket.c:2676 [inline] __se_sys_sendmsg net/socket.c:2674 [inline] __x64_sys_sendmsg+0x307/0x490 net/socket.c:2674 do_syscall_x64 arch/x86/entry/common.c:52 [inline] do_syscall_64+0x44/0x110 arch/x86/entry/common.c:83 entry_SYSCALL_64_after_hwframe+0x63/0x6b Uninit was created at: slab_post_alloc_hook+0x129/0xa70 mm/slab.h:768 slab_alloc_node mm/slub.c:3478 [inline] __kmem_cache_alloc_node+0x5c9/0x970 mm/slub.c:3517
__do_kmalloc_node mm/slab_common.c:1006 [inline] __kmalloc_node_track_caller+0x118/0x3c0 mm/slab_common.c:1027 kmalloc_reserve+0x249/0x4a0 net/core/skbuff.c:582 pskb_expand_head+0x226/0x1a00 net/core/skbuff.c:2098 __pskb_pull_tail+0x13b/0x2310 net/core/skbuff.c:2655 pskb_may_pull_reason include/linux/skbuff.h:2673 [inline] pskb_may_pull include/linux/skbuff.h:2681 [inline] ip6_tnl_parse_tlv_enc_lim+0x901/0xbb0 net/ipv6/ip6_tunnel.c:408 ipxip6_tnl_xmit net/ipv6/ip6_tunnel.c:1326 [inline] ip6_tnl_start_xmit+0xab2/0x1a70 net/ipv6/ip6_tunnel.c:1432 __netdev_start_xmit include/linux/netdevice.h:4940 [inline] netdev_start_xmit include/linux/netdevice.h:4954 [inline] xmit_one net/core/dev.c:3548 [inline] dev_hard_start_xmit+0x247/0xa10 net/core/dev.c:3564
__dev_queue_xmit+0x33b8/0x5130 net/core/dev.c:4349 dev_queue_xmit include/linux/netdevice.h:3134 [inline] neigh_connected_output+0x569/0x660 net/core/neighbour.c:1592 neigh_output include/net/neighbour.h:542 [inline] ip6_finish_output2+0x23a9/0x2b30 net/ipv6/ip6_output.c:137 ip6_finish_output+0x855/0x12b0 net/ipv6/ip6_output.c:222 NF_HOOK_COND include/linux/netfilter.h:303 [inline] ip6_output+0x323/0x610 net/ipv6/ip6_output.c:243 dst_output include/net/dst.h:451 [inline] ip6_local_out+0xe9/0x140 net/ipv6/output_core.c:155 ip6_send_skb net/ipv6/ip6_output.c:1952 [inline] ip6_push_pending_frames+0x1f9/0x560 net/ipv6/ip6_output.c:1972 rawv6_push_pending_frames+0xbe8/0xdf0 net/ipv6/raw.c:582 rawv6_sendmsg+0x2b66/0x2e70 net/ipv6/raw.c:920 inet_sendmsg+0x105/0x190 net/ipv4/af_inet.c:847 sock_sendmsg_nosec net/socket.c:730 [inline] __sock_sendmsg net/socket.c:745 [inline] ____sys_sendmsg+0x9c2/0xd60 net/socket.c:2584 ___sys_sendmsg+0x28d/0x3c0 net/socket.c:2638
__sys_sendmsg net/socket.c:2667 [inline] __do_sys_sendms ---truncated--- (CVE-2024-26633)

- ルーターは、大きすぎて次のホップに送信できない IPv6 パケットに遭遇すると、ICMP6 大きすぎるパケット (PTB) メッセージを送信者に返します。送信者はこの更新された Maximum Transmission Unit (MTU) をキャッシュし、その後同じホストにルーティングするときにこの値を超えないようにします。(CVE-2023-52340)

Nessus はこれらの問題をテストしておらず、代わりにアプリケーションが自己報告するバージョン番号にのみ依存していることに注意してください。

ソリューション

影響を受けるカーネルパッケージを更新してください。

参考資料

https://ubuntu.com/security/notices/USN-6726-1

プラグインの詳細

深刻度: High

ID: 193081

ファイル名: ubuntu_USN-6726-1.nasl

バージョン: 1.2

タイプ: local

エージェント: unix

公開日: 2024/4/9

更新日: 2024/4/18

サポートされているセンサー: Agentless Assessment, Frictionless Assessment Agent, Frictionless Assessment AWS, Frictionless Assessment Azure, Nessus Agent, Nessus

リスク情報

VPR

リスクファクター: Medium

スコア: 6.7

CVSS v2

リスクファクター: Medium

基本値: 6.8

現状値: 5

ベクトル: CVSS2#AV:L/AC:L/Au:S/C:C/I:C/A:C

CVSS スコアのソース: CVE-2023-52469

CVSS v3

リスクファクター: High

基本値: 7.8

現状値: 6.8

ベクトル: CVSS:3.0/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

現状ベクトル: CVSS:3.0/E:U/RL:O/RC:C

脆弱性情報

CPE: cpe:/o:canonical:ubuntu_linux:18.04:-:lts, cpe:/o:canonical:ubuntu_linux:20.04:-:lts, p-cpe:/a:canonical:ubuntu_linux:linux-image-5.4.0-1069-ibm, p-cpe:/a:canonical:ubuntu_linux:linux-image-5.4.0-1082-bluefield, p-cpe:/a:canonical:ubuntu_linux:linux-image-5.4.0-1089-gkeop, p-cpe:/a:canonical:ubuntu_linux:linux-image-5.4.0-1106-raspi, p-cpe:/a:canonical:ubuntu_linux:linux-image-5.4.0-1110-kvm, p-cpe:/a:canonical:ubuntu_linux:linux-image-5.4.0-1121-oracle, p-cpe:/a:canonical:ubuntu_linux:linux-image-5.4.0-1122-aws, p-cpe:/a:canonical:ubuntu_linux:linux-image-5.4.0-1126-gcp, p-cpe:/a:canonical:ubuntu_linux:linux-image-5.4.0-1127-azure, p-cpe:/a:canonical:ubuntu_linux:linux-image-5.4.0-175-generic, p-cpe:/a:canonical:ubuntu_linux:linux-image-5.4.0-175-lowlatency, p-cpe:/a:canonical:ubuntu_linux:linux-image-5.4.0-176-generic, p-cpe:/a:canonical:ubuntu_linux:linux-image-5.4.0-176-generic-lpae, p-cpe:/a:canonical:ubuntu_linux:linux-image-5.4.0-176-lowlatency

必要な KB アイテム: Host/cpu, Host/Ubuntu, Host/Ubuntu/release, Host/Debian/dpkg-l

エクスプロイトの容易さ: No known exploits are available

パッチ公開日: 2024/4/9

脆弱性公開日: 2024/1/18

参照情報

CVE: CVE-2023-46838, CVE-2023-52340, CVE-2023-52429, CVE-2023-52436, CVE-2023-52438, CVE-2023-52439, CVE-2023-52443, CVE-2023-52444, CVE-2023-52445, CVE-2023-52448, CVE-2023-52449, CVE-2023-52451, CVE-2023-52454, CVE-2023-52457, CVE-2023-52464, CVE-2023-52469, CVE-2023-52470, CVE-2023-52609, CVE-2023-52612, CVE-2024-0607, CVE-2024-23851, CVE-2024-26597, CVE-2024-26633

USN: 6726-1