Modern Frontend CVEs

対象CVE: CVE-2026-102990

[緊急解説] Node.jsの`basic-ftp`ライブラリにおける正規表現DoS脆弱性 (GHSA-c475-qrg2-pj4r / CVE-2026-102990) と対策

Node.js向けのFTPクライアントライブラリ`basic-ftp`に、悪意のあるFTPサーバーからのデータによってアプリケーション全体が応答停止する正規表現DoS (ReDoS) 脆弱性が発見されました。この脆弱性はサービス停止につながる可能性があるため、速やかなアップデートが推奨されます。

はじめに:フロントエンドエンジニアとNode.jsの脆弱性

皆さん、こんにちは!日々の開発でNode.jsを使ったビルドツール、CLI、BFF (Backend For Frontend) などに触れる機会も多いフロントエンドエンジニアの皆さんにとって、Node.jsエコシステムの脆弱性情報は非常に重要です。今回は、Node.jsで利用されるFTPクライアントライブラリ`basic-ftp`に、アプリケーション全体を停止させる可能性のある深刻な脆弱性が発見されました。皆さんのプロジェクトへの影響と、その対策について詳しく解説します。

`basic-ftp`の正規表現DoS (ReDoS) 脆弱性とは?

今回報告された脆弱性 (GHSA-c475-qrg2-pj4r / CVE-2026-102990) は、Node.jsのFTPクライアントライブラリ`basic-ftp`のバージョン0.6.1以前に存在するものです。深刻度は「High」に分類されており、悪意のあるFTPサーバーが細工された応答を返すことで、`basic-ftp`を利用しているNode.jsアプリケーションが応答不能(フリーズ)に陥る可能性があります。これは「正規表現DoS (ReDoS)」と呼ばれる種類の攻撃です。

脆弱性の具体的な仕組みと影響

この脆弱性は、`basic-ftp`ライブラリの`Client.list()`メソッドがFTPサーバーからディレクトリ一覧(リスト)を取得し、これを解析する部分に潜んでいます。特に、Unixスタイルのリストを解析する際に使用される正規表現が問題です。ファイル所有者名とグループ名をマッチングするための正規表現が非効率なパターンを含んでいました。

悪意のある、または不正な形式のデータがFTPサーバーから送られてくると、この正規表現エンジンは「バックトラッキング」と呼ばれる処理を過剰に実行してしまいます。バックトラッキングとは、正規表現がマッチする可能性のある全ての組み合わせを試す動作のことです。この処理の計算コストは、入力データの長さに応じて劇的に増加します(専門的にはO(n²)のオーダー)。

結果として、ごくわずかな不正なデータ(例えば約1MBの細工されたデータ)でも、Node.jsのプロセス全体のCPUを数分から数十分間も占有し、Node.jsのイベントループを完全にフリーズさせてしまいます。これにより、あなたのアプリケーションは新しいリクエストを受け付けられなくなり、既存の処理も停止し、完全にサービス拒否 (DoS) 状態に陥ります。過去にメモリ使用量の制限が導入されましたが、この脆弱性はCPU使用量に関するものであり、その制限では防げません。

影響を受ける条件とフロントエンド開発への関連

あなたのNode.jsアプリケーションが`basic-ftp`を使用しており、特に`Client.list()`メソッドを呼び出して、悪意のある、または不適切に設定されたFTPサーバーに接続する可能性がある場合に影響を受けます。

フロントエンドエンジニアが直接FTPクライアントを実装するケースは少ないかもしれませんが、以下のようなシナリオで間接的に影響を受ける可能性があります。

1. **Node.js製ビルドツールやCLIツール**: プロジェクトで利用しているカスタムのビルドツールや開発用のCLIツールが、内部でFTPを介したファイル操作(例えばデプロイやテストデータの取得)に`basic-ftp`を使用している場合。

2. **BFF (Backend For Frontend)**: Node.jsで構築されたBFFが、バックエンドシステムとの連携やファイルストレージとのやり取りでFTPを利用している場合。

3. **CI/CDパイプライン**: デプロイプロセスの一部として、CI/CDスクリプト内でFTPを利用して成果物をサーバーにアップロード・確認している場合。この脆弱性によりパイプラインが停止する可能性があります。

これらのケースでは、たとえ直接`basic-ftp`を記述していなくても、依存関係の依存関係(推移的依存関係)として含まれている可能性があります。そのため、プロジェクトの依存関係ツリーを一度確認することが重要です。

推奨される対応策

この深刻な脆弱性からあなたのアプリケーションを保護するためには、速やかな対応が必要です。

この脆弱性は、`basic-ftp`の最新バージョンで修正される見込みが高いです。`package.json`で`basic-ftp`を使用している場合は、できるだけ早く最新バージョンにアップデートしてください。アップデートは以下のコマンドで行えます。

`npm update basic-ftp` または `yarn upgrade basic-ftp`

プロジェクトの依存関係に直接`basic-ftp`が見当たらなくても、`npm ls basic-ftp` や `yarn why basic-ftp` を実行して、他のパッケージが間接的に依存していないか確認することをお勧めします。

信頼できない、または未知のFTPサーバーに接続する際には、特に注意が必要です。可能であれば、サンドボックス環境や隔離された環境でテストを行うことを強く推奨します。

もしすぐにアップデートが難しい場合、一時的な回避策として`Client.list()`の使用を停止するか、リストされるファイル数やサイズに厳密な上限を設けることを検討してください。ただし、これは根本的な解決にはなりませんので、あくまで緊急時の一時的な対応と位置付けてください。

まとめ

Node.jsアプリケーションの応答性を維持し、安定したサービス提供を行う上で、今回の`basic-ftp`の脆弱性への対応は非常に重要です。特に正規表現DoSは、最小限の攻撃でサービス全体を停止させる可能性があるため、速やかなアップデートと対策が求められます。

定期的な依存関係のセキュリティスキャンや、利用しているライブラリのアップデートを怠らないことが、安全なアプリケーション開発の鍵となります。常に最新のセキュリティ情報にアンテナを張り、迅速な対応を心がけましょう。

← ブログ一覧に戻る