/

CVE-2026-71238

Severity:

CRITICAL RISK

(9.1)

Hardcoded Credentials (CWE-798) in DjangoCRM Settings

CVE-2026-71238

Deferred

Vulnerability type

Category:

Hardcoded Credentials

CWE:

CWE-798

Impact:

Account Takeover and Sensitive Information Disclosure

Severity:

CRITICAL RISK

(9.1)

CVSS version:

3.1

Catch this CVE while code is being written

Detect vulnerable code directly in pull requests, so CVEs are fixed before merge.

Summary

DjangoCRM contains a hardcoded Django SECRET_KEY in its committed settings, allowing anyone who can read the repository to forge security-sensitive tokens and potentially take over accounts. The default DEBUG=True setting may also expose database, email, OAuth, and internal path details through error pages, increasing the risk when errors are reachable in a deployed environment.

Affected context

The vulnerability occurs in DjangoCRM deployments that use the committed SECRET_KEY from webcrm/settings.py and expose the repository or its contents to an untrusted party. It becomes especially risky when the same key is used for session signing, CSRF token generation, and password reset tokens, or when DEBUG=True remains enabled in an environment that can return detailed error responses.

Exploit preconditions

  • Attack surface: The repository, deployed source tree, or another location containing the committed settings file
  • Required access: Ability to read the hardcoded SECRET_KEY; detailed error disclosure may additionally require access to a reachable failing application request
  • Trigger point: Validation of signed sessions, CSRF tokens, or password reset tokens, and generation of DEBUG error pages
  • Why exploitation is possible: A shared predictable trust secret permits external forgery of token values, while debug responses may disclose credentials and internal implementation details

Why this happens

The application treats a long-lived secret embedded in source code as a protected runtime key. Under CWE-798, hardcoded credentials can be recovered from source repositories, artifacts, or deployed files and then reused by an attacker. Because Django uses SECRET_KEY for signing security-sensitive values, compromise of that key can undermine token authenticity; enabling DEBUG by default further violates the separation between development diagnostics and production error handling.

Potential impact

  • An attacker could forge authenticated session cookies
  • An attacker could impersonate privileged or superadmin accounts
  • An attacker could forge CSRF tokens accepted by the application
  • An attacker could create or manipulate password reset tokens
  • Sensitive database, email, OAuth, and filesystem information may be disclosed
  • Compromised credentials could enable broader infrastructure or account abuse

General mitigation guidance

Mitigation generally focuses on removing secrets from source control and

separating development configuration from production settings.

Common defensive patterns include:

  • Loading SECRET_KEY and other credentials from a protected runtime secret store or environment-controlled configuration
  • Generating high-entropy, deployment-specific signing keys and rotating exposed keys
  • Invalidating sessions and reset tokens after key compromise or rotation
  • Keeping DEBUG disabled by default outside explicitly controlled development environments
  • Returning generic production error responses while sending diagnostics to access-controlled logging systems
  • Applying least privilege to database, email, OAuth, and application service credentials
  • Scanning repositories, build artifacts, and deployment bundles for secrets before publication

How teams detect issues like this

Organizations can identify similar issues through:

  • Static analysis and secret-scanning rules for assigned SECRET_KEY values and credential-like literals
  • Code review checks for secrets committed in settings modules, fixtures, templates, or deployment artifacts
  • Policy enforcement that rejects DEBUG=True in production configuration or release pipelines
  • Configuration audits verifying that signing keys come from approved secret-management sources
  • Runtime monitoring for unusual session creation, password-reset activity, or privileged account access
  • Automated review tools that flag hardcoded secrets and unsafe debug settings before deployment

Sources

SourceLink
github.comgithub.com/DjangoCRM/django-crm

Frequently asked

questions

It can be exploitable remotely when an attacker can read the public repository or obtain

the deployed settings file and the application accepts tokens signed with the exposed

key. DEBUG-related disclosure also depends on whether detailed error responses are

reachable.

Reading the committed source may be sufficient to recover the signing key. Using it

against the application generally requires network reachability and an applicable

authentication, CSRF, or password-reset workflow.

Remove secrets from source code, load a unique high-entropy key from protected runtime

configuration, rotate any exposed credentials, and disable DEBUG in production.

Combine secret scanning, configuration policy checks, environment-specific settings,

least-privilege credentials, controlled error handling, and regular rotation of

sensitive keys.

Find out what's already
exploitable in your codebase.