Ubuntu 20.04 LTS / 22.04 LTS : Linux カーネル (AWS) の脆弱性 (USN-6725-2)

critical Nessus プラグイン ID 193375

概要

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

説明

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

- Linux カーネルのカーネル内 samba サーバーおよび CIFS の KSMBD 実装の parse_lease_state に、領域外 (OOB) メモリ読み取りの欠陥が見つかりました。「parse_lease_state()」関数に「NameOffset」のチェックがないために、攻撃者が無効な形式のペイロードを含む CREATE コマンドを KSMBD に送信すると、「create_context」オブジェクトが無効なメモリにアクセスする可能性があります。(CVE-2023-1194)

- 高性能カーネル内 SMB サーバーである Linux カーネルの ksmbd に欠陥が見つかりました。SMB2_TREE_DISCONNECT コマンドの処理に特定の欠陥があります。この問題は、オブジェクトで操作を実行するときに適切なロックが行われないことが原因です。攻撃者はこの脆弱性を利用して、カーネルのコンテキストでコードを実行する可能性があります。(CVE-2023-32254)

- 高性能カーネル内 SMB サーバーである Linux カーネルの ksmbd に欠陥が見つかりました。SMB2_LOGOFF および SMB2_CLOSE コマンドの処理に特定の欠陥があります。この問題は、オブジェクトで操作を実行するときに適切なロックが行われないことが原因です。攻撃者はこの脆弱性を利用して、カーネルのコンテキストでコードを実行する可能性があります。(CVE-2023-32258)

- 6.3.8より前の Linux カーネルで問題が発見されました。ksmbd の fs/smb/server/smb2pdu.c に、deassemble_neg_contexts で整数アンダーフローおよび領域外読み取りがあります。(CVE-2023-38427)

- 問題が 6.3.9 より前の Linux カーネルで発見されました。ksmbd が SMB リクエストのプロトコル ID を検証しないため、領域外読み取りが引き起こされます。(CVE-2023-38430)

- 6.3.8より前の Linux カーネルで問題が発見されました。ksmbd の fs/smb/server/connection.c は、ksmbd_conn_handler_loop の pdu_size を経由して、NetBIOS ヘッダーの長さと SMB ヘッダーのサイズとの間の関係を検証しないため、領域外読み取りを引き起こします。(CVE-2023-38431)

- 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 カーネルで、次の脆弱性が解決されています。ksmbd: init_smb2_rsp_hdr() の領域外を修正。クライアントが smb2 ネゴシエートリクエストを送信してから smb1 ネゴシエートリクエストを送信する場合、need_neg が false に設定されているため、smb1 ネゴシエートリクエストに対して init_smb2_rsp_hdr が呼び出されます。このパッチは、->need_neg が false に設定された後に smb1 パケットを無視します。(CVE-2023-52441)

- Linux カーネルで、次の脆弱性は解決されています。ksmbd: smb2_get_ksmbd_tcon() および smb2_check_user_session() の複合リクエスト「smb2_get_msg()」でセッション ID とツリー ID を検証は、常に複合リクエストの最初のリクエスト smb2 ヘッダーを返します。「SMB2_TREE_CONNECT_HE」が複合リクエストの最初のコマンドである場合、0 を返します。つまり、ツリー ID チェックをスキップします。このパッチは、ksmbd_req_buf_next() を使用してコンパウンドの現在のコマンドを取得します。(CVE-2023-52442)

- 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: imx: tx 状態マシンのデッドロックを修正します。シリアルポートを RS485 ポートとして使用する場合、tx 状態マシンは、RS485トランシーバーの TX_EN ピンを駆動する RTS ピンを制御するために使用されます。TTY ポートが転送の途中 (ユーザーランドアプリケーションのクラッシュなど) で閉じられると、imx_uart_shutdown はインターフェースを無効にし、転送完了割り込みを無効にします。その後、imx_uart_stop_tx は不完全な転送で終了し、TC 割り込みによって再トリガーされます。この割り込みは無効であるため、tx ステートマシンは SEND から移行しません。ステートマシンは現在デッドロックにあり、TX_EN が Low のままであるため、インターフェースが役に立ちません。imx_uart_stop_tx は、不完全な送信をチェックするようになり、また TC 割り込みがベイリングの再トリガー前に有効化されているかどうかをチェックします。これにより、状態マシン処理が達成され、WAIT_AFTER_SEND に適切に設定されるようになります。(CVE-2023-52456)

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

- Linux カーネルでは、次の脆弱性が解決されています。block: パーティションの長さをブロックサイズと調整する必要があることのチェックを追加します。add パーティションまたは resize パーティションを呼び出す前に、または長さが論理ブロックサイズと調整されているかどうかのチェックがありません。ディスクの論理ブロックサイズが 512 バイトより大きい場合、パーティションサイズが論理ブロックサイズの倍数でない可能性があり、最後のセクターが読み取られるときに、bio_truncate() は bio サイズを調整し、読み取りコマンドが論理ブロックサイズよりも地裁場合に IO エラーが発生します。整合性データがサポートされている場合、これにより bio_integrity_free を呼び出す際に NULL ポインターデリファレンスも発生します。(CVE-2023-52458)

- Linux カーネルでは、次の脆弱性が解決されています。bpf: スピルされたポインターを破損させる試みのチェックを修正します。レジスターが 1/2/4 バイトのレジスターとしてスタックにスピルされると、slot_type[BPF_REG_SIZE - 1] が設定されます (加えて、実際のスピルサイズに応じて、その下にさらに存在する可能性があります)。したがって、一部のスタックスロットがレジスタをスピルしているかどうかを確認するには、slot_type[0] ではなく slot_type[7] を調べる必要があります。これを覚えておく必要がなく、将来的に二重チェックするには、is_spilled_reg() ヘルパーを使用します。
(CVE-2023-52462)

- Linux カーネルでは、次の脆弱性は解決されています。efivarfs: SetVariable がサポートされていない場合、再マウント時に RO を強制します。ランタイムの SetVariable がファームウェアによってサポートされていない場合、その関数にコールバックを割り当てることはありません。同時に efivarfs を RO としてマウントし、誰もそれを呼び出せないようにします。ただし、誰かがファイルシステムを RW として再マウントした場合は、権限フラグをチェックしません。結果として、これは次のようなクラッシュを引き起こします。$ mount -o remount,rw /sys/firmware/efi/efivars $ efi-updatevar -f PK.auth PK [303.279166] 仮想アドレス 0000000000000000 [303.280482] でカーネル NULL ポインターデリファレンスを処理できません Mem abort info: [ 303.280854] ESR = 0x0000000086000004 [ 303.281338] EC = 0x21: IABT (current EL), IL = 32 bits [ 303.282016] SET = 0, FnV = 0 [ 303.282414] EA = 0, S1PTW = 0 [ 303.282821] FSC = 0x04:
level 0 translation fault [ 303.283771] user pgtable: 4k pages, 48-bit VAs, pgdp=000000004258c000 [303.284913] [0000000000000000] pgd=0000000000000000, p4d=0000000000000000 [ 303.286076] Internal error:
Oops: 0000000086000004 [#1] PREEMPT SMP [ 303.286936] Modules linked in: qrtr tpm_tis tpm_tis_core crct10dif_ce arm_smccc_trng rng_core drm fuse ip_tables x_tables ipv6 [ 303.288586] CPU: 1 PID: 755 Comm:
efi-updatevar Not tainted 6.3.0-rc1-00108-gc7d0c4695c68 #1 [ 303.289748] ハードウェア名: Unknown Unknown Product/Unknown Product, BIOS 2023.04-00627-g88336918701d 04/01/2023 [ 303.291150] pstate: 60400005 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--) [ 303.292123] pc : 0x0 [ 303.292443] lr :
efivar_set_variable_locked+0x74/0xec [ 303.293156] sp : ffff800008673c10 [ 303.293619] x29:
ffff800008673c10 x28: ffff0000037e8000 x27: 0000000000000000 [ 303.294592] x26: 0000000000000800 x25:
ffff000002467400 x24: 0000000000000027 [ 303.295572] x23: ffffd49ea9832000 x22: ffff0000020c9800 x21:
ffff000002467000 [ 303.296566] x20: 0000000000000001 x19: 00000000000007fc x18: 0000000000000000 [303.297531] x17: 0000000000000000 x16: 0000000000000000 x15: 0000aaaac807ab54 [ 303.298495] x14:
ed37489f673633c0 x13: 71c45c606de13f80 x12: 47464259e219acf4 [ 303.299453] x11: ffff000002af7b01 x10:
0000000000000003 x9 : 0000000000000002 [ 303.300431] x8 : 0000000000000010 x7 : ffffd49ea8973230 x6 :
0000000000a85201 [ 303.301412] x5 : 0000000000000000 x4 : ffff0000020c9800 x3 : 00000000000007fc [303.302370] x2 : 0000000000000027 x1 : ffff000002467400 x0 : ffff000002467000 [ 303.303341] 呼び出しトレース: [303.303679] 0x0 [ 303.303938] efivar_entry_set_get_size+0x98/0x16c [ 303.304585] efivarfs_file_write+0xd0/0x1a4 [ 303.305148] vfs_write+0xc4/0x2e4 [ 303.305601] ksys_write+0x70/0x104 [303.306073] __arm64_sys_write+0x1c/0x28 [ 303.306622] invoke_syscall+0x48/0x114 [ 303.307156] el0_svc_common.constprop.0+0x44/0xec [ 303.307803] do_el0_svc+0x38/0x98 [ 303.308268] el0_svc+0x2c/0x84 [303.308702] el0t_64_sync_handler+0xf4/0x120 [ 303.309293] el0t_64_sync+0x190/0x194 [ 303.309794] コード:
???????? ???????? ???????? ???????? (????????) [ 303.310612] ---[ end trace 0000000000000000 ]--- .reconfigure() 関数を fs 操作に追加することによりこれを修正します これは、リクエストされたフラグを確認したり、ファームウェアがランタイムで SetVariable を実装しない場合に RO でないものすべてを拒否するの使用できます。(CVE-2023-52463)

- 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 カーネルで、次の脆弱性が解決されています。mfd: syscon: of_syscon_register() の NULL ポインターデリファレンスを修正します kasprintf() が、失敗時に NULL になる可能性のある動的に割り当てられたメモリへポインターを返します。(CVE-2023-52467)

- 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 カーネルでは、次の脆弱性が解決されています。ksmbd: セッション検索の間の競合状態を修正し、スレッド A + スレッド B を期限切れにします。ksmbd_session_lookup | smb2_sess_setup sess = xa_load | | | xa_erase(&conn->sessions, sess->id); | | ksmbd_session_destroy(sess) --> kfree(sess) | // UAF! | sess->last_active = jiffies | + このパッチは、ksmbd_session_lookup と ksmbd_expire_session の間の競合状態を修正するために rwsem を追加します。(CVE-2023-52480)

- 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 カーネルで、次の脆弱性が解決されています。net/sched: act_ct: ooo フラグでの skb 漏洩とクラッシュが修正されています。act_ct はデフラグメンテーションの前に skb->users を追加します。frag が順番に到着する場合、最後の frag の参照は inet_frag_reasm_prepare skb_morph でリセットされますが、これは簡単ではありません。ただし、frag が順不同に到着すると、誰も最後の frag を unref せず、すべての frag が漏洩します。状況はさらに悪化しており、skb が同時に複製され共有されている場合、パケットキャプチャを開始すると crash[0] が発生する可能性があります。デフラグメンテーションの前に skb_get() を削除することで、この問題を修正します。デフラグが失敗したか進行中の場合、act_ct は TC_ACT_CONSUMED を返します。[0]: [ 843.804823] ------------[ cut here ]------------ [ 843.809659] kernel BUG at net/core/skbuff.c:2091! [ 843.814516] 無効な opcode: 0000 [#1] PREEMPT SMP [ 843.819296] CPU: 7 PID: 0 Comm: swapper/7 Kdump: loaded Tainted: G S 6.7.0-rc3 #2 [ 843.824107] ハードウェア名: XFUSION 1288H V6/BC13MBSBD, BIOS 1.29 11/25/2022 [ 843.828953] RIP: 0010:pskb_expand_head+0x2ac/0x300 [ 843.833805] Code: 8b 70 28 48 85 f6 74 82 48 83 c6 08 bf 01 00 00 00 e8 38 bd ff ff 8b 83 c0 00 00 00 48 03 83 c8 00 00 00 e9 62 ff ff ff 0f 0b <0f> 0b e8 8d d0 ff ff e9 b3 fd ff ff 81 7c 24 14 40 01 00 00 4c 89 [843.843698] RSP: 0018:ffffc9000cce07c0 EFLAGS: 00010202 [ 843.848524] RAX: 0000000000000002 RBX:
ffff88811a211d00 RCX: 0000000000000820 [ 843.853299] RDX: 0000000000000640 RSI: 0000000000000000 RDI:
ffff88811a211d00 [ 843.857974] RBP: ffff888127d39518 R08: 00000000bee97314 R09: 0000000000000000 [843.862584] R10: 0000000000000000 R11: ffff8881109f0000 R12: 0000000000000880 [ 843.867147] R13:
ffff888127d39580 R14: 0000000000000640 R15: ffff888170f7b900 [ 843.871680] FS: 0000000000000000(0000) GS:ffff889ffffc0000(0000) knlGS:0000000000000000 [ 843.876242] CS: 0010 DS: 0000 ES: 0000 CR0:
0000000080050033 [ 843.880778] CR2: 00007fa42affcfb8 CR3: 000000011433a002 CR4: 0000000000770ef0 [843.885336] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 843.889809] DR3:
0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 [ 843.894229] PKRU: 55555554 [ 843.898539] 呼び出しトレース: [ 843.902772] <IRQ> [ 843.906922] ? __die_body+0x1e/0x60 [ 843.911032] ? die+0x3c/0x60 [843.915037] ? do_trap+0xe2/0x110 [ 843.918911] ? pskb_expand_head+0x2ac/0x300 [ 843.922687] ? do_error_trap+0x65/0x80 [ 843.926342] ? pskb_expand_head+0x2ac/0x300 [ 843.929905] ? exc_invalid_op+0x50/0x60 [ 843.933398] ? pskb_expand_head+0x2ac/0x300 [ 843.936835] ? asm_exc_invalid_op+0x1a/0x20 [ 843.940226] ? pskb_expand_head+0x2ac/0x300 [ 843.943580] inet_frag_reasm_prepare+0xd1/0x240 [ 843.946904] ip_defrag+0x5d4/0x870 [ 843.950132] nf_ct_handle_fragments+0xec/0x130 [nf_conntrack] [ 843.953334] tcf_ct_act+0x252/0xd90 [act_ct] [843.956473] ? tcf_mirred_act+0x516/0x5a0 [act_mirred] [ 843.959657] tcf_action_exec+0xa1/0x160 [843.962823] fl_classify+0x1db/0x1f0 [cls_flower] [ 843.966010] ? skb_clone+0x53/0xc0 [ 843.969173] tcf_classify+0x24d/0x420 [ 843.972333] tc_run+0x8f/0xf0 [ 843.975465]
__netif_receive_skb_core+0x67a/0x1080 [ 843.978634] ? dev_gro_receive+0x249/0x730 [ 843.981759]
__netif_receive_skb_list_core+0x12d/0x260 [ 843.984869] netif_receive_skb_list_internal+0x1cb/0x2f0 [843.987957] ? mlx5e_handle_rx_cqe_mpwrq_rep+0xfa/0x1a0 [mlx5_core] [ 843.991170] napi_complete_done+0x72/0x1a0 [ 843.994305] mlx5e_napi_poll+0x28c/0x6d0 [mlx5_core] [ 843.997501]
__napi_poll+0x25/0x1b0 [ 844.000627] net_rx_action+0x256/0x330 [ 844.003705] __do_softirq+0xb3/0x29b [844.006718] irq_exit_rcu+0x9e/0xc0 [ 844.009672] common_interrupt+0x86/0xa0 [ 844.012537] </IRQ> [844.015285] <TASK> [ 844.017937] asm_common_interrupt+0x26/0x40 [ 844.020591] RIP:
0010:acpi_safe_halt+0x1b/0x20 [ 844.023247] コード: ff 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 40 00 65 48 8b 04 25 00 18 03 00 48 8b 00 a8 08 75 0c 66 90 0f 00 2d 81 d0 44 00 fb ---truncated--- (CVE-2023-52610)

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

- 6.6.10 より前の Linux カーネルの ksmbd で問題が発見されました。fs/smb/server/smb2misc.c の smb2_get_data_area_len では、Name データと CreateContexts データの関係が不適切に処理されるため、smb_strndup_from_utf16 の領域外アクセスを引き起こす可能性があります。(CVE-2024-22705)

- 6.7.1 までの、Linux カーネルの fs/btrfs/disk-io.c の btrfs_get_root_ref では、アサーション失敗およびクラッシュが発生する可能性があります。これは、サブボリューム作成時に、サブボリュームのルート項目が挿入された後すぐサブボリュームが読み取られる可能性があるためです。(CVE-2024-23850)

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

- Linux カーネルの bluetooth デバイスドライバーの {min,max}_key_size_set() 関数に競合状態が見つかりました。これにより、NULL ポインターデリファレンスの問題が発生し、カーネルパニックまたはサービス拒否問題が発生する可能性があります。(CVE-2024-24860)

- Linux カーネルでは、次の脆弱性が解決されています。mlxsw: spectrum_acl_tcam: スタック破損を修正します。tc フィルターが最初にネットデバイスに追加されると、対応するローカルポートがデバイスの ACL グループにバインドされます。グループには ACL のリストが含まれます。次に、各 ACL は、フィルターが保存されている異なる TCAM 領域を指し示します。転送中、一致が見つかるまで ACL が順番に評価されます。フィルターを異なる領域に配置する理由の 1 つは、優先順位を下げ、順番を変えて追加し、キーの用途により 2 つの連続するフィルターが同じ領域に収まらないようにするためです。Spectrum-2 以降の ASIC では、ファームウェアが、グループ内の ACL の最大数が 16 を超えると報告するようになりましたが、ACL グループを設定するレジスタのレイアウト (PAGT) は、それを説明するように更新されていませんでした。したがって、グループに 16 を超える ACL が必要なまれなケースでは、スタック破損 [1] に達する可能性があります。最大 ACL グループサイズを、ファームウェアが報告する値と PAGT レジスタに適合する最大 ACL との間の最小値に制限することで、修正します。テストケースを追加して、この状態に達したときにマシンがクラッシュしないことを確認します。[1] Kernel panic - not syncing: stack-protector: Kernel stack is corrupted in: mlxsw_sp_acl_tcam_group_update+0x116/0x120 [...] dump_stack_lvl+0x36/0x50 panic+0x305/0x330 __stack_chk_fail+0x15/0x20 mlxsw_sp_acl_tcam_group_update+0x116/0x120 mlxsw_sp_acl_tcam_group_region_attach+0x69/0x110 mlxsw_sp_acl_tcam_vchunk_get+0x492/0xa20 mlxsw_sp_acl_tcam_ventry_add+0x25/0xe0 mlxsw_sp_acl_rule_add+0x47/0x240 mlxsw_sp_flower_replace+0x1a9/0x1d0 tc_setup_cb_add+0xdc/0x1c0 fl_hw_replace_filter+0x146/0x1f0 fl_change+0xc17/0x1360 tc_new_tfilter+0x472/0xb90 rtnetlink_rcv_msg+0x313/0x3b0 netlink_rcv_skb+0x58/0x100 netlink_unicast+0x244/0x390 netlink_sendmsg+0x1e4/0x440 ____sys_sendmsg+0x164/0x260 ___sys_sendmsg+0x9a/0xe0 __sys_sendmsg+0x7a/0xc0 do_syscall_64+0x40/0xe0 entry_SYSCALL_64_after_hwframe+0x63/0x6b (CVE-2024-26586)

- Linux カーネルで、次の脆弱性が解決されています。bpf: PTR_TO_FLOW_KEYS の変数オフセット alu を拒否します PTR_TO_FLOW_KEYS の場合、check_flow_keys_access() は検証に固定 off のみを使用します。
ただし、変数オフセットポインター alu はこの種類のポインターに対して禁止されていません。そのため、変数オフセットはチェックされません。次のプログラムが受け入れられます。func#0 @0 0: R1=ctx() R10=fp0 0: (bf) r6 = r1 ; R1=ctx() R6_w=ctx() 1: (79) r7 = *(u64 *)(r6 +144) ; R6_w=ctx() R7_w=flow_keys() 2: (b7) r8 = 1024 ; R8_w=1024 3:
(37) r8 /= 1 ; R8_w=scalar() 4: (57) r8 &= 1024 ; R8_w=scalar(smin=smin32=0, smax=umax=smax32=umax32=1024,var_off=(0x0; 0x400)) 5: (0f) r7 += r8 mark_precise: frame0: last_idx 5 first_idx 0 subseq_idx -1 mark_precise: frame0: regs=r8 stack= before 4: (57) r8 &= 1024 mark_precise:
frame0: regs=r8 stack= before 3: (37) r8 /= 1 mark_precise: frame0: regs=r8 stack= before 2: (b7) r8 = 1024 6: R7_w=flow_keys(smin=smin32=0,smax=umax=smax32=umax32=1024,var_off =(0x0; 0x400)) R8_w=scalar(smin=smin32=0,smax=umax=smax32=umax32=1024, var_off=(0x0; 0x400)) 6: (79) r0 = *(u64 *)(r7 +0) ; R0_w=scalar() 7: (95) exit このプログラムは、flow_keys を r7 へロードし、変数オフセット r8 を r7 へ追加し、最後に領域外アクセスを引き起こします。BUG: アドレス: ffffc90014c80038 のページ違反を処理できません [...] 呼び出しトレース: <TASK> bpf_dispatcher_nop_func include/linux/bpf.h:1231 [inline] __bpf_prog_run include/linux/filter.h:651 [inline] bpf_prog_run include/linux/filter.h:658 [inline] bpf_prog_run_pin_on_cpu include/linux/filter.h:675 [inline] bpf_flow_dissect+0x15f/0x350 net/core/flow_dissector.c:991 bpf_prog_test_run_flow_dissector+0x39d/0x620 net/bpf/test_run.c:1359 bpf_prog_test_run kernel/bpf/syscall.c:4107 [inline] __sys_bpf+0xf8f/0x4560 kernel/bpf/syscall.c:5475
__do_sys_bpf kernel/bpf/syscall.c:5561 [inline] __se_sys_bpf kernel/bpf/syscall.c:5559 [inline]
__x64_sys_bpf+0x73/0xb0 kernel/bpf/syscall.c:5559 do_syscall_x64 arch/x86/entry/common.c:52 [inline] do_syscall_64+0x3f/0x110 arch/x86/entry/common.c:83 entry_SYSCALL_64_after_hwframe+0x63/0x6b flow_keys の変数オフセットでポインター alu を拒否することで、これを修正します。パッチを適用すると、flow_keys で R7 ポインター演算が禁止されているプログラムが拒否されます。(CVE-2024-26589)

- Linux カーネルでは、次の脆弱性が解決されています。bpf: bpf_tracing_prog_attach の再添付ブランチが修正されます。次のケースでは、attach_btf がないためクラッシュを引き起こす可能性があります。1) rawtp プログラムをロード 2) rawtp を target_fd として使用して fentry プログラムをロード 3) target_fd = 0 で fentry プログラムのトレーシングリンクを作成 4) 3 を繰り返します。最後の結果: - prog->aux->dst_trampoline == NULL - tgt_prog == NULL (target_fd を link_create に提供しなかったから) - prog->aux->attach_btf == NULL (プログラムが attach_prog_fd=X でロードされた) - プログラムは tgt_prog に対してロードされましたが、どのバグかを調べる方法がありません。BUG: カーネル NULL ポインターデリファレンス、アドレス: 0000000000000058 呼び出しトレース: <TASK> ? __die+0x20/0x70 ? page_fault_oops+0x15b/0x430 ? fixup_exception+0x22/0x330 ? exc_page_fault+0x6f/0x170 ? asm_exc_page_fault+0x22/0x30 ? bpf_tracing_prog_attach+0x279/0x560 ? btf_obj_id+0x5/0x10 bpf_tracing_prog_attach+0x439/0x560 __sys_bpf+0x1cf4/0x2de0 __x64_sys_bpf+0x1c/0x30 do_syscall_64+0x41/0xf0 entry_SYSCALL_64_after_hwframe+0x6e/0x76 この状況では、-EINVAL を返します。
(CVE-2024-26591)

- 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 カーネルでは、次の脆弱性が解決されています。KVM: arm64: vgic-its: LPI 変換キャッシュの潜在的な UAF を回避します LPI 変換キャッシュヒットが、キャッシュを無効にする操作と競合する場合 (DISCARD ITS コマンドなど)、UAF のシナリオが存在する可能性があります。この問題の根本原因は、vgic_its_check_cache() が、refcount の変更をシリアル化するロックをドロップする前に、vgic_irq の refcount を昇格させないことです。vgic_its_check_cache() に、返された vgic_irq の refcount を増加させ、割り込みをキューに入れた後に、対応するデクリメントを追加します。(CVE-2024-26598)

- Linux カーネルで、次の脆弱性が解決されています。ipv6:mcast:ipv6_mc_down / mld_ifc_work のデータ競合を修正します。idev->mc_ifc_count が適切なロックなしで書き込まれる可能性があります。もともとは syzbot [1] によって発見されました。mld_ifc_stop_work() (および適切な評価のための mld_gq_stop_work()) に対する呼び出しを、mutex_lock() および mutex_unlock() でカプセル化することでこの問題を修正します。これらの関数は、宣言に従ってのみ mc_lock で呼び出す必要があるためです。[1] BUG: KCSAN: data-race in ipv6_mc_down / mld_ifc_work write to 0xffff88813a80c832 of 1 bytes by task 3771 on cpu 0: mld_ifc_stop_work net/ipv6/mcast.c:1080 [inline] ipv6_mc_down+0x10a/0x280 net/ipv6/mcast.c:2725 addrconf_ifdown+0xe32/0xf10 net/ipv6/addrconf.c:3949 addrconf_notify+0x310/0x980 notifier_call_chain kernel/notifier.c:93 [inline] raw_notifier_call_chain+0x6b/0x1c0 kernel/notifier.c:461 __dev_notify_flags+0x205/0x3d0 dev_change_flags+0xab/0xd0 net/core/dev.c:8685 do_setlink+0x9f6/0x2430 net/core/rtnetlink.c:2916 rtnl_group_changelink net/core/rtnetlink.c:3458 [inline] __rtnl_newlink net/core/rtnetlink.c:3717 [inline] rtnl_newlink+0xbb3/0x1670 net/core/rtnetlink.c:3754 rtnetlink_rcv_msg+0x807/0x8c0 net/core/rtnetlink.c:6558 netlink_rcv_skb+0x126/0x220 net/netlink/af_netlink.c:2545 rtnetlink_rcv+0x1c/0x20 net/core/rtnetlink.c:6576 netlink_unicast_kernel net/netlink/af_netlink.c:1342 [inline] netlink_unicast+0x589/0x650 net/netlink/af_netlink.c:1368 netlink_sendmsg+0x66e/0x770 net/netlink/af_netlink.c:1910 ... write to 0xffff88813a80c832 of 1 bytes by task 22 on cpu 1:
mld_ifc_work+0x54c/0x7b0 net/ipv6/mcast.c:2653 process_one_work kernel/workqueue.c:2627 [inline] process_scheduled_works+0x5b8/0xa30 kernel/workqueue.c:2700 worker_thread+0x525/0x730 kernel/workqueue.c:2781 ... (CVE-2024-26631)

- 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-6725-2

プラグインの詳細

深刻度: Critical

ID: 193375

ファイル名: ubuntu_USN-6725-2.nasl

バージョン: 1.0

タイプ: local

エージェント: unix

公開日: 2024/4/17

更新日: 2024/4/17

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

リスク情報

VPR

リスクファクター: High

スコア: 7.4

CVSS v2

リスクファクター: Critical

基本値: 10

現状値: 7.4

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

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

CVSS v3

リスクファクター: Critical

基本値: 9.8

現状値: 8.5

ベクトル: CVSS:3.0/AV:N/AC:L/PR:N/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:20.04:-:lts, cpe:/o:canonical:ubuntu_linux:22.04:-:lts, p-cpe:/a:canonical:ubuntu_linux:linux-image-5.15.0-1057-aws

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

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

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

脆弱性公開日: 2023/7/10

参照情報

CVE: CVE-2023-1194, CVE-2023-32254, CVE-2023-32258, CVE-2023-38427, CVE-2023-38430, CVE-2023-38431, CVE-2023-3867, CVE-2023-46838, CVE-2023-52340, CVE-2023-52429, CVE-2023-52436, CVE-2023-52438, CVE-2023-52439, CVE-2023-52441, CVE-2023-52442, CVE-2023-52443, CVE-2023-52444, CVE-2023-52445, CVE-2023-52448, CVE-2023-52449, CVE-2023-52451, CVE-2023-52454, CVE-2023-52456, CVE-2023-52457, CVE-2023-52458, CVE-2023-52462, CVE-2023-52463, CVE-2023-52464, CVE-2023-52467, CVE-2023-52469, CVE-2023-52470, CVE-2023-52480, CVE-2023-52609, CVE-2023-52610, CVE-2023-52612, CVE-2024-22705, CVE-2024-23850, CVE-2024-23851, CVE-2024-24860, CVE-2024-26586, CVE-2024-26589, CVE-2024-26591, CVE-2024-26597, CVE-2024-26598, CVE-2024-26631, CVE-2024-26633

USN: 6725-2