Nuclei

オープンソースの脆弱性スキャナ「Nuclei」の脆弱性が修正されたことにより、攻撃者はシグネチャ検証を回避し、ローカルシステム上で実行されるテンプレートに悪意のあるコードを忍び込ませることができる可能性がある。

Nucleiは、ProjectDiscoveryによって作成された人気のあるオープンソースの脆弱性スキャナで、ウェブサイトの脆弱性やその他の弱点をスキャンします。

このプロジェクトは、既知の脆弱性、設定ミス、公開された設定ファイル、ウェブシェル、バックドアについてウェブサイトをスキャンする10,000以上のYAMLテンプレートからなるテンプレートベースのスキャンシステムを利用している。

YAMLテンプレートには、テンプレートの機能を拡張するコマンドやスクリプトをデバイス上でローカルに実行するために使用できるコードプロトコルも含まれています。

各テンプレートは、Nucleiがテンプレートが悪意のあるコードを含むように変更されていないことを確認するために使用するダイジェストハッシュで「署名」されています。

このダイジェスト・ハッシュは、以下のような形式でテンプレートの末尾に追加されます:

# ダイジェスト:<ハッシュ

Nucleiの署名検証をバイパスする脆弱性

CVE-2024-43405として追跡されている新しいNucleiの脆弱性が、Wizの研究者によって発見されました。この脆弱性は、テンプレートが悪意のあるコードを含むように変更されていても、Nucleiの署名検証をバイパスします。

この欠陥は、Goの正規表現ベースの署名検証と、署名を検証する際のYAMLパーサーの改行処理方法に起因します。

署名を検証する際、Goの検証ロジックは「feature」を同じ行の一部として扱います。しかし、YAMLパーサーはこれを改行として解釈します。この不一致により、攻撃者は検証を迂回する悪意のあるコンテンツを注入することができますが、YAMLパーサーで処理されたときに実行されます。

もう1つの問題は、Nucleiが複数の#digest:署名行を処理する方法です。Nucleiはテンプレート内で最初に出現した#digest:のみをチェックし、テンプレート内で後に見つかった追加の#digest:は無視します。

これは、最初の有効なダイジェストの後に、悪意のある「コード」セクションを含む悪意のある「# digest:」ペイロードを追加することによって悪用される可能性があります。

「改行解釈の不一致に関する洞察を武器に、私たちはGoの正規表現実装とYAMLパーサーの間の不一致を悪用するテンプレートを作成しました」とWizの研究者Guy Goldenbergは説明する。

とWizの研究者ガイ・ゴールデンバーグは説明する。”改行として”˶r “を使うことで、テンプレートに2行目の# digest:を含めることができます。

Example of how the different parsers parse a Nuclei template
異なるパーサーがどのようにNucleiテンプレートを解析するのかの例
Source:Wiz

Wizは2024年8月14日にProjectDiscoveryにこの欠陥を責任を持って開示し、9月4日にNuclei v3.3.2で修正された。

古いバージョンのNucleiを使用している場合は、このバグの技術的詳細が公開された今、最新バージョンにアップデートすることを強くお勧めします。

Goldenberg氏はまた、悪意のあるテンプレートから悪用される可能性を防ぐため、Nucleiを仮想マシンまたは隔離された環境で使用することを推奨している。