projectdiscovery/nuclei · error

azure connection details are missing. Please provide %s

Error message

azure connection details are missing. Please provide %s

What it means

Startup options validation (internal/runner/options.go:201) is the Azure mirror of the S3 check: when AzureContainerName is set with UpdateTemplates and -azure-template-disable-download is absent, validateMissingAzureOptions collects missing items among AZURE_TENANT_ID, AZURE_CLIENT_ID, AZURE_CLIENT_SECRET, AZURE_SERVICE_URL and AZURE_CONTAINER_NAME, and the error enumerates exactly which are missing.

Source

Thrown at internal/runner/options.go:201

	if options.HasClientCertificates() {
		if generic.EqualsAny("", options.ClientCertFile, options.ClientKeyFile, options.ClientCAFile) {
			return errors.New("if a client certification option is provided, then all three must be provided")
		}
		validateCertificatePaths(options.Logger, options.ClientCertFile, options.ClientKeyFile, options.ClientCAFile)
	}
	// Verify AWS secrets are passed if a S3 template bucket is passed
	if options.AwsBucketName != "" && options.UpdateTemplates && !options.AwsTemplateDisableDownload {
		missing := validateMissingS3Options(options)
		if missing != nil {
			return fmt.Errorf("aws s3 bucket details are missing. Please provide %s", strings.Join(missing, ","))
		}
	}

	// Verify Azure connection configuration is passed if the Azure template bucket is passed
	if options.AzureContainerName != "" && options.UpdateTemplates && !options.AzureTemplateDisableDownload {
		missing := validateMissingAzureOptions(options)
		if missing != nil {
			return fmt.Errorf("azure connection details are missing. Please provide %s", strings.Join(missing, ","))
		}
	}

	// Verify that all GitLab options are provided if the GitLab server or token is provided
	if len(options.GitLabTemplateRepositoryIDs) != 0 && options.UpdateTemplates && !options.GitLabTemplateDisableDownload {
		missing := validateMissingGitLabOptions(options)
		if missing != nil {
			return fmt.Errorf("gitlab server details are missing. Please provide %s", strings.Join(missing, ","))
		}
	}

	// verify that a valid ip version type was selected (4, 6)
	if len(options.IPVersion) == 0 {
		// add ipv4 as default
		options.IPVersion = append(options.IPVersion, "4")
	}
	var useIPV4, useIPV6 bool
	for _, ipv := range options.IPVersion {

View on GitHub (pinned to 265b3a3dec)

Solutions

  1. Supply all Azure settings: tenant id, client id, client secret, and service URL (as named in the error)
  2. Or disable Azure template downloads with -azure-template-disable-download
  3. Verify the service principal has read access to the container to avoid the next failure after this one
  4. Keep the full Azure variable set together in CI secrets so it cannot drift partially

Example fix

# before
nuclei -update-templates -azure-container-name templates

# after
nuclei -update-templates -azure-container-name templates \
  -azure-tenant-id ... -azure-client-id ... \
  -azure-client-secret ... -azure-service-url core.windows.net
Defensive patterns

Strategy: validation

Validate before calling

func missingAzure(o *types.Options) []string {
    var m []string
    if o.AzureTenantID == "" { m = append(m, "AZURE_TENANT_ID") }
    if o.AzureClientID == "" { m = append(m, "AZURE_CLIENT_ID") }
    if o.AzureClientSecret == "" { m = append(m, "AZURE_CLIENT_SECRET") }
    if o.AzureServiceURL == "" { m = append(m, "AZURE_SERVICE_URL") }
    if o.AzureContainerName == "" { m = append(m, "AZURE_CONTAINER_NAME") }
    return m
}

if options.UpdateTemplates && options.AzureContainerName != "" && !options.AzureTemplateDisableDownload {
    if m := missingAzure(options); len(m) > 0 {
        return fmt.Errorf("incomplete Azure config: %v", m)
    }
}

Prevention

When it happens

Trigger: Running `nuclei -update-templates -azure-container-name c` without the tenant id, client id, client secret, or service URL (flags or env equivalents).

Common situations: Private template distribution via Azure Blob storage; CI with only part of the env vars exported; rotated service principal leaving one value empty.

Related errors


AI-assisted analysis of projectdiscovery/nuclei@265b3a3dec (2026-08-15). Data as JSON: /api/errors/08359f5fd3d1aec7. Report an issue: GitHub.