Nxのデーモンとプラグインワーカーのソケットは、他のローカルユーザーからアクセス可能です。
## 概要
Nxは、デーモンとプラグインワーカーに対して、デフォルトの権限で共有の一時ディレクトリ内にUnixドメインソケットを作成します。そのため、同じマシン上の他のユーザーはこれらのソケットに接続できます。デーモンは、ロードするモジュールを指定する`PROCESS_IN_BACKGROUND`リクエストを受け付け、そのモジュールのデフォルトのエクスポートを呼び出します。これにより、ソケットアクセスがデーモンプロセス内のコード実行に変換されます。マルチユーザー環境(共有ビルドサーバー、共有の開発環境、または複数のアカウントを実行するコンテナなど)では、ローカルユーザーがNxを実行している別のユーザーとしてコードを実行できます。
## 深刻度
デーモンまたはプラグインワーカーが実行されている間、共有ホスト上の他の特権を持たないローカルユーザーが、ユーザーの操作なしでこの脆弱性を悪用できる可能性があります。現在までに、この脆弱性が実際に悪用されたという報告はありません。
## 影響を受けるバージョンと修正済みバージョン
| パッケージ | 脆弱 | 修正済み |
|---|---|---|
| `nx` | `>= 14.6.0, < 22.7.9`; `>= 23.0.0, < 23.1.2` | `22.7.9`, `23.1.2` |
上記の範囲内のすべてのバージョンが影響を受けます。下限は14.6.0で、これはソケットアクセスをコード実行に変換するデーモンのリクエストハンドラが追加されたバージョンです。
> [重要]
> シングルユーザー環境では、この問題は発生しません。この脆弱性は、同じホスト上に別のローカルアカウントが存在する場合にのみ発生します。したがって、通常の使用では影響を受けません。影響を受けるのは、共有CIランナー、共有ビルドおよび開発サーバー、および複数のUIDを実行するコンテナまたはイメージです。
>
> デーモンを無効にすることだけでは十分ではありません。プラグインの分離に使用されるプラグインワーカーのソケットは、同じディレクトリに同じ権限で作成され、デーモンが有効になっているかどうかに関わらず、通常のコマンド実行中に使用されます。
## 対策
**22.7.9**(22.xライン)または**23.1.2**(23.xライン)以降にアップグレードしてください。
```
nx migrate 23.1.2
```
共有環境では、アップグレード後に`nx reset`を実行して、古いバージョンの作成したソケットとディレクトリを再利用するのではなく削除してください。
もしアップグレードできない場合は、`NX_SOCKET_DIR` を、ご自身が所有する、パーミッションが `0700` に設定されたディレクトリに設定してください。脆弱なバージョンでもこの設定は有効です。また、`NX_DAEMON=false` でデーモンを無効にすることで、攻撃対象領域を減らすことができます。ただし、上記のように、この設定でもプラグインワーカーのソケットは残ります。
## 詳細
デーモンとプラグインワーカーは、共有のOSの一時ディレクトリ内のサブディレクトリに配置されたUnixドメインソケットを介して通信します。そのディレクトリはデフォルトのパーミッションで作成され、通常の設定では、システム上のすべてのユーザーがそのディレクトリを読み取ることができ、ディレクトリ内を移動できます。また、ソケットファイル自体に対する制限もありません。ディレクトリ名は、ワークスペースのパスとプロセスIDのハッシュから派生しており、一意ですが、機密情報ではありません。ローカルのユーザーが一時ディレクトリをリストした場合、そのディレクトリを見つけることができます。
この接続には認証は行われません。セキュリティはファイルシステムのパーミッションのみに依存しており、その範囲が広すぎます。ソケットにアクセスできるローカルプロセスは、完全に信頼されたクライアントとして扱われます。
このアクセスによって引き起こされる影響は、デーモンのリクエストハンドラが許可する内容によって決まります。あるハンドラは、リクエストからモジュールのパスを受け取り、それをロードして実行します。絶対パスは、検索の制約に関係なく解決されるため、マシン上の任意の場所にファイルを書き込めるユーザー(自身のホームディレクトリで十分です)が、ソケットに接続することで、デーモンとしてそのファイルを実行させることができます。他のハンドラは、ワークスペースのファイルの内容、プロジェクトのグラフ、タスクのハッシュを、同じ認証されていないユーザーに公開します。
## 貢献者
シドニー大学の研究者によって報告されました。
- Liyi
- Ziyue
- Strick
- Maurice
- Chenchen
影響を受けるパッケージ:
- npm (JavaScript) nx: affected >= 14.6.0, < 22.7.9、22.7.9で修正済み
- npm (JavaScript) nx: affected >= 23.0.0, < 23.1.2、23.1.2で修正済み