Modern Frontend CVEs

対象CVE: CVE-2026-102829

[緊急注意喚起] simple-gitの深刻な脆弱性:環境変数VISUALによる任意コード実行の可能性

Node.js製Git操作ライブラリ`simple-git`の内部パッケージ`@simple-git/argv-parser`に深刻な脆弱性GHSA-v5rq-49vh-5v5cが発見されました。これにより、特定の条件下で攻撃者が指定したコードが実行される可能性があります。

脆弱性GHSA-v5rq-49vh-5v5c / CVE-2026-102829の概要

この脆弱性は、Node.jsでGitリポジトリを操作するための人気ライブラリ`simple-git`が利用している`@simple-git/argv-parser`パッケージに存在します。通常、`simple-git`はGitコマンド実行時に危険な環境変数(例:エディタ指定)が渡されないようにチェックを行いますが、このチェックが不完全であったため、特定の環境変数を介してこの安全対策をバイパスし、攻撃者が指定した任意コードを実行できる可能性があります。

深刻度は`critical`に分類されており、`simple-git`を利用しているアプリケーションや開発環境に重大なリスクをもたらす可能性があります。

脆弱性の詳細と技術的な背景

`@simple-git/argv-parser`パッケージは、Gitコマンドに渡される環境変数を解析し、セキュリティ上の脆弱性がないかを確認する役割を担っています。特に、`EDITOR`, `GIT_EDITOR`, `GIT_SEQUENCE_EDITOR`といった、Gitがエディタを起動する際に参照する環境変数に対しては、「安全でないエディタの利用」として検知し、デフォルトではその操作をブロックします。

しかし、Gitはエディタを決定する際に、これらの変数以外にも`VISUAL`という環境変数を参照します。Gitのエディタ選択の優先順位は一般的に以下のようになっています:

1. `GIT_EDITOR` (最も高優先度)

2. `core.editor` (Git設定)

3. `VISUAL`

4. `EDITOR` (最も低優先度)

この脆弱性の核心は、`@simple-git/argv-parser`が`VISUAL`環境変数を危険なエディタ指定として認識せず、その値をフィルタリングしてしまい、最終的にセキュリティチェックをすり抜けてしまう点にあります。結果として、攻撃者は`VISUAL`に悪意のあるスクリプトのパスを設定することで、`simple-git`の安全対策を迂回して、そのスクリプトを実行させることが可能になります。

攻撃が成立する条件(Preconditions)

この脆弱性を悪用するには、いくつかの前提条件があります。

1. **攻撃者が環境変数に影響を与えられること:** `simple-git`を使用するアプリケーションが、外部からの入力(例:ユーザー入力、Webリクエスト、CI/CDパイプラインの変数)に基づいて、子プロセスであるGitに渡す環境変数を設定できる場合。

2. **Gitコマンドがエディタを起動すること:** `git commit --amend`、`git rebase -i`、または`git commit`に`-m`オプションがない場合など、Gitがユーザーにメッセージの編集を求める操作を実行する場合。

3. **高優先度のエディタ設定がないこと:** `GIT_EDITOR`や`core.editor`が設定されていない、または攻撃者がこれらを上書きできる場合。`VISUAL`は`EDITOR`より優先されます。

4. **`TERM`環境変数の設定:** Gitが`VISUAL`を参照するのは、`TERM`が`dumb`以外の値に設定されている場合です。攻撃者が環境変数を制御できる場合、これも設定可能です。

これらの条件が揃うと、`simple-git`が提供するデフォルトの安全機能が機能せず、攻撃者の意図するコードが実行されてしまいます。

影響と潜在的なリスク

この脆弱性が悪用された場合、以下のような深刻な影響が考えられます。

対策と推奨事項

この脆弱性に対処するためには、以下の対策を速やかに実行してください。

フロントエンド開発者へのメッセージ

「フロントエンドだからGitの脆弱性は関係ない」と思うかもしれませんが、それは違います。現代のフロントエンド開発はNode.jsエコシステムに深く依存しており、多くのビルドツール、タスクランナー、開発サーバー、CI/CDツールが内部でNode.jsを通じてGit操作を行っています。例えば、npmスクリプトやYarnスクリプトから`simple-git`を利用しているパッケージが知らず知らずのうちに存在し、開発環境やCI/CD環境にリスクをもたらす可能性があります。

開発者の皆さんは、利用しているライブラリの依存関係を確認し、`simple-git`や`@simple-git/argv-parser`が含まれていないか、含まれている場合は最新バージョンが適用されているかを確認するようにしましょう。セキュリティはバックエンドだけでなく、フロントエンド、そして開発環境全体で考慮すべき重要な要素です。

← ブログ一覧に戻る