Skip to content

W-22550508: prevent SOQL injection in assign_permission_set#461

Open
jag-j wants to merge 2 commits into
mainfrom
jj/W-22550508
Open

W-22550508: prevent SOQL injection in assign_permission_set#461
jag-j wants to merge 2 commits into
mainfrom
jj/W-22550508

Conversation

@jag-j

@jag-j jag-j commented Jun 1, 2026

Copy link
Copy Markdown

@W-22550508@

This commit addresses a high-severity SOQL injection vulnerability in the assign_permission_set tool where usernames were interpolated directly into SOQL queries without validation or escaping.

Vulnerability:
The onBehalfOf parameter allowed injection via malformed usernames like:
"x@example.com' OR IsActive = true OR Username='x"
This could change the query predicate and assign permissions to unintended users.

Changes:

  • Created soqlUtils.ts with validation functions for usernames
  • Added validateAndEscapeUsername() to validate email format and detect injection
  • Added containsSqlInjectionPatterns() to detect SQL keywords and patterns
  • Applied validation before SOQL query construction in assign_permission_set.ts
  • Added comprehensive unit tests including POC from security report

Security improvements:

  • Validates strict email format (something@domain.tld)
  • Blocks SQL keywords (OR, AND, UNION, SELECT, DROP, etc.)
  • Blocks SQL comments (--) and terminators (;)
  • Escapes single quotes in valid usernames
  • Returns clear error messages for invalid input

Testing:

  • 100+ test cases covering valid usernames, injection attempts, and edge cases
  • Explicitly tests the POC from W-22550508
  • Validates legitimate usernames pass through safely

What does this PR do?

What issues does this PR fix or reference?

Fixes W-22550508

This commit addresses a high-severity SOQL injection vulnerability in the
assign_permission_set tool where usernames were interpolated directly into
SOQL queries without validation or escaping.

Vulnerability:
The onBehalfOf parameter allowed injection via malformed usernames like:
  "x@example.com' OR IsActive = true OR Username='x"
This could change the query predicate and assign permissions to unintended users.

Changes:
- Created soqlUtils.ts with validation functions for usernames
- Added validateAndEscapeUsername() to validate email format and detect injection
- Added containsSqlInjectionPatterns() to detect SQL keywords and patterns
- Applied validation before SOQL query construction in assign_permission_set.ts
- Added comprehensive unit tests including POC from security report

Security improvements:
- Validates strict email format (something@domain.tld)
- Blocks SQL keywords (OR, AND, UNION, SELECT, DROP, etc.)
- Blocks SQL comments (--) and terminators (;)
- Escapes single quotes in valid usernames
- Returns clear error messages for invalid input

Testing:
- 100+ test cases covering valid usernames, injection attempts, and edge cases
- Explicitly tests the POC from W-22550508
- Validates legitimate usernames pass through safely

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
@jag-j jag-j requested a review from a team as a code owner June 1, 2026 20:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant