CWE-566: Authorization Bypass Through User-Controlled SQL Primary Key

Learn about CWE-566 (Authorization Bypass Through User-Controlled SQL Primary Key), its security impact, exploitation methods, and prevention guidelines.

What is Authorization Bypass Through User-Controlled SQL Primary Key?

• Overview: Authorization Bypass Through User-Controlled SQL Primary Key (CWE-566) occurs when a database query uses a primary key that can be manipulated by a user, allowing them to access records they should not be able to view or modify.

• Exploitation Methods:

  • Attackers can exploit this vulnerability by manipulating the primary key parameter in a SQL query to access unauthorized records.
  • Common attack patterns include SQL injection and parameter tampering to alter the primary key value.

• Security Impact:

  • Direct consequences include unauthorized access to sensitive data or modification of records.
  • Potential cascading effects involve data breaches, data corruption, and compromised system integrity.
  • Business impact can include financial loss, legal consequences, and damage to reputation.

• Prevention Guidelines:

  • Specific code-level fixes involve validating and sanitizing input to ensure only authorized keys are accepted.
  • Security best practices include implementing access controls and using parameterized queries to prevent injection attacks.
  • Recommended tools and frameworks involve using ORM (Object-Relational Mapping) libraries that enforce safe query practices and applying regular security audits and testing.
Corgea can automatically detect and fix Authorization Bypass Through User-Controlled SQL Primary Key in your codebase. [Try Corgea free today](https://corgea.app).

Technical Details

Likelihood of Exploit: Not specified

Affected Languages: SQL

Affected Technologies: Database Server

Vulnerable Code Example

-- Vulnerable code: Authorization Bypass Through User-Controlled SQL Primary Key
-- The user_id is directly controlled by the user, leading to potential unauthorized access to other users' data.
-- User input is directly used in the SQL query without validation or sanitization.
SELECT * FROM user_data WHERE user_id = {user_input};  -- {user_input} is unsanitized and directly used

In the above code, the user_id is directly derived from user input and used in the SQL query without any validation or sanitization. This could allow an unauthorized user to access data they are not permitted to see by manipulating the user_input to a different user_id.

How to fix Authorization Bypass Through User-Controlled SQL Primary Key?

To fix this vulnerability, ensure that the user_id used in the query matches the authenticated user's ID. Instead of trusting user input for sensitive operations, use server-side logic to determine the primary key based on the authenticated user's session or identity. This effectively prevents users from manipulating the user_id to access unauthorized data.

Additionally, always sanitize and validate any user inputs to prevent SQL injection attacks.

Fixed Code Example

-- Fixed code: Use server-side logic to determine the user ID
-- Retrieve the authenticated user's ID from the session or a secure context, not from user input.
-- This ensures that users can only access their own data.

-- Assume we have a session variable that securely holds the authenticated user's ID
SET @authenticated_user_id = (SELECT user_id FROM sessions WHERE session_token = {secure_session_token});

-- Now, use this safe, server-side determined user_id for the query
SELECT * FROM user_data WHERE user_id = @authenticated_user_id;

In the fixed code:

  • We use a session variable @authenticated_user_id that securely holds the authenticated user's ID, retrieved from a trusted source like a session management system.
  • This ensures that the user_id used in the query is not influenced by user input, effectively preventing unauthorized access to other users' data.
  • This approach guarantees that each user can only access their data, adhering to the principle of least privilege.

By implementing these changes, the application enforces proper authorization checks and mitigates the risk of unauthorized data access.

Corgea Logo

Find this vulnerability and fix it with Corgea

Scan your codebase for CWE-566: Authorization Bypass Through User-Controlled SQL Primary Key and get remediation guidance

Start for free and no credit card needed.