shadow1ng/fscan · warning

%s

Error message

%s

What it means

The Cassandra plugin's Scan found no credentials to test: GenerateCredentials returned an empty list for the 'cassandra' service. The plugin aborts with a failed ScanResult carrying a localized 'no credentials' error instead of running the auth test loop.

Source

Thrown at plugins/services/cassandra.go:49

	config := session.Config
	state := session.State
	target := info.Target()

	if config.DisableBrute {
		return p.identifyService(ctx, info, session)
	}

	// 先尝试无认证连接
	if result := p.tryNoAuthConnection(ctx, info, session); result != nil && result.Success {
		return result
	}

	credentials := GenerateCredentials("cassandra", config)
	if len(credentials) == 0 {
		return &ScanResult{
			Success: false,
			Service: "cassandra",
			Error:   fmt.Errorf("%s", i18n.GetText("service_no_credentials")),
		}
	}

	authFn := p.createAuthFunc(info, config, state)
	testConfig := DefaultConcurrentTestConfigWithTarget(config, info)

	result := TestCredentialsConcurrently(ctx, credentials, authFn, "cassandra", testConfig)

	if result.Success {
		session.LogVuln(i18n.Tr("cassandra_credential", target, result.Username, result.Password))
	}

	return result
}

func (p *CassandraPlugin) createAuthFunc(info *common.HostInfo, config *common.Config, state *common.State) AuthFunc {
	return func(ctx context.Context, cred Credential) *AuthResult {
		return p.doCassandraAuth(ctx, info, cred, config, state)

View on GitHub (pinned to 95cc12e753)

Solutions

  1. Supply credentials in the scan config (username/password lists or a credential source) for the cassandra service.
  2. Check the credential loading configuration: wordlist paths exist and are readable, and no filter excludes all entries.
  3. Log or inspect GenerateCredentials output for 'cassandra' to confirm what the generator produces with your config.

Example fix

// before
cfg := config // no credentials configured
// after
cfg.CredentialSources = []string{"wordlists/cassandra-default.txt"}
cfg.Usernames = []string{"cassandra"}
cfg.Passwords = []string{"cassandra"}
Defensive patterns

Strategy: validation

Validate before calling

creds := GenerateCredentials("cassandra", config)
if len(creds) == 0 {
    log.Fatal("no cassandra credentials configured; supply usernames/passwords in the scan config")
}

Try / catch

res, err := plugin.Scan(target)
if err != nil && strings.Contains(err.Error(), "no_credentials") {
    log.Printf("skipping cassandra scan: %v", err)
    return
}

Prevention

When it happens

Trigger: Scan() calls GenerateCredentials("cassandra", config); if it yields zero entries (e.g. empty or mis-scoped credential config), Scan returns Success:false with i18n 'service_no_credentials'.

Common situations: Credential wordlists not loaded or path misconfigured; config filters exclude all cassandra credentials; running in an environment where credential sources are empty; typo in service name so the generator matches nothing.

Related errors


AI-assisted analysis of shadow1ng/fscan@95cc12e753 (2026-09-06). Data as JSON: /api/errors/423b8a8787d65cf7. Report an issue: GitHub.