planet-green.com

気の向くままに。» 雑記ブログ😬

VSCode拡張機能「SFTP」などに潜むセキュリティリスク

VSCodeで自動アップロード機能が必要となり・・・

必要に迫られてVSCode(Visual Studio Code/Mac版)を5年ぶりに使ってみました。

PHPやHTML/CSSなどの開発作業中にローカルでファイルを保存したら開発用サーバーに自動アップロードしてくれる機能が欲しくて拡張機能を探していたところ、SFTP(https://marketplace.visualstudio.com/…)という便利そうなプラグインを見つけました。

この拡張機能は世界で100万ダウンロード以上されており(2021年12月現在)、VS Codeのユーザー数が1400万人なので、単純計算で14人に1人がインストールしてることになるのでしょうか。実際に使ってる人はもっと少ないと思いますが。

しかしこれがなかなか恐ろしい仕様で、サーバーのID/パスワードまたはSSH鍵のパスフレーズを平文でプロジェクト内の設定ファイル(.vscode/sftp.json)に記述しないといけないのです。

もしもうっかり .gitignoreでの除外指定を忘れてコミットに含めたまま公開リポジトリにプッシュでもした日には、なかなか面白い状況になりそうです。

それ以前の問題として、パスフレーズを平文にして秘密鍵と同じ端末に置くのは絶対にやってはいけないことであり、それはわざわざここで書くまでもない常識でしょう。

ローカルのDockerコンテナや開発サーバー用のならまだいいとしても、中には本番サーバー用または開発・本番とで兼用のものを設定する人も少なからずいそうです。

このSFTP拡張機能が品行方正なコードだったとしても、プロジェクト内の設定ファイルにパスフレーズが記述してあれば、他の悪意ある拡張機能から秘密鍵とパスフレーズをセットで盗み取ることが可能になります。

安全な環境を用意して検証してみましたが、MacのVS Codeの拡張機能は ~/.ssh/以下に置いた秘密鍵ファイルに自由にアクセスできます。Windowsでは未検証ですが同様かと思います。

気がかりな点

実はこの拡張機能、パスフレーズを設定ファイルに記述しなくていい方法もあります。あるのですが、何故か作者が意図的に公にしてない様子です。

例えば、毎回プロンプトで入力を求めるようにする方法とか、OS側のSSH_AGENTを利用する方法とか(どちらもGitHub上のIssuesページ)。

それらは、作者がユーザーから質問されてしぶしぶ回答してるような印象で、公式ドキュメント(README.md)では全く言及されていません。

上記の1番目のリンクでは設定項目のスペルが間違っているのを他の人に指摘されている始末だし、2番目のリンクでは「The REAMDE is clear.(READMEは明確だよ)」と返答しているものの、それはこの拡張機能のREADMEでなく、組み込んでいるmscdex/ssh2モジュールのREADMEのことなので、深く探そうとしなければ見つからないものでした。

作者は優秀なエンジニアのようなので、パスフレーズを平文で置くことの危険性は重々承知してるはずだと思うのですが。

比較的安全な方法があるのに、それを知っていながらドキュメントに書かないで危険な方法で設定するよう促しているようにすら見えます。

パスフレーズを平文で設定ファイルに書かせようと誘導する作為を感じ取ってしまうのですが、私の考えすぎでしょうか?

しかもこの作者が某国のデベロッパーであることも不安を一層強めています…

ご存知の方も多いと思いますが、その某国では政府がソフトウェア開発者にスパイウェアを仕込むように命令したら人民がそれを拒むことは出来ません。

作者がモラルの高い人で今は悪さをしない善良な拡張機能だったとしても、ある日の自動アップデートで突然・・・という可能性を排除できません。

(私は国籍で差別したくないし、私の前の職場にも某国の人がいて、とてもフレンドリーないい人で、その人の作る水餃子がとても美味しかった思い出があるので個人に対して悪い印象は無いのですが、セキュリティ問題に関しては現実的なリスクを考えないといけないと思います。)

もちろん、国家や犯罪組織が本気で悪意あるソフトウェアを仕込もうとしたら国籍を偽ることは簡単なので、開発者のGitHub上で表示される国籍だけで判断することは出来ませんが。

ですので、某国云々がこの話のメインではありません。一番の懸念点は秘密鍵のパスフレーズを平文で書かせようとする非常識さであると思っていただければ幸いです。

Googleで検索するとこの拡張機能を紹介してる日本のサイトも結構でてきて、ほとんどのサイト(全部みたわけではないです)が何の疑問も抱かずに使用を推奨しているようで少し不安になります。

VSCodeのプラグインが新しいサイバー攻撃の手口に

また、この拡張機能とは直接関係ありませんし想定しうる攻撃手法も異なりますがこんな記事がありました。

注意、VSCodeのプラグインが新しいサイバー攻撃の手口に

(一部引用)
Visual Studio Codeプラグインを悪用したサイバー攻撃は今後増加する可能性がある。プラグインをインストールする時は、そのプラグインが信用できるものであるか評価した上で導入を行うことが望まれる。

私が最初に目にした怪しそうな拡張機能がたまたまこの「SFTP」だっただけで、実は怖い拡張機能はたくさんあるのかもしれません。

VSCodeに限った話ではなく、私も以前なら

『大勢の人が使ってるオープンソースコードなら、多くの人がレビューしてるはずだから安全に違いない』

と思っていましたが、先日のApache Log4jの脆弱性問題の時にその甘い考えは打ち砕かれました・・・。

ローカルファイルを更新した時にサーバーに自動的にアップロードする件

話は冒頭に戻りますが、サーバーへの自動アップロードの件、結局どうしたかといいますと、定番の手法、fswatchでファイル更新を監視してrsyncを走らせる方法にしました。

コマンドで書くとこんな感じです。lsyncdでも良かったのですがMac(Big Sur)だとリムーバブルメディアでの監視が機能しなかったのでfswatchにしました。

$ fswatch -o --exclude '/\.' . | xargs -n1 -I{} rsync -avtzspu --exclude-from 除外ファイルリスト.txt /path/to/local/ username@hostname:/path/to/remote

(最初に試す時は必ずrsyncに–dry-runオプションを付けてくださいね)

正直、自動アップロード機能くらいは標準で付けて欲しいです、マイクロソフト様。

次へ 投稿

前へ 投稿

返信する

* 画像に書かれている英数字を入力してください。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

© 2022 planet-green.com

テーマの著者 Anders Norén


planet-green.com