HIGH broken authenticationspring bootbasic auth

Broken Authentication in Spring Boot with Basic Auth

Broken Authentication in Spring Boot with Basic Auth — how this specific combination creates or exposes the vulnerability

Basic authentication over unencrypted channels is a common source of broken authentication in Spring Boot APIs. Because credentials are base64-encoded rather than encrypted, an attacker who can intercept the network traffic can recover the username and password easily. If the endpoint is unintentionally exposed or lacks transport-layer protections, this enables credential theft and unauthorized access.

In Spring Boot, developers sometimes configure Basic Auth on HTTP connectors without enforcing HTTPS, or they apply it selectively to only a subset of endpoints. This partial coverage can allow an authenticated context on one endpoint to be leveraged to infer access across the API. Additionally, if the application embeds credentials in source code or configuration files that are checked into version control, leaked credentials become a persistent risk. Even when HTTPS is used, weak password policies, predictable usernames, or missing account lockout mechanisms can make brute-force or credential-stuffing attacks feasible.

During a black-box scan, tools can detect whether authentication enforcement is inconsistent by probing multiple endpoints and checking whether credentials are required where they should be. Spring Boot applications that rely solely on Basic Auth without multi-factor checks, session invalidation on logout, or proper token/session hygiene may remain vulnerable to replay or credential reuse attacks. These patterns are especially risky when combined with permissive CORS rules or when debugging endpoints remain accessible in production.

Basic Auth-Specific Remediation in Spring Boot — concrete code fixes

To address broken authentication with Basic Auth in Spring Boot, enforce HTTPS, avoid hard-coded credentials, and use Spring Security’s abstractions to manage authentication consistently across all endpoints.

Enforce HTTPS and secure transport

Always require HTTPS in production to protect credentials in transit. Configure your embedded server to redirect HTTP to HTTPS and set secure headers.

server:
  port: 8443
  ssl:
    key-store: classpath:keystore.p12
    key-store-password: changeit
    key-store-type: PKCS12
    key-alias: tomcat

Use Spring Security with in-memory or custom user details

Define a secure security configuration that requires authentication for all endpoints and uses strong password encoding.

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests(auth -> auth
                .requestMatchers("/public/**").permitAll()
                .anyRequest().authenticated()
            )
            .httpBasic(Customizer.withDefaults())
            .csrf(csrf -> csrf.disable())
            .headers(headers -> headers
                .contentSecurityPolicy(csp -> csp
                    .policyDirectives("default-src 'self'")
                )
            )
            .sessionManagement(session -> session
                .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
            );
        return http.build();
    }

    @Bean
    public UserDetailsService userDetailsService() {
        UserDetails user = User.builder()
            .username("apiuser")
            .password(passwordEncoder().encode("StrongP@ssw0rd!"))
            .roles("API")
            .build();
        return new InMemoryUserDetailsManager(user);
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

Rotate credentials and avoid defaults

Replace in-memory credentials with a secure store in production. For example, integrate with an identity provider or use environment variables injected at runtime.

spring:
  cloud:
    vault:
      host: vault.example.com
      port: 8200
      token: s.xxx

Ensure that default usernames like user or admin are not used for API access, and rotate credentials regularly as part of operational procedures.

Apply authentication consistently and validate input

Ensure that security rules apply to all controller mappings and that input validation prevents injection attempts targeting authentication flows.

@RestController
@RequestMapping("/api/v1")
public class ProfileController {

    @GetMapping("/profile")
    public ResponseEntity getProfile(Authentication authentication) {
        String name = authentication.getName();
        Profile profile = profileService.findByUsername(name);
        return ResponseEntity.ok(profile);
    }
}

Combine these practices with continuous monitoring through a platform like middleBrick to detect authentication misconfigurations. The CLI tool (middlebrick scan <url>) can validate that all endpoints consistently require authentication and that HTTPS is enforced. For automated oversight in pipelines, the GitHub Action can fail builds when risk scores drop below your chosen threshold, and the Pro plan provides continuous monitoring and compliance mappings to frameworks such as OWASP API Top 10.

Related CWEs: authentication

CWE IDNameSeverity
CWE-287Improper Authentication CRITICAL
CWE-306Missing Authentication for Critical Function CRITICAL
CWE-307Brute Force HIGH
CWE-308Single-Factor Authentication MEDIUM
CWE-309Use of Password System for Primary Authentication MEDIUM
CWE-347Improper Verification of Cryptographic Signature HIGH
CWE-384Session Fixation HIGH
CWE-521Weak Password Requirements MEDIUM
CWE-613Insufficient Session Expiration MEDIUM
CWE-640Weak Password Recovery HIGH

Frequently Asked Questions

Is Basic Auth acceptable if HTTPS is enforced?
Yes, when HTTPS is strictly enforced on all endpoints and credentials are rotated regularly, Basic Auth can be acceptable for simple use cases. However, prefer token-based mechanisms where possible, and always validate and encode credentials to reduce exposure.
How can I ensure my Spring Boot Basic Auth configuration applies to all endpoints?
Define a global SecurityFilterChain that requires authentication for any request not explicitly permitted, and verify coverage by scanning your API with tools like middleBrick to confirm no endpoints are unintentionally exposed.