注目★★★★★GitHub Advisory
Dulwich checkout に任意ファイル書き込み、Symlink 経由で RCE
30秒で把握
- 1Dulwich checkout(paths=[]) が symlink 経由の任意ファイル書き込みを許可
- 2raw os.open() が O_NOFOLLOW なしで対象と中間ディレクトリを追従
- 3.git/hooks/post-checkout 書き換えにより次回 checkout で RCE
要約
Dulwich の porcelain.checkout(paths=[...]) が symlink 保護を迂回し、攻撃者が任意のファイルへ内容を書き込める脆弱性が判明した。raw os.open() が対象ファイルと中間ディレクトリの symlink を追従し、ユーザー権限でアクセスできる場所を上書きする。.git/hooks/post-checkout に悪意ある内容を書けば、次回の checkout で RCE に至る。原因はパス名だけを検証する _checked_worktree_path() と、O_NOFOLLOW を指定しない os.open() の組み合わせにある。
あなたへの影響
Dulwich で checkout(paths=[...]) を使う日本の開発チームは、修正版の有無を確認するまで不審なリポジトリの checkout を避け、フックファイルの変更を監視してください。
推奨:symlink write-through は、リンク先へ意図せず書き込む問題です。