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 パーサーにより実行される間に、署名検証をバイバスしていくという。
この脆弱性の悪用は、以下のシナリオにより達成される可能性がある:
- パーサーの不整合:Go の正規表現ベースの署名検証では、
\\rを同一行の一部として扱うが、YAML パーサーでは改行として解釈する。この不一致により、攻撃者は検証を回避するコンテンツの注入を達成し、それを YAML パーサーに実行させられる。 - ファーストシグネチャ・トラスト:検証ロジックは、最初の
# digest:行のみを検証する。追加の# digest:行は検証時には無視されるが、YAMLにより解析/実行されるコンテンツには残る。 - 一貫性のない署名の削除:
ReplaceAll関数は、ハッシュ化されたコンテンツから、すべての# digest:行を削除し、最初の行だけの検証を達成できる。したがって、それ以降の、未検証の行に悪意のコンテンツが含まれていても、実行は可能となる。
これら脆弱性を連鎖させる攻撃者は、検証されていない実行が可能なコンテンツを Nuclei テンプレートに注入できる。
Wiz は、以下のようにレポートを締め括っている:
Wiz — この脆弱性に対する攻撃ベクターが発生するのは、信頼されていないテンプレートや、コミュニティが提供するテンプレートを、適切な検証や分離を行わずに実行した場合である。特に脆弱になるのは、自動スキャン・プラットフォームや共有セキュリティ・パイプラインなどの、Nuclei テンプレートを修正/アップロードするサービスである。
この機能の悪用に成功した攻撃者は、悪意のテンプレート注入の可能性を手にする。その結果として、任意のコマンド実行/データの外部流出/システムの侵害などにつながる可能性がある。 — Wiz
この Nuclei という脆弱性スキャナですが、かなりの人気者という感じですね。脆弱性 CVE-2024-43405 への注意を促す記事ですが、訳していて、Nuclei 自体への興味が高まりました。GitHub には、以下のように紹介されています。
Nuclei は、シンプルな YAML ベース・テンプレートを活用する、最新の高性能な脆弱性スキャナーである。それにより、実際の状況を模倣するカスタムな脆弱性検出シナリオをデザインし、誤検知をゼロにできる。
- 脆弱性テンプレートを作成/カスタマイズするシンプルな YAML 形式。
- 注目の脆弱性に対処するために、何千人もの専門家が貢献。
- 脆弱性を検証する手順のシミュレーションにより誤検知を低減。
- 超高速の並列スキャン処理とリクエストのクラスタリング。
- 脆弱性検出と回帰テストのための CI/CD パイプライン統合。
- TCP/DNS/HTTP/SSL/WHOIS JavaScript/Code プロトコルへの対応。
- Jira/Splunk/GitHub/Elastic/GitLab との統合。

You must be logged in to post a comment.