CVE-2026-89638
要約
〜によって VulDB • 2026年09月12日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
smb: クライアント: cifsacl/modefromsid/POSIX拡張機能を使用する際の書き込み時にsetuid/setgidビットをクリアする
ファイルにsetuidまたはsetgidビットが設定されており、そのファイルへの書き込みが行われると、VFS(仮想ファイルシステム)はこれらのビットを取り除き、ATTR_KILL_SUIDおよびATTR_KILL_SGIDと共に、既にクリアされたモードを含むATTR_MODEを使用してsetattrを発行します。
cifs_setattr_unix() および cifs_setattr_nounix() の両関数は、この状況において ATTR_MODE を無条件にドロップしていました:
/* setuid/setgidのクリアのみを目的とする場合は、モード変更をスキップする */ if (attrs->ia_valid & (ATTR_KILL_SUID|ATTR_KILL_SGID)) attrs->ia_valid &= ~ATTR_MODE;
これは、デフォルトのマウントでは問題ありません。なぜなら、その場合のモードはDOSの読み取り専用属性を通じてのみエミュレートされ、setuid/setgidビットを表現できないからです。しかし、「cifsacl」または「modefromsid」というマウントオプションを使用する場合、モードはACL(id_mode_to_cifs_acl())を介してサーバーに保存されます。SMB3.1.1 POSIX拡張機能を使用する場合は、モードが直接サーバーへ送信され、SMB1 Unix拡張機能(cifs_setattr_unix)を使用する場合は、CIFSSMBUnixSetPathInfo() を通じてモードが送信されます。これらのすべてのケースにおいて ATTR_MODE をドロップすると、クリアされたモードはサーバーにプッシュされないため、setuid/setgidビットは書き込み後も残存してしまいます。
これはセキュリティ上の問題です:ローカルファイルシステムでは、ファイルへの書き込み時にsetuidビットは取り除かれますが、cifs.koのマウント経由ではそのビットがサーバー上で維持され、結果として後続の実行において予期せぬ特権昇格(Privilege Escalation)を招く可能性があります。
これを2つの箇所にて修正します:
1. cifs_setattr_nounix(): 「モード変更のスキップ」というショートカットは、モードがDOS読み取り専用属性を通じてエミュレートされている場合(つまり、cifsacl/modefromsid も SMB3.1.1 POSIX拡張機能も有効でない場合)のみ適用し、ACLおよびPOSIXの場合にクリアされたモードがサーバーへ伝播されるようにします。
2. cifs_setattr_unix(): この関数はUnix拡張機能が有効な場合にのみ呼び出されるため、モードは常にサーバー上に保存されます。ショートカットを完全に削除し、クリアされたモードが常にプッシュされるようにします。
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.