VYPR
High severityNVD Advisory· Published Dec 17, 2024· Updated Dec 17, 2024

Authorization bypass in Next.js

CVE-2024-51479

Description

Next.js is a React framework for building full-stack web applications. In affected versions if a Next.js application is performing authorization in middleware based on pathname, it was possible for this authorization to be bypassed for pages directly under the application's root directory. For example: * [Not affected] https://example.com/ * [Affected] https://example.com/foo * [Not affected] https://example.com/foo/bar. This issue is patched in Next.js 14.2.15 and later. If your Next.js application is hosted on Vercel, this vulnerability has been automatically mitigated, regardless of Next.js version. There are no official workarounds for this vulnerability.

Affected packages

Versions sourced from the GitHub Security Advisory.

PackageAffected versionsPatched versions
nextnpm
>= 9.5.5, < 14.2.1514.2.15

Affected products

1

Patches

1
1c8234eb20bc

backport: [i18n] Routing fix #70761 (#70976)

https://github.com/vercel/next.jsZack TannerOct 8, 2024via ghsa
3 files changed · +44 0
  • packages/next/src/server/base-server.ts+8 0 modified
    @@ -908,6 +908,14 @@ export default abstract class Server<ServerOptions extends Options = Options> {
           req.headers['x-forwarded-proto'] ??= isHttps ? 'https' : 'http'
           req.headers['x-forwarded-for'] ??= originalRequest.socket?.remoteAddress
     
    +      // Validate that if i18n isn't configured or the passed parameters are not
    +      // valid it should be removed from the query.
    +      if (!this.i18nProvider?.validateQuery(parsedUrl.query)) {
    +        delete parsedUrl.query.__nextLocale
    +        delete parsedUrl.query.__nextDefaultLocale
    +        delete parsedUrl.query.__nextInferredLocaleFromDefault
    +      }
    +
           // This should be done before any normalization of the pathname happens as
           // it captures the initial URL.
           this.attachRequestMeta(req, parsedUrl)
    
  • packages/next/src/server/future/helpers/i18n-provider.ts+31 0 modified
    @@ -134,6 +134,37 @@ export class I18NProvider {
         }
       }
     
    +  /**
    +   * Validates that the locale is valid.
    +   *
    +   * @param locale The locale to validate.
    +   * @returns `true` if the locale is valid, `false` otherwise.
    +   */
    +  private validate(locale: string): boolean {
    +    return this.lowerCaseLocales.includes(locale.toLowerCase())
    +  }
    +
    +  /**
    +   * Validates that the locales in the query object are valid.
    +   *
    +   * @param query The query object to validate.
    +   * @returns `true` if the locale is valid, `false` otherwise.
    +   */
    +  public validateQuery(query: NextParsedUrlQuery) {
    +    if (query.__nextLocale && !this.validate(query.__nextLocale)) {
    +      return false
    +    }
    +
    +    if (
    +      query.__nextDefaultLocale &&
    +      !this.validate(query.__nextDefaultLocale)
    +    ) {
    +      return false
    +    }
    +
    +    return true
    +  }
    +
       /**
        * Analyzes the pathname for a locale and returns the pathname without it.
        *
    
  • packages/next/src/server/lib/router-utils/resolve-routes.ts+5 0 modified
    @@ -214,6 +214,11 @@ export function getResolveRoutes(
               parsedUrl.pathname = maybeAddTrailingSlash(parsedUrl.pathname)
             }
           }
    +    } else {
    +      // As i18n isn't configured we remove the locale related query params.
    +      delete parsedUrl.query.__nextLocale
    +      delete parsedUrl.query.__nextDefaultLocale
    +      delete parsedUrl.query.__nextInferredLocaleFromDefault
         }
     
         const checkLocaleApi = (pathname: string) => {
    

Vulnerability mechanics

Generated by null/stub on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.

References

5

News mentions

0

No linked articles in our index yet.