広く使用されている npm ライブラリ netmask には、先頭にゼロがある IP アドレスを解析する方法に起因するネットワーク脆弱性があり、推定 278,000 件のプロジェクトが危険にさらされています。
研究者の Victor Viale、Sick Codes、Kelly Kaoudis、John Jackson、Nick Sahler は、広く普及している netmask npm パッケージに存在する、CVE-2021-28918 として追跡されているデジタル脆弱性を公開しました。
これはIPアドレスの解析と比較に使用される便利なコードですが、問題はIPアドレスの形式が混在する場合の処理方法にあります。具体的には、先頭にゼロがある場合の処理です。
例えば、IPv4アドレス127.0.0.1は ですlocalhost
。しかし、ブラウザに0127.0.0.1を入力すると、0127は8進数として扱われ、10進数では87に変換されます。つまり、0127.0.0.1は実際には87.0.0.1になります。
ネットマスクを使用しない限り、先頭のゼロが単純に削除され、0127 が 127 になるため、ネットマスク経由ではプライベート IP のように見えるアドレスが送信される可能性がありますが、実際にはパブリック アドレスです (それに伴う可能性のあるすべての不正なアクティビティも同様です)。
「さらに悪いことに、逆のことも起こります!」と研究者たちは叫んだ。0177.0.0.1を入力すると、ブラウザはそれを127ループバック範囲のアドレスとして扱うが、ネットマスクは先頭のゼロを削除し、177.0.0.1、つまりプライベートアドレスではなくパブリックアドレスとして扱うのだ。
Trail of Bitsのセキュリティ専門家が、Pythonの安全でないピクルファイルを武器化するツールを公開し、皆の注目を集めようとしている。
続きを読む
「ほぼ10年間、ネットマスクは8進入力データを誤って文字列として読み取り、先頭の0を削除して残りのデータを正当なものとして使用していました」と研究者らは続けた。
これら数十万のプロジェクトの脆弱性については、ネットマスクの使用方法によって異なります。
研究者らは、このパッケージが 278,000 以上のプロジェクトで使用されており、毎週数百万回ダウンロードされていると推定している。ただし公平を期すために言えば、その多くは実際の人間がボタンをクリックするのではなく、自動化された DevOps パイプラインによるものである。
node-netmaskのメンテナーであるOlivier Poitrey氏は、チームから「非常に迅速な対応」を称賛されました。最初のパッチは、3月17日の通知日からわずか数日後に届きました。
影響を受けるユーザー(多数いると思われます)は、ライブラリのバージョン 2.0.0 にアップグレードする必要があります。
この事件は、人気のコンポーネントに安易に依存しても、脆弱性から逃れられるという保証にはならないことを思い起こさせるものだ。
ソナタイプのセキュリティ研究者アックス・シャルマ氏は、そのようなユーザーは「IPアドレスの解析にネットマスクのみに依存し、独自の適切な入力サニタイズや正規化チェックを追加しないと、サーバー側リクエストフォージェリ(SSRF)のバイパスやリモートファイルインクルード(RFI)に対して潜在的に脆弱である可能性があることに気付いていない可能性がある」と述べた。
これは、適切な入力衛生管理と、入力元に関わらず入力を決して信用しないことの必要性を浮き彫りにしています。例えば、今回のケースでは、ネットマスクに適用された修正により、IPアドレスが8進数または16進数形式でも提供される可能性があることが考慮されるようになりました。これは、ネットマスクのユーザー側でも追加の予防策として実装できるはずです。
諺にもあるように、「誰も信用してはいけない」。®