JFrogは11月29日(米国時間)、「Invisible npm malware - evading security checks with crafted versions|JFrog」において、 npm Command Line Interface(CLI)ツールのセキュリティチェック機能が回避される可能性があることを伝えた。JFrogの調査報告により、npm CLIツールの予期しない動作が悪用されることでマルウェアに侵入されてしまう危険性があることが明らかとなった。

  • Invisible npm malware - evading security checks with crafted versions|JFrog

    Invisible npm malware - evading security checks with crafted versions|JFrog

npm CLIのinstallコマンドおよびauditコマンドには、パッケージとその依存関係すべてに既知の脆弱性がないかチェックする機能が組み込まれており、欠陥を強調することで開発者に対する警告メカニズムとしての効果的な機能が提供されている。しかしながら、npmパッケージが特定のバージョン形式に従っている場合、セキュリティ勧告が表示されず、重大な欠陥またはマルウェアが直接またはnpmパッケージの依存関係を介してシステムに取り込まれてしまう可能性があることがわかった。

具体的には、「1.2.3-a」のようにインストールされたパッケージのバージョンにハイフンが含まれている場合、この問題は発生するという。ハイフンは、npmモジュールのプレリリースバージョンを示すために含まれているバージョン形式とされている。

npm install/auditツールは依存するすべてのパッケージとそのバージョンをjson辞書に集め、Bulk Advisory Endpointというnpm APIエンドポイントに送る。このエンドポイントは各パッケージとバージョンを調べてバージョンを勧告の影響範囲と一致させることで関連する勧告を見つけ、返されるリストにすべての関連するアドバイザリを追加するとされている。しかしながら、バージョンにハイフン (-) とそれに続く追加の文字が含まれるパッケージのセキュリティ勧告の取得に失敗することが判明している。

JFrogは脅威者がこの挙動を悪用し、無害に見えるパッケージの中に意図的に脆弱性や悪意のあるコードを仕込む可能性があると指摘。緩和策としてインストール対象のパッケージが極めて評価の高いソースから提供されていることが100%確実な場合を除き、プレリリースバージョンのnpmパッケージをインストールしないことが推奨されている。また、できるだけ早くプレリリース版ではないパッケージに戻すことも望まれている。