Nucleiは、YAMLベースの独自DSLでテンプレートを書いてHTTP、DNS、ネットワーク、ヘッドレスブラウザなど複数プロトコルに対して脆弱性検査を実行するスキャナーです。ProjectDiscoveryが開発し、コミュニティが提供する大量のテンプレートを使って既知のCVEや設定不備を検出します。CLIバイナリのほか、Go向けSDK(examples/以下)やHTTP API(internal/httpapi、internal/server)としても組み込めます。
コアはcmd/nuclei/main.goから起動し、internal/runner/runner.goがオプション解析・ターゲット読み込み・テンプレート読み込みを統括します。テンプレートはpkg/templatesのスキーマ(cmd/docgen/docgen.goがJSON Schemaを自動生成)に基づき、リクエスト定義・マッチャー・抽出子を持つYAMLとして扱われ、DSL(github.com/projectdiscovery/dsl)で条件式や変数展開を評価します。実行時にはHTTP・DNS・ネットワーク・ヘッドレス(go-rod)・JavaScript(goja)など複数プロトコルのエグゼキューターがテンプレートを解釈し、対象ホストへリクエストを送信して応答をマッチャーで判定します。cmd/generate-checksum/main.goはテンプレートディレクトリのSHA1一覧を作り、更新検知や整合性チェックに使われます。internal/serverとinternal/httpapiはスキャン結果をワーカーキュー経由でHTTP経由に公開する仕組みを提供し、internal/pdcpはProjectDiscovery Cloud Platformとの連携用ライターです。テストは internal/tests/integration と internal/tests/functional に大量に用意され、実バイナリを起動して各プロトコル・DSL・フロー(条件分岐スキャン)を検証しています。
- STEP 01
`go install`または`make build`でnucleiバイナリを作成すると、cmd/nuclei/main.goがエントリポイントとしてビルドされます。
- STEP 02
初回実行時にinternal/runner/templates.goのロジックによってnuclei-templatesリポジトリが自動ダウンロードされ、~/.config配下などにテンプレート群が展開されるのを確認できます。
- STEP 03
`nuclei -u https://example.com -t <template>`のようにターゲットとテンプレートを指定すると、internal/runner/runner.goが読み込みからスキャン実行までを一括で行い、ターミナルに検出結果が色付きで表示されます。
- STEP 04
`-jsonl`や`-o`などのフラグを付けるとinternal/pdcpやexporter系のコードが結果をファイルやクラウドへ書き出す挙動を確認できます。
- STEP 05
internal/tests/integrationのテストを`go test`で回すと、DSL式やフロー(条件分岐)テンプレートが実際にどう解釈されるかをtestdata配下のYAMLファイルで確認できます。
- STEP 06
Dockerイメージをビルドすると、Dockerfileの通りchromiumが同梱されるためヘッドレスプロトコルのテンプレートも動作させられます。
手元では、指定したターゲットに対して選んだテンプレート群がマッチした場合にその脆弱性名・重要度・マッチ箇所を含む結果行が得られます。JSON出力を選べば構造化データとして扱えるほか、helm/以下のChartを使えばKubernetes上でinteractsh連携込みの定期スキャン(cronジョブ)としても運用できます。SDKとして使う場合はexamples/simple、examples/advancedのコードがGoプログラムへの組み込み例を示しています。
go.modが`go 1.26.0`という将来的なバージョンを要求しており、実際のビルド環境で対応するGoツールチェインが必要になる可能性があります。
依存パッケージが非常に多く(AWS SDK、ヘッドレスブラウザ、Kerberos関連ライブラリなど)、ビルド時間やバイナリサイズが大きくなることが予想されます。
functional_test.goにあるように、機能テストの一部はCI環境変数やリリース済みバイナリの存在を前提としており、ローカルでそのまま全テストが動くわけではありません。
スキャン対象への実際のリクエスト送信を伴うツールのため、許可されていない対象に対して実行すると法的・倫理的リスクが伴います。
CVEスキャンや資産の脆弱性診断をYAMLテンプレートで柔軟に自動化したいセキュリティエンジニアやペンテスターに向いています。README、Dockerfile、go.mod、内部のrunner・server・testsのコード構成から、CLIツールとSDKとサーバー機能を兼ね備えた実装であることが読み取れます。ただし依存関係の規模やGoバージョン要件、CI前提のテスト構成から、実際の導入には相応のビルド・運用コストがかかる点は留意すべきです。