脆弱性情報(JVN)
脆弱性情報(JVN)検索・一覧
JVN(IPA/JPCERT/CC 提供)の脆弱性情報 289,811 件を、製品・ベンダ・脆弱性タイプ(CWE)で 全文検索し、深刻度(CVSS)で絞り込めます。発表日の新しい順。各タイトルから詳細(CVSS内訳・関連脆弱性)へ。
深刻度 High 直近1年 の検索結果:3,241–3,280 件目を表示(ページ 82)
深刻度は CVSS(共通脆弱性評価システム・0〜10 のスコア)に基づく区分:Critical 9.0以上/High 7.0〜8.9/Medium 4.0〜6.9/Low 0.1〜3.9。
Apache HTTP Serverのmod_mdにおいて、OCSPレスポンスデータを介したリソースの割り当てに制限やスロットリングが存在しない脆弱性があります。本問題はApache HTTP Serverのバージョン2.4.30から2.4.66に影響します。ユーザーはこの問題を修正したバージョン2.4.67へアップグレードすることを推奨します。
ModSecurityは、Apache、IIS、およびNginx向けのオープンソースかつクロスプラットフォーム対応のウェブアプリケーションファイアウォール(WAF)エンジンです。LibmodsecurityはModSecurity v3プロジェクトの一部コンポーネントです。t:hexDecode変換を使用するルールが単一文字を含むクエリ文字列パラメータを検査する際にセグメンテーションフォルトが発生します。攻撃者はこれを悪用してワーカープロセスをクラッシュさせ、サービス拒否(DoS)を引き起こす可能性があります。攻撃が停止するとワーカープロセスはセグメンテーションフォルトから回復し、サービスは再開されます。libModSecurity3のバージョン3.0.15より前のすべてのバージョンが影響を受けます。この問題はバージョン3.0.15で修正されています。
Linuxカーネルのext4ファイルシステムにおいて、初期化後にjinodeが公開されることでクラッシュを引き起こす脆弱性が修正されました。ext4_inode_attach_jinode()は並行アクセスするユーザーにei-jinodeを公開しており、これによりi_vfs_inodeが未設定の非NULLのjinodeを読み取っていました。その結果、jbd2_wait_inode_data()でi_vfs_inode-i_mappingを参照し、クラッシュが発生する可能性がありました。この問題はjbd2_inodeを先に初期化し、適切なメモリ障壁とWRITE_ONCE()を使ってei-jinodeを公開し、読み取り側はREAD_ONCE()で安全にポインタを取得するように修正されました。
Linuxカーネルにおいて、以下の脆弱性が修正されました。ext4ファイルシステムで、truncate操作によりファイルサイズがインラインデータの容量を超えた場合に、インラインデータからextentベースのストレージへ変換する処理をext4_setattr()に追加しました。これにより、インラインデータフラグが設定されたままファイルサイズがインラインで格納可能な容量を超える不整合な状態になることを防ぎます。修正前は、以下の手順でカーネルがBUG_ON()を発生させてクラッシュしていました。1. インラインフラグがセットされていて小さいサイズのinodeを持つファイルシステムをマウントする。2. truncate(file, 50MB)でサイズを拡張するがインラインフラグは解除されなかった。3. sendfile()がデータ書き込みを試みる。4. ext4_write_inline_data()はwrite_sizeがinline_capacityを超えたためBUG_ON()を引き起こしていました。クラッシュは、ext4_write_inline_data()がインラインストレージ内への書き込みを前提としている一方で、実際のインライン容量(i_blockで約60バイト、xattrsで約96バイト)よりもファイルサイズと書き込み要求が大幅に大きいために発生していました。修正では、setattrによる新しいファイルサイズがinodeの実際のインライン容量(EXT4_I(inode)-i_inline_size)を超えた場合に、サイズ変更前にファイルをextentベースのストレージに変換し不整合を防止します。これにより、truncate操作中にインラインデータフラグとファイルサイズの整合性が維持され、根本的な問題が解決されました。
Linuxカーネルにおいて、以下の脆弱性が修正されました:xfsにおいて、pushコールバック後にログアイテムを参照解除する現象を回避しました。具体的には、xfsaild_push_item()がiop_push()を呼び出した後、AILロックがpush中に解放されると、ログアイテムが解放されている可能性がありました。バックグラウンドのinode回収やdquotシュリンカーはAILロックを保持していない間にログアイテムを解放することがあり、switch文のトレースポイントはiop_push()の戻り後にログアイテムを参照解除していました。これを修正するために、xfsaild_push_item()呼び出し前にログアイテムのタイプ、フラグ、およびLSNを取得し、新たにxfs_ail_push_classというトレースイベントクラスを導入しました。このクラスは、事前に取得した値とailpポインタを使用し、ログアイテムポインタの代わりとして機能します。
Linuxカーネルにおいて、xfs_inode_item_push()およびxfs_qm_dquot_logitem_push()関数で、AILロックを解除する前にailpポインタを保存しなかったために、使用後の解放(use-after-free)の脆弱性が存在していました。この問題は、AILロックを保持したままailpポインタをローカル変数に保存することで修正されました。
Linuxカーネルにおいて、以下の脆弱性が修正されました。xfrm: iptfsに関して、クローン設定後にのみmode_dataを公開します。iptfs_clone_state()はリオーダーウィンドウを割り当てる前にx-mode_dataを格納しますが、この割り当てが失敗した場合、コードはクローン状態を解放し-ENOMEMを返します。その際、x-mode_dataが解放済みメモリを指したままになる問題がありました。xfrmクローンのアンワインドは後でx-mode_dataを通じてdestroy_state()を実行するため、失敗したクローン経路はすでにclone_state()によって解放されたIPTFS状態を破壊してしまいます。これを防ぐため、すべての割り当てが成功するまでクローンしたIPTFS状態は非公開のままとし、失敗したクローンはx-mode_dataを未設定のままにします。destroyパスはNULLのmode_dataポインタを既に正常に処理しています。
Linuxカーネルにおいて、以下の脆弱性が修正されました。af_unixに関する問題で、unix_state_lockの下でUNIX_DIAG_VFSデータを読み取る正確なUNIX診断のルックアップは、ソケットへの参照を保持しますが、u-pathへの参照は保持しません。一方、unix_release_sock()はunix_state_lockの下でu-pathをクリアし、ロック解除後にパス参照を破棄します。unix_state_lockを保持している間にUNIX_DIAG_VFSのinode番号およびデバイス番号を読み取り、ロック解除後にnetlink属性を送信します。これにより、応答が構築されている間にVFSデータの安定性が保たれます。
Linuxカーネルにおいて、以下の脆弱性が修正されました。netfilterのip6t_rtにおいて、rt_mt6_check()関数がaddrnrの値が大きすぎるものを拒否します。addrnrの値がIP6T_RT_HOPSを超えるrtマッチルールは拒否されます。rt_mt6()はaddrnrがrtinfo-addrs[]の範囲内にあることを前提としています。ルールのインストール時にaddrnrを検証し、不正なルールがマッチロジックで範囲外の値を使用する前に拒否する仕組みを導入しました。
Linuxカーネルにおいて、以下の脆弱性が修正されました。net/sched: sch_netemにおけるパケット破損時の境界外アクセスの修正です。netem_enqueue()関数では、パケット破損のロジックでskb-dataの変更対象インデックスを選択するためにget_random_u32_below(skb_headlen(skb))が使用されています。AF_PACKETのTX_RINGがIPIPトンネル経由で完全に非線形なパケットを送信した場合、skb_headlen(skb)は0を返します。0をget_random_u32_below()に渡すと、制限されていない32ビットの乱数が返されます。そのため、この値をskb-dataのオフセットとして使用すると境界外メモリアクセスが発生します。この問題を修正するために、線形データ領域の破損を試みる前にskb_headlen(skb)が0でないことを検証します。完全に非線形なパケットは破損ロジックを静かに回避します。
Linuxカーネルにおいて、以下の脆弱性が修正されました。rxrpcでは、サービスがチャレンジ中の状態(RXRPC_CONN_SERVICE_CHALLENGING)にある間のみRESPONSEパケットを処理します。response検証とセキュリティ初期化を実行する前にstate_lockの下で状態を確認し、その後状態遷移後にsecuredフラグを使ってsecured接続の作業をキューに登録するかを決定します。これにより、重複または遅延したRESPONSEパケットがセットアップパスを再実行するのを防ぎ、ロック解除後の状態チェックを除去します。
Linuxカーネルにおいて、以下の脆弱性が修正されました:openvswitchのトンネルに関するnetdev_putの操作をRCUリリースまで遅延させます。ovs_netdev_tunnel_destroy()はNETDEV_UNREGISTERによってデバイスが既に切り離された後に実行される可能性があります。destroy関数内でnetdevの参照を解除すると、vport-devをまだ参照している並行するリーダーと競合する可能性があります。したがって、ovs_netdev_tunnel_destroy()ではvport-devを解放せず、代わりにRCUコールバックから参照を解除するvport_netdev_free()に処理を任せます。これにより、トンネルの非破壊パスとの整合性が保たれ、RTNL下での追加の同期を回避できます。
Linuxカーネルのopenvswitchにおいて、MPLSのset/set_maskedペイロード長の検証に関する脆弱性が修正されました。validate_set()関数はSET/SET_MASKEDアクションの可変長ペイロードとしてOVS_KEY_ATTR_MPLSを受け入れていましたが、アクション処理では固定長のMPLSキー情報を想定していました。不正なMPLSアクションペイロード長を防ぐため、サイズが一致しないMPLSアクションキーは拒否されるよう仕様が変更されました。
Linuxカーネルにおいて、net: ipv6: flowlabelに存在した脆弱性が修正されました。ip6fl_seq_show()関数はseq-fileのRCU読み取り側ロック下でグローバルなflowlabelハッシュを巡回し、オプションブロックが存在する場合にfl-opt-opt_nflenを表示します。排他的なflowlabelはfl_release()でfl-usersがゼロになるとすぐにfl-optを解放しますが、struct ip6_flowlabelは後のRCUガベージコレクションまでグローバルハッシュテーブル内に残ります。そのため、同時に/proc/net/ip6_flowlabelを読み取る処理で早期のkfree()と競合し、解放済みオプションを参照することでip6fl_seq_show()がクラッシュする可能性がありました。この問題はfl_free_rcu()までfl-optの存続を保持することで修正され、RCU下で安全に読み取りができるようになりました。
Linuxカーネルにおいて、以下の脆弱性が解決されました。batman-advでは、skbのテイルルームが不足している場合のOGM集約を回避します。runtimeでOGM集約状態が切り替わると、既存の転送パケットはpacket_lenバイト分のみ割り当てられている可能性があり、後続のパケットが集約のために選択されることがあります。この場合の追加操作はskb_putのオーバーフロー状態を引き起こす可能性があります。ターゲットskbのテイルルームが新しいパケットを収容できない場合、集約を拒否します。呼び出し元は追加するのではなく、新しい転送パケットを作成することにフォールバックします。
Linuxカーネルのmm/kasanサブシステムにおいて、kasan pXdsの二重解放の脆弱性が修正されました。本脆弱性は、一部のアーキテクチャ(例えば64Kページサイズのpowerpc)において、ページテーブルのメモリ解放時に不正なアドレス処理が行われ、kasanによる二重解放が発生する問題です。この問題は、ページテーブルが常にstruct pageにアラインされているという誤った前提に基づいていたため、powerpcなどの環境でメモリ破壊やシステムの不安定を引き起こしていました。修正により、ページテーブルの実際の物理アドレスを正しく扱うよう変更されており、これによりkasanの二重解放エラーを防止し、システムの安全性と安定性が向上します。
Linuxカーネルにおいて、以下の脆弱性が修正されました。ドライバーコアのdriver_match_device()に対してdevice_lockの強制適用が行われました。現在、driver_match_device()は3つの箇所から呼び出されています。1つの箇所(__device_attach_driver)はdevice_lock(dev)を保持していますが、他の2つ(bind_storeと__driver_attach)は保持していませんでした。この不整合により、busのmatch()コールバックがロック保持下で呼び出される保証がありませんでした。この問題を解決するために、deviceロックをscoped guardで保持するdriver_match_device_locked()を導入しました。bind_store()と__driver_attach()内のロックなしの呼び出しをこの新しいヘルパーに置き換えました。また、この保証を強制するためにdriver_match_device()にロックアサーションも追加しました。この整合性により既知の競合状態も修正されました。driver_overrideの実装はdevice_lockに依存しているため、このロックの欠如がバスで報告されていたuse-after-free(UAF)の原因となっていました。CONFIG_PROVE_LOCKINGおよびCONFIG_LOCKDEPを有効にした状態で、2つの新たにロックされた経路を24時間ストレステストした結果、UAFの再発やlockdep警告は発生しませんでした。
Linuxカーネルにおいて、TH1520 AONファームウェアプロトコルドライバーの2つの問題が修正されました。1つ目は、不安全なポインタ演算によりバッファオーバーフローが発生する可能性があった問題を修正したことです。2つ目は、カスタムのエンディアン変換マクロを標準のカーネルのエンディアン変換マクロに置き換えることで、移植性と保守性が向上したことです。これらの修正により、GPUの電源投入シーケンスが正常に動作し、ドライバーのプローブが成功することが確認されました。
Linuxカーネルにおいて、以下の脆弱性が修正されました。cifsのリプレイ時に初期化が不足している問題です。いくつかのコード箇所で、リプレイが必要な場合にリクエストの開始を示すラベルがあります。しかし、これらの箇所の一部では、リプレイ前に特定のローカル変数を再初期化する必要がありましたが、それが欠落していました。この変更により、これらの変数がラベルの後に正しく初期化されるようになりました。
Linuxカーネルにおいて、以下の脆弱性が修正されました:fuseはページキャッシュ内の過剰なdirentを拒否します。fuse_add_dirent_to_cache()関数は、サーバー制御下のnamelenフィールドから直列化されたdirentのサイズを計算し、direntを単一のページキャッシュページにコピーします。既存のロジックはdirentが現在のページの残りのスペースに収まるかどうかのみをチェックし、収まらなければ新しいページに進みます。しかし、dirent自体がPAGE_SIZEを超えているかどうかはチェックしていませんでした。その結果、悪意のあるFUSEサーバーがnamelen=4095のdirentを返すことができ、直列化レコードサイズは4120バイトになりました。4KiBページシステムでは、これによりmemcpy()関数がキャッシュページを24バイトオーバーフローし、次のカーネルページに侵入しました。現在では、readdirキャッシュにコピーする前に、単一ページに収まらないdirentを拒否するように修正されています。
Linuxカーネルには、virt_wifiネットデバイスに関するuse-after-freeの脆弱性が存在していました。この問題は、virt_wifiデバイスの登録解除中にネットデバイスの参照が保持されてしまうために発生します。解放済みメモリを参照することで、ethtool操作時に不正なメモリアクセスが起きる可能性がありました。この脆弱性を修正するために、virt_wifiに対するSET_NETDEV_DEV呼び出しを削除しました。これによりuse-after-freeのリスクを回避し、安定性と安全性が向上しました。
Linuxカーネルにおいて、以下の脆弱性が修正されました:rxrpcの非XDRキー事前解析におけるチケット長の検証漏れです。rxrpc_preparse()には、キーのペイロード解析のために2つの経路があります。XDR経路(大きなペイロード用)と非XDR経路(28バイト以下のペイロード用)です。XDR経路(rxrpc_preparse_xdr_rxkad())はAFSTOKEN_RK_TIX_MAXに対してチケット長を正しく検証しますが、非XDR経路では行われていませんでした。このため、権限のないユーザーが非常に大きなチケット長を提供できてしまう問題がありました。後にrxrpc_read()でキーが読み込まれる際、トークン全体のサイズ(toksize)の計算がAFSTOKEN_LENGTH_MAXを超える値となり、WARN_ON()が発生します。[ 2001.302904] WARNING: CPU: 2 PID: 2108 at net/rxrpc/key.c:778 rxrpc_read+0x109/0x5c0 [rxrpc] この問題は、rxrpc_preparse()の非XDR解析経路においてチケット長がAFSTOKEN_RK_TIX_MAXを超えないことを確認するチェックを追加することで修正されました。この検証はXDR解析ロジックと同等に行われています。
Linuxカーネルにおいて、以下の脆弱性が修正されました。crypto: ccpにおいて、PSPコマンドが失敗した場合にCPUのIDをユーザースペースにコピーしようとしないようにしました。CPUのIDを取得する際、ファームウェアコマンドが失敗した場合はIDデータをユーザースペースにコピーしない仕様に変更しました。失敗は無効な長さ、つまりユーザースペースのバッファと長さが小さすぎる場合に発生します。この場合、ファームウェアが要求するバイト数をコピーするとカーネルが割り当てたバッファがオーバーフローし、ユーザースペースにデータが漏洩する可能性があります。BUG: KASAN: slab-out-of-boundsはinstrument_copy_to_user ../include/linux/instrumented.h:129 [inline]、_inline_copy_to_user ../include/linux/uaccess.h:205 [inline]、および_copy_to_user+0x66/0xa0 ../lib/usercopy.c:26で発生しました。64バイトの読み取りがアドレスffff8881867f5960でタスクsyz.0.906/24388によって実行されました。CPU: 130 UID: 0 PID: 24388 コマンド: syz.0.906 汚染状態: G U O 7.0.0-smp-DEV #28 PREEMPTLAZY 汚染詳細は[U]=ユーザー、[O]=OOT_MODULEです。ハードウェア名はGoogle, Inc. Arcadia_IT_80/Arcadia_IT_80、BIOSは12.62.0-0で2025年11月19日です。コールトレースはdump_stack_lvl、print_address_description、print_report、kasan_report、check_region_inline、kasan_check_range、instrument_copy_to_user、_inline_copy_to_user、_copy_to_user、copy_to_user、sev_ioctl_do_get_id2、sev_ioctl、vfs_ioctl、__do_sys_ioctl、__se_sys_ioctl、do_syscall_x64、do_syscall_64、entry_SYSCALL_64_after_hwframeです。ドライバがコマンド成功を通知しても、ファームウェアのエラーコードが異なる場合は警告を発してください。これは__sev_do_cmd_locked()がファームウェアエラー時に-EIOを返すことが期待されているためです。
Linuxカーネルにおいて以下の脆弱性が修正されました。crypto: ccp: PSPコマンドが失敗した場合にPDH証明書をユーザースペースにコピーしません。PDH証明書の取得時にファームウェアコマンドが失敗した場合、無効な長さが原因でバッファオーバーフローやユーザースペースへの情報漏洩が発生する可能性がありました。この問題に対して警告を出すことで、ドライバーがコマンド成功を示しつつもファームウェアのエラーを正しく処理できるようにしています。
Linuxカーネルにおいて、crypto: ccp: PSPコマンドが失敗した場合にCSRをユーザースペースにコピーしないよう修正されました。PEK CSRを取得する際、ファームウェアコマンドが失敗した場合はデータのコピーを行わず、これによりバッファオーバーフローやデータ漏洩のリスクを軽減します。この修正によって、ユーザースペースのバッファ長が小さすぎる場合にカーネルが割り当てたバッファをオーバーフローし、不正なメモリアクセスが発生する問題が解決されました。
Linuxカーネルにおいて、以下の脆弱性が修正されました:net/packetのtpacket_snd()内でmmapされたvnet_hdrに対するTOCTOU競合状態を修正しました。tpacket_snd()では、PACKET_VNET_HDRが有効な場合、vnet_hdrはユーザースペースと共有されるmmapされたTXリングバッファを直接指します。カーネルは__packet_snd_vnet_parse()でヘッダーを検証しますが、その後virtio_net_hdr_to_skb()で全フィールドを再読み込みします。この間にユーザースペースのスレッドがvnet_hdrフィールドを変更すると、安全性チェックをすり抜ける可能性があります。非TPACKETパス(packet_snd())では既にvnet_hdrをスタックローカル変数に正しくコピーしています。カーネル内の他のvnet_hdrの利用箇所(tun.c、tap.c、virtio_net.c)もスタックコピーを使用しています。TPACKET TXパスのみがvirtio_net_hdr_to_skb()を呼び出し、ユーザー制御の共有メモリから直接読み取っていました。この問題は、packet_snd()や他の呼び出し元と同様に、検証および使用前にmmapされたリングバッファからvnet_hdrをスタックローカル変数にコピーする方法で修正されました。
LinuxカーネルのF2FSファイルシステムに脆弱性が存在し、f2fs_compress_write_end_io()内でuse-after-freeの問題が発生しました。この関数ではdec_page_count()の呼び出しによりカウントがゼロになると、アンマウント処理が進行して関連メモリが解放される可能性があります。しかし、bioの完了コールバックがまだ実行中のため、破棄されたメモリを使用して処理が行われ、use-after-freeの脆弱性が生じます。この問題はアンマウント時の競合状態に起因しており、修正ではdec_page_count()の呼び出し位置を変更し、メモリ解放前に全てのアクセスを完了させるようにしました。
Linuxカーネルにおいて、writebackサブシステムのinode_switch_wbs_work_fn()関数に存在したuse-after-freeの脆弱性が修正されました。この関数内部では、work構造体のリストをループ処理してアイテムを処理していましたが、workキューが保留中にもかかわらず、新しいアイテムがリストに追加されていない状態が発生し、解放されたwork構造体を参照し続ける問題がありました。このため、メモリ破壊の危険がありました。従来の参照カウントと作業キャンセルの仕組みだけでは問題の根本的な解決に不十分であったため、ループ構造を除去し、作業キューに登録される際に少なくとも最初のアイテムがリストに確実に存在することを保証する対策が取られました。これにより、不正なuse-after-freeを防止し、writebackの安全性が向上しました。
Linuxカーネルにおいて、以下の脆弱性が修正されました。ksmbdのsmb_inherit_dacl()関数内におけるnum_acesの検証とACEwalkの強化が行われました。smb_inherit_dacl()では、親ディレクトリのDACL xattrからオンディスクのnum_aces値を信用し、それを元にヒープ割り当てのサイズを決定していました。num_acesはle16_to_cpu(parent_pdacl-num_aces)からu16として読み取られますが、宣言されているpdacl_sizeとの整合性を検証していませんでした。認証されたクライアントは、親ディレクトリのsecurity.NTACLが改竄されている場合(例えば、オフラインでのxattr破損やparse_dacl()をバイパスするパスの同時操作により)、最小限の実際のACEデータしかない状態でnum_aces=65535を提示できます。これにより約8MBの割り当てが発生し(kzallocではないため初期化されていません)、後続のループは部分的にしかデータを埋めません。また、32ビットカーネルでは三方向のsize_t乗算オーバーフローを引き起こす可能性もありました。さらに、ACEの走査ループはoffsetof(struct smb_ace, access_req)という弱い最小サイズチェックを使用しており、ACEサイズが最小値未満の場合も拒否していませんでした。この問題はUML + KASAN + LOCKDEP環境にて実際のksmbdコード経路で再現されました。正規のmount.cifsクライアントがSMB経由で親ディレクトリを作成するとksmbdが有効なsecurity.NTACL xattrを書き込みますが、バックエンドファイルシステム上のNTACLバイナリが書き換えられ、num_acesが0xFFFFに設定されたもののposix_acl_hashが維持されているためksmbd_vfs_get_sd_xattr()のハッシュ検証は通過しました。その後のSMB2 CREATEで親の下に子が作成されると(シェアに"vfs objects = acl_xattr"が設定されている場合)、smb2_open()がsmb_inherit_dacl()を呼び出し、ページアロケータ失敗を引き起こします。パッチ適用後は、追加されたガードによって大きな割り当ての実行前に改竄された値を-EINVALで拒否し、smb2_open()はsmb2_create_sd_buffer()へフォールバックして子をデフォルトのSDで作成します。その結果、警告やクラッシュは発生しません。修正点は以下の通りです。1.num_acesをparse_dacl()で使用するのと同じ計算式でpdacl_sizeと照合して検証しました。2.オーバーフロー安全な割り当てのため、生のkmalloc(sizeof * num_aces * 2)をkmalloc_array(num_aces * 2, sizeof(...))に置き換えました。3.各ACEループのガードを強化し、有効な最小ACEサイズ(offsetof(smb_ace, sid) + CIFS_SID_BASE_SIZE)を要求し、過小サイズのACEを拒否するようにしました。これによりsmb_check_perm_dacl()やparse_dacl()の強化と整合しました。v1からv2では、合成テストモジュールでの停止表示を実用的なUML + KASAN複製に置換し、mount.cifsとSMB2 CREATE経路での再現に変更しました。さらにNamjaeによるコードレビューに従い、コードコメントからコミットハッシュの記述を削除し、parse_dacl()の参照は保持しました。
Linuxカーネルにおいて、以下の脆弱性が修正されました。ksmbdのipc_validate_msg()関数内でレスポンスサイズの検証を行います。ipc_validate_msg()は、攻撃者が制御可能なデーモンレスポンスのフィールドを固定構造体サイズに加算または乗算し、各レスポンスタイプの予想メッセージサイズを符号なし整数の算術で計算します。次の3つの場合にオーバーフローが発生する可能性があります。KSMBD_EVENT_RPC_REQUESTでは、msg_sz = sizeof(struct ksmbd_rpc_command) + resp-payload_szとなります。KSMBD_EVENT_SHARE_CONFIG_REQUESTでは、msg_sz = sizeof(struct ksmbd_share_config_response) + resp-payload_szとなります。KSMBD_EVENT_LOGIN_REQUEST_EXTでは、msg_sz = sizeof(struct ksmbd_login_response_ext) + resp-ngroups * sizeof(gid_t)となります。resp-payload_szは__u32型、resp-ngroupsは__s32型です。各加算は符号なし整数でラップする可能性があり、sizeof(gid_t)との乗算は符号付きとsize_tの混用であるため、負のngroupsは乗算前にSIZE_MAXに変換されます。ラップしたmsg_szの値がたまたまentry-msg_szと等しい場合、次の行でのサイズチェックを回避し、下流の消費者(smb2pdu.c:6742のrpc_resp-payload_szを使うmemcpyやksmbd_alloc_userのkmemdupでresp_ext-ngroupsを使用)が未検証の長さを信用してしまいます。RPC_REQUESTおよびSHARE_CONFIG_REQUESTのパスにはcheck_add_overflow()を使用し、整数オーバーフローを検出しつつ機能的なペイロードサイズを制限しません。ユーザー空間のksmbd-toolsはNetShareEnumAllのような呼び出しでNDRレスポンスを4096バイト単位で増加させるため、レスポンス側でのハードな転送上限は不適切です。LOGIN_REQUEST_EXTについては、resp-ngroupsが符号付きの[0, NGROUPS_MAX]範囲外であれば受付けず、ipc_validate_msg()でエラーを報告してIPC境界で検出できるようにしています。この制限により乗算・加算はUINT_MAXを大幅に下回ります。今後は冗長となるngroupsチェックとksmbd_alloc_user()内のpr_errを削除します。これはリクエスト側を強化したaab98e2dbd64("ksmbd: 32ビットシステムでの整数オーバーフロー修正")のレスポンス側に対応した修正です。
Linuxカーネルにおいて、以下の脆弱性が修正されました:smbクライアントのsmb2_ioctl_query_info関数のQUERY_INFOパスに存在するOOB読み取りの問題です。smb2_ioctl_query_info()にはPASSTHRU_FSCTLとデフォルトのQUERY_INFOの2つのレスポンスコピー分岐があります。QUERY_INFO分岐では、qi.input_buffer_lengthをサーバーが報告したOutputBufferLengthに制限し、その後qi_rsp-Bufferからqi.input_buffer_lengthバイトをユーザースペースにコピーしますが、フレキシブル配列のペイロードがrsp_iov[1].iov_len内に収まっているかを検証していませんでした。悪意のあるサーバーは実際のQUERY_INFOレスポンスより大きいOutputBufferLengthを返すことが可能であり、その結果copy_to_user()がレスポンスバッファを越えて読み取り、隣接するカーネルヒープをユーザースペースに露出させる恐れがありました。今回の修正では、QUERY_INFOのコピー処理を実際のBufferペイロードの境界チェックで保護しています。また、32ビットビルドにおけるガードのオーバーフローを防ぐために、オープンコーディングされた加算の代わりにstruct_size(qi_rsp, Buffer, qi.input_buffer_length)を使用しています。
Linuxカーネルにおいて、以下の脆弱性が修正されました。smbクライアントのcifsaclで、DACL全体を検証せずに書き換えていた問題です。build_sec_desc()およびid_mode_to_cifs_acl()は、サーバーから提供されたdacloffsetからDACLポインターを取得し、受信したACLを使用してchmodやchownのセキュリティ記述子を再構築します。元の修正では、struct smb_aclのヘッダーが読み取り前に適切に収まっているかのみをチェックし、dacl_ptr-sizeやdacl_ptr-num_acesの範囲外読み取りを回避していました。しかし、書き換えヘルパーは受信したDACL本体の構造的検証を行わず、pdacl-num_acesに基づいてACEを処理していました。悪意のあるサーバーは、ヘッダーは存在し1つ以上のACEがあると主張するものの不完全なDACLを返し、その後replace_sids_and_copy_aces()やset_chmod_dacl()を範囲外アクセスに誘導し、攻撃者制御下のACEを比較・コピーすることが可能でした。そこでDACLの構造チェックをvalidate_dacl()にまとめ、各ACEがDACLの境界内にあることを検証する機能を拡張し、chmodやchownの再構築パスの前に共通の検証器を使用するようにしました。parse_dacl()も同じ検証器を再利用し、読み込み側のパーサーと書き換えパスが妥当な受信DACLの定義で一致するようにしています。
Linuxカーネルにおいて、以下の脆弱性が修正されました:smbサーバのトランスポート割り当て失敗時に発生するactive_num_connのリークです。コミット77ffbcac4e56("smb: server: ksmbd_tcp_new_connection()内のactive_num_connリーク修正")はkthread_run()の失敗経路に対処しました。同じ関数内の以前のalloc_transport() == NULL経路にも同様のリークが存在し、これは認証前にTCPポート445への任意の接続で到達可能でした。UML(ARCH=um, v7.0-rc7)環境で経験的に再現されています。強制的な割り当て失敗が少数でも、ksmbdは起動後の残りの期間中に後続のすべての接続試行を拒否する状態になります。ksmbd_kthread_fn()はksmbd_tcp_new_connection()を呼び出す前にactive_num_connをインクリメントし、戻り値を破棄するため、alloc_transport()がNULLを返すとソケットは解放され-ENOMEMが返されますが、カウンタは減算されません。この失敗はそれぞれmax_connectionsプールからスロットを永続的に消費します。累積失敗がしきい値に達するとatomic_inc_return()は以降のすべてのacceptでしきい値に達し、新規接続はすべて拒否される状態になります。カウンタはモジュールの再読み込みによってのみリセットされます。未認証のリモート攻撃者は、大きなRFC1002長さ(MAX_STREAM_PROT_LEN(0x00FFFFFF)まで)の接続を保持することでalloc_transport()失敗を引き起こすメモリ圧力にサーバを追い込むことができます。負荷の高いホストでは自然な一時的割り当て失敗も同様の状態を遅れて引き起こす可能性があります。ksmbd_kthread_fn()内の既存のロールバックパターンに従い、alloc_transport()失敗経路ではserver_conf.max_connectionsにより制御される条件下でactive_num_connを減算します。再現詳細としては、パッチが戻された場合、強制的にalloc_transport()がNULLを返すことでカウンタースロットがリークし、強制失敗期間後に発行された正当な接続を含む後続の接続試行はすべて「接続数の最大制限」のため拒否されました。このパッチを適用すると同じ接続シーケンスで拒否は発生せず、カウンターはacceptごとにゼロと1の間できれいに循環します。
Linuxカーネルにおいて、以下の脆弱性が修正されました。ksmbdのsmb_check_perm_dacl()関数でACEの最小サイズを適切に要求するように改善されました。smb_check_perm_dacl()内の両方のACEウォークループは、残りのバッファが小さすぎる場合のみ防御しており、構造体より小さいと宣言されたace-sizeに対しては防御していませんでした。最初のチェックは4バイトのACEヘッダーが範囲内であることのみを要求しており、offset 4のaccess_req(4バイト)が読み取り可能であることは要求していませんでした。攻撃者が所有するファイルに細工されたDACLを設定すると、ace-sizeが4かつaces_sizeが4と宣言し、両方のチェックを通過した後、上位ループでgranted |= le32_to_cpu(ace-access_req);を、下位ループでcompare_sids(&sid, &ace-sid);を呼び出しますが、これはoffset 4のaccess_req(最大4バイトのOOB)およびoffset 8のace-sid(最大CIFS_SID_BASE_SIZE + SID_MAX_SUB_AUTHORITIES * 4バイトのOOB)を読み取る結果となります。これらの両ループを厳密化し、ace_sizeがoffsetof(struct smb_ace, sid) + CIFS_SID_BASE_SIZE以上であることを要求するようにしました。これは最小の有効なオンワイヤACEレイアウト(4バイトヘッダー+4バイトaccess_req+8バイトのsidベースでサブ認証なし)です。また、compare_sids()はsub_auth[]エントリを参照する前にsid.num_subauthがSID_MAX_SUB_AUTHORITIESを超えるACEを却下するようにしました。parse_sec_desc()は既に同等のチェックを実施していました(行441から448)が、smb_check_perm_dacl()は時間経過とともに検証が弱くなっていました。到達条件はファイルのACL設定権限を持つ認証済みSMBクライアントです。そのファイルに対するCREATE操作時にカーネルが保存されたDACLをsmb_check_perm_dacl()経由で走査し、OOB読み取りを引き起こします。これは事前認証ではなく、OOB読み取りの影響は攻撃者に反映されませんが、KASANレポートやカーネル状態の破損が発生する可能性があります。
Linuxカーネルのf2fsファイルシステムに存在する脆弱性です。f2fs_write_end_io()関数内でsbi-nr_pages[]をデクリメントする際にUse-After-Freeが発生し、NULLポインタ参照によるパニックが引き起こされる問題が修正されました。この脆弱性はumount時の競合状態で発生し、f2fs_put_super()がiput(sbi-node_inode)を呼び出してsbi-node_inodeをNULL化することで、後続のf2fs_in_warm_node_list()がNULL参照を行うことが原因でした。この問題は、nr_pagesのデクリメントを行う前にf2fs_in_warm_node_list()を呼び出すように修正することで解決されました。
Linuxカーネルにおいて、以下の脆弱性が修正されました。fs/ntfs3のジャーナルリプレイにおけるファイルレコードチェックで、check_file_record()関数はrec-totalをレコードサイズと比較して検証しますが、rec-usedは検証していませんでした。do_action()のジャーナルリプレイハンドラーはディスクからrec-usedを読み取り、memmoveの長さを計算する際にこの値を使用します。具体的には、DeleteAttributeではmemmove(attr, ..., used - asize - roff)、CreateAttributeではmemmove(..., attr, used - roff)、change_attr_sizeではmemmove(..., used - PtrOffset(rec, next))という形です。もしrec-usedが検証済み属性のオフセットより小さいか、レコードサイズより大きい場合、これらの引き算がアンダーフローして4KBバッファに大量のメモリコピーが発生する恐れがあります。この状況は一般的に非常に危険とされています。この問題は破損したファイルシステムが前提となるため、カーネルの脅威モデルには直接関係しませんが、ジャーナルリプレイ時の堅牢性を保つためには、このような明らかに範囲外の値を検証することが特に重要です。修正はrec-usedの値を適切に制限することで対処しました。本修正は、同じswitch文内で異なる値を検査したコミットb2bc7c44ed17("fs/ntfs3: DeleteIndexEntryRootのスラブアウトオブバウンズ読み取りの修正")と類似しています。
無効なbase64 SASLデータを送信すると、認証サーバーがログインプロセスを切断し、すべてのアクティブな認証セッションが失敗します。無効なBASE64データは、脆弱なサーバーに対してDoS攻撃を行い、同時ログインを妨害するために使用できます。修正バージョンをインストールするか、ログインプロセスの同時実行を無効にしてください(大規模な展開では大きなパフォーマンスペナルティが生じます)。公開されているエクスプロイトは知られていません。
ManageSieveのAUTHENTICATEコマンドは、SASL初期応答としてリテラルを使用するとクラッシュします。これにより、ManageSieveサービスが繰り返しクラッシュし、他のユーザーが利用できなくなる可能性があります。ManageSieveポートへのアクセスを制御するか、不要な場合はサービスを無効にしてください。あるいは、修正済みのバージョンにアップグレードしてください。公開されている悪用コードは知られていません。
4000個の括弧の開閉を含む"NOOP (((...)))"コマンドを送信すると、約1MBの追加メモリ使用量が発生します。より長いコマンドはクライアントの切断を引き起こします。この1MBはコマンド終了の改行コード(LF)を送信しないことで長期間割り当てられたままになる可能性があります。したがって、攻撃者は単一のIPからでも接続して1000個の接続を作成し、1GBのメモリを割り当てられます。これにより、VSZ(仮想メモリサイズ)制限に達してプロセスや他のプロキシ接続が終了する可能性があります。修正済みバージョンをインストールすることが唯一の対策です。公開されている攻撃コードは確認されていません。
攻撃者は認証前に特別に細工されたメッセージを送信することで、managesieveに大量のメモリを割り当てさせることができます。攻撃者はmanagesieve-loginプロセスを繰り返しクラッシュさせることで、managesieve-loginを利用不能にすることが可能です。managesieveプロトコルへのアクセスを保護するか、修正済みのバージョンをインストールしてください。公開されているエクスプロイトは現在のところ存在しません。
脆弱性情報(JVN) よくある質問
脆弱性を製品名やベンダ名で検索できますか?
はい。製品・ベンダ・脆弱性タイプ(CWE)で全文検索し、深刻度(CVSS)で絞り込めます。発表日の新しい順に表示します。
CVSS(深刻度)とは何ですか?
脆弱性の深刻さを0〜10で表す共通指標です。数値が大きいほど影響が大きく、緊急・重要・警告・注意などの区分で絞り込めます。
影響を受ける製品やベンダ企業は分かりますか?
各脆弱性の詳細ページで、影響を受ける製品・ベンダを確認できます。ベンダ名は法人検索と突き合わせて企業情報もたどれます。
情報の出典を教えてください。
JVN(IPA〔情報処理推進機構〕・JPCERT/CC 提供)の公開情報を収録しています。対応の要否は必ず各JVN詳細・公式情報でご確認ください。
出典:JVN(Japan Vulnerability Notes・独立行政法人情報処理推進機構(IPA)/JPCERT コーディネーションセンター/jvn.jp)を加工して作成。 全文検索は当サイト収録分(全289,811件)を対象とし、発表日の新しい順に表示しています。 本情報の最新性・正確性・完全性は保証されません。詳細は各 JVN 詳細ページをご確認ください。 なお本情報は製品・ソフトウェアの脆弱性に関するものであり、特定の法人・製品ベンダの評価や信用性を示すものではありません。