Nuclei の脆弱性 CVE-2024-43405 が FIX:署名バイパス/コード実行を許す可能性

Nuclei flaw allows signature bypass and code execution

2025/01/05 SecurityAffairs — ProjectDiscovery の OSS 脆弱性スキャナ Nuclei に存在する、深刻な脆弱性 CVE-2024-43405 (CVSS 7.4) が、Wiz のエンジニアリング・チームにより発見された。この脆弱性の悪用に成功した攻撃者は、署名チェックをバイパスし、悪意のコード実行の可能性を手にする。この脆弱性は、改行文字の処理における不一致と、複数署名の処理に起因するものであり、テンプレートへの悪意のコンテンツ注入を、攻撃者に許すことになり得る。

GitHub で公開された ProjectDiscovery のアドバイザリには、以下のように記載されている。

ProjectDiscovery — Nuclei のテンプレート署名検証システムに、脆弱性が発見された。この脆弱性により、攻撃者は署名のチェックを回避し、カスタムコード・テンプレートを介した悪意のコード実行の可能性を手にする。

この脆弱性は、署名検証プロセスと YAML パーサーが改行文字を処理する方法の不一致、複数の署名が処理される方法が、組み合わさるときに発生する。それにより、攻撃者は、テンプレートのコンテンツに対する有効な署名を維持しながら、悪意のコンテンツ注入を可能にする。 — ProjectDiscovery

この脆弱性は、Nuclei のバージョン 3.0.0 以降に影響を及ぼすが、すでに v3.3.2 で修正されている。

人気の脆弱性スキャナ Nuclei は、GitHub で 21,000以上のスターを獲得しており、ダウンロード数は 210万回を超えている。このソフトウェアはセキュリティ・コミュニティにとって不可欠なものであり、Wiz の研究者たちが強調するのは、脆弱性への対処の必要性である。

Nuclei の強みは、柔軟な YAML ベースのテンプレートにあり、それにより、脆弱性やミスコンフィグを検出できる点である。HTTP/TCP/DNS/TLS/Code などの、複数のプロトコルをサポートしており、その中でも code プロトコルは、ホスト OS 上での外部コードの実行を可能にする。その一方で、この機能により、深刻なリスクが生じる可能性があると、専門家たちは警告している。

code プロトコルを使用する Nuclei テンプレートにより、システムのセキュリティ評価が可能なるが、悪意のコードがローカルで実行され、サーバやインフラにリスクが生じる可能性がある。

Wiz のレポートでは、「Nuclei テンプレートは柔軟性が高いため、合法的な目的だけではなく、悪意の目的にも利用される可能性がある。たとえば、code プロトコルを悪用する攻撃者が、テンプレートを実行しているホストから、機密データを盗み出すことも考えられる」と説明されている。

このテンプレートの完全性を確保するために、Nuclei は署名検証を用いているが、単一のメカニズムに依存するため、深刻な障害が発生する可能性がある。それにより浮き彫りにされるのは、堅牢な検証の必要性である。

Wiz の研究者たちによると、この問題の原因は、 YAML パーサーと正規表現での署名検証の併用にあり、“\r” 文字の解析の不一致を悪用する攻撃者に対して、検証の回避を許す可能性が生じる。つまり、この解析の不一致を悪用する攻撃者は、“\r” を使用して2番目の “# digest:” 行を追加できる。そして、YAML パーサーにより実行される間に、署名検証をバイバスしていくという。

この脆弱性の悪用は、以下のシナリオにより達成される可能性がある:

  1. パーサーの不整合:Go の正規表現ベースの署名検証では、\\r を同一行の一部として扱うが、YAML パーサーでは改行として解釈する。この不一致により、攻撃者は検証を回避するコンテンツの注入を達成し、それを YAML パーサーに実行させられる。
  2. ファーストシグネチャ・トラスト:検証ロジックは、最初の # digest: 行のみを検証する。追加の# digest: 行は検証時には無視されるが、YAMLにより解析/実行されるコンテンツには残る。
  3. 一貫性のない署名の削除:ReplaceAll 関数は、ハッシュ化されたコンテンツから、すべての # digest: 行を削除し、最初の行だけの検証を達成できる。したがって、それ以降の、未検証の行に悪意のコンテンツが含まれていても、実行は可能となる。

これら脆弱性を連鎖させる攻撃者は、検証されていない実行が可能なコンテンツを Nuclei テンプレートに注入できる。

Wiz は、以下のようにレポートを締め括っている:

Wiz — この脆弱性に対する攻撃ベクターが発生するのは、信頼されていないテンプレートや、コミュニティが提供するテンプレートを、適切な検証や分離を行わずに実行した場合である。特に脆弱になるのは、自動スキャン・プラットフォームや共有セキュリティ・パイプラインなどの、Nuclei テンプレートを修正/アップロードするサービスである。

この機能の悪用に成功した攻撃者は、悪意のテンプレート注入の可能性を手にする。その結果として、任意のコマンド実行/データの外部流出/システムの侵害などにつながる可能性がある。 — Wiz