
TL;DR
OverlayFS の脆弱性により、Ubuntu 上のローカルユーザーが root 権限を取得できる仕組みを解説します。
脆弱性の概要
Linux カーネルの overlayfs ファイルシステムに関する Ubuntu 固有の問題で、ユーザー名前空間に関連するファイルシステムケーパビリティの適用を適切に検証していませんでした。Ubuntu が非特権 overlayfs マウントを許可するために取り込んだパッチにより、ローカルの攻撃者はこれを利用して特権を昇格させることができました。
CVE-2021-3493
クレジット
独立したセキュリティ研究者が、この脆弱性を SSD Secure Disclosure プログラムに報告しました。
影響を受けるバージョン
Ubuntu 20.10
Ubuntu 20.04 LTS
Ubuntu 18.04 LTS
Ubuntu 16.04 LTS
Ubuntu 14.04 ESM
ベンダーの対応
“本日、この問題に関するセキュリティアドバイザリを以下で公開しました。
https://ubuntu.com/security/notices/USN-4915-1 https://ubuntu.com/security/notices/USN-4916-1 https://ubuntu.com/security/notices/USN-4917-1
また、CVE トラッカーでもこの問題を公開しています。
https://ubuntu.com/security/CVE-2021-3493
以下は oss-security メーリングリストに送信されたメッセージの内容です: https://www.openwall.com/lists/oss-security/2021/04/16/1
脆弱性の分析
Linux は、setuid ビットと同様に機能するものの、より細かい粒度で設定できるファイルケーパビリティを拡張ファイル属性に格納してサポートしています。ファイルケーパビリティを設定する手順を擬似コードで簡略化すると、次のようになります: setxattr(...): if cap_convert_nscap(...) is not OK: then fail vfs_setxattr(...)
重要な呼び出しは cap_convert_nscap で、名前空間に関連する権限をチェックします。
自分の名前空間と自分のマウント上でファイルケーパビリティを設定する場合、問題はなく、その権限があります。問題は、OverlayFS がこの操作を基盤となるファイルシステムに転送する際、vfs_setxattr のみを呼び出し、cap_convert_nscap でのチェックをスキップすることです。
これにより、外部の名前空間/マウント上のファイルに任意のケーパビリティを設定でき、実行時にもそれらが適用されます。
Linux 5.11 では cap_convert_nscap への呼び出しが vfs_setxattr 内に移動されたため、もはや脆弱ではありません。