TL;DR
もしあなたがWindowsユーザーで、Git LFSを使っているなら、いますぐバージョン2.12.1にアップデートすること。
脆弱性の概要
Git LFSに脆弱性が発見され、約1日前(2020年11月5日)にバージョン2.12.1で修正、そして数時間前にCVE(CVE-2020-27955)が公表されました。影響を受けるプラットフォームはWindowsのみのようです。(理由は下)
発見者による情報によると、脆弱性の攻略は極めて簡単です:
- 攻撃者がリポジトリを用意し、
-
git.bat
という名のファイルを作る。中身はご自由に。 - 適当なファイルを作成し、Git LFSでトラックする。
- これらをコミットし、pushする。
- 被害者がこのリポジトリを
git clone
すると、git.bat
内のコードが実行される。
原因
攻略法からもわかる通り、これは「カレントディレクトリから実行ファイルを実行する」という、Uncontrolled Search Path Elementの問題です。「DLLハイジャッキング」と原理は同じです。
Go言語は書いたことがありませんが、以下の説明でだいたい理解できます (リリースノートより):
This occurs because on Windows, Go includes (and prefers) the current directory when the name of a command run does not contain a directory separator. This has been solved by always using PATH to pre-resolve paths before handing them to Go.
この問題は、Windowsにて、ディレクトリの区切り文字が含まれないコマンド名を実行するときに、(実行ファイルの検索場所に)カレントディレクトリを含め、そして優先するからです。この問題は、Goにコマンドを渡す前に、いつも環境変数PATHを使って事前に実行ファイルを検索することによって修正されました。
分析
私の分析では以下の通りです:
- CVSSv3.1: 8.8(High) (CVSS3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H)
- CVSSv2: 6.8(High) (CVSSv2/AV:N/AC:M/Au:N/C:P/I:P/A:P)