ノード ネットマスク NPM パッケージには、週あたり約 3 万ダウンロードがあり、GitHub 上の 270 万以上のプロジェクトの依存関係として使用されていますが、ネットマスクを使用するチェックをバイパスできる脆弱性 (CVE-2021-28918) があります。アドレス範囲への出現を判断するため、またはフィルタリングのために使用します。 この問題は、node-netmask 2.0.0 のリリースで修正されています。
この脆弱性により、アプリケーションでノード ネットマスク モジュールを使用して SSRF (サーバー側リクエスト フォージェリ)、RFI を実行する特定のロジックにより、外部 IP アドレスを内部ネットワークからのアドレスとして扱うことが可能になり、その逆も可能になります。 (リモート ファイル インクルージョン) 攻撃および LFI (ローカル ファイル インクルージョン) 攻撃) を使用して、内部ネットワーク上のリソースにアクセスし、実行チェーンに外部ファイルまたはローカル ファイルを含めます。 問題は、仕様によれば、ゼロで始まるアドレス文字列値は XNUMX 進数として解釈されるべきですが、ノード ネットマスク モジュールはこれを考慮せず、XNUMX 進数として扱うことです。
たとえば、攻撃者は、「0177.0.0.1」に対応する値「127.0.0.1」を指定してローカル リソースを要求する可能性がありますが、「node-netmask」モジュールはヌルを破棄し、0177.0.0.1″ を「」として扱います。 177.0.0.1」。アプリケーションでアクセス ルールを評価するときに、「127.0.0.1」と同一性を判断することはできません。 同様に、攻撃者はアドレス「0127.0.0.1」を指定できます。これは「87.0.0.1」と同一であるはずですが、「node-netmask」モジュールでは「127.0.0.1」として扱われます。 同様に、「012.0.0.1」(「10.0.0.1」に相当しますが、チェック中は12.0.0.1として処理されます)のような値を指定することで、イントラネットアドレスへのアクセスチェックを騙すことができます。
この問題を特定した研究者は、この問題を壊滅的だと呼び、いくつかの攻撃シナリオを提示していますが、そのほとんどは推測的なものに見えます。 たとえば、入力リクエストのパラメータやデータに基づいてリソースをリクエストする外部接続を確立する Node.js ベースのアプリケーションを攻撃する可能性について述べていますが、アプリケーションの名前や詳細は具体的には記載されていません。 入力された IP アドレスに基づいてリソースを読み込むアプリケーションが見つかったとしても、ローカル ネットワークに接続せずに、または「ミラー」IP アドレスの制御を取得せずに、実際にこの脆弱性がどのように悪用されるのかは完全には明らかではありません。
研究者らは、87.0.0.1 (Telecom Italia) と 0177.0.0.1 (Brasil Telecom) の所有者が 127.0.0.1 へのアクセス制限を回避できるとのみ想定しています。 より現実的なシナリオは、この脆弱性を悪用してアプリケーション側のさまざまなブロック リストをバイパスすることです。 この問題は、NPM モジュール「private-ip」でのイントラネット範囲の定義の共有にも適用できます。
出所: オープンネット.ru