Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
getsentry avatar

Sentry Security

  • 88 installs
  • 44.5k repo stars
  • Updated August 5, 2026
  • getsentry/sentry

sentry-security is an agent skill that Sentry-specific security review based on real vulnerability history. Use when reviewing Sentry endpoints, serializers, or views for security issues. Trigger key.

About

Sentry-specific security review based on real vulnerability history. Use when reviewing Sentry endpoints, serializers, or views for security issues. Trigger keywords: "sentry security review", "check for IDOR", "access control review", "org scoping", "cross-org", "security audit endpoint". --- name: sentry-security description: 'Sentry-specific security review based on real vulnerability history. Use when reviewing Sentry endpoints, serializers, or views for security issues. Trigger keywords: "sentry security review", "check for IDOR", "access control review", "org scoping", "cross-org", "security audit endpoint".' allowed-tools: Read Grep Glob Bash --- # Sentry Security Review Find security vulnerabilities in Sentry code by checking for the patterns that have caused real vulnerabilities in this codebase. It encodes patterns from 37 real security patches shipped in the last year - not generic OWASP theory. ## Scope Review the code provided by the user (file, diff, or endpoint). Research the codebase as needed to build confidence before reporting.

  • Sentry Security Review
  • Where does the ID enter? (query param, request body, URL kwarg)
  • Where is it used in an ORM query?
  • Between (1) and (2), is the query scoped by organization_id or project_id
  • `Model.objects.get(id=request.data["something_id"])` - no org scope

Sentry Security by the numbers

  • 88 all-time installs (skills.sh)
  • Ranked #1,163 of 1,879 Marketing & SEO skills by installs in the Skillselion catalog
  • Data as of Aug 5, 2026 (Skillselion catalog sync)
At a glance

sentry-security capabilities & compatibility

Capabilities
sentry security review · where does the id enter? (query param, request b · where is it used in an orm query? · between (1) and (2), is the query scoped by orga · `model.objects.get(id=request.data["something_id
Use cases
documentation
From the docs

What sentry-security says it does

--- name: sentry-security description: 'Sentry-specific security review based on real vulnerability history.
SKILL.md
Use when reviewing Sentry endpoints, serializers, or views for security issues.
SKILL.md
It encodes patterns from 37 real security patches shipped in the last year — not generic OWASP theory.
SKILL.md
## Scope Review the code provided by the user (file, diff, or endpoint).
SKILL.md
npx skills add https://github.com/getsentry/sentry --skill sentry-security

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs88
repo stars44.5k
Last updatedAugust 5, 2026
Repositorygetsentry/sentry

What problem does sentry-security solve for developers using this skill?

Sentry-specific security review based on real vulnerability history. Use when reviewing Sentry endpoints, serializers, or views for security issues. Trigger keywords: "sentry security review", "check

Who is it for?

Developers who need sentry-security patterns described in the cached skill documentation.

Skip if: Skip when docs are empty or the task is outside the skill's documented scope.

When should I use this skill?

Sentry-specific security review based on real vulnerability history. Use when reviewing Sentry endpoints, serializers, or views for security issues. Trigger keywords: "sentry security review", "check

What you get

Actionable workflows and conventions from SKILL.md for sentry-security.

Files

SKILL.mdMarkdownGitHub ↗

Sentry Security Review

Find security vulnerabilities in Sentry code by checking for the patterns that have caused real vulnerabilities in this codebase.

This skill is Sentry-specific. It encodes patterns from 37 real security patches shipped in the last year — not generic OWASP theory.

Scope

Review the code provided by the user (file, diff, or endpoint). Research the codebase as needed to build confidence before reporting.

Report only HIGH and MEDIUM confidence findings. Do not report theoretical issues.

ConfidenceCriteriaAction
HIGHTraced the flow, confirmed no check existsReport with fix
MEDIUMCheck may exist but could not confirmReport as needs verification
LOWTheoretical or mitigated elsewhereDo not report

Step 1: Classify the Code

Determine what you're reviewing and load the relevant reference.

Code TypeLoad Reference
API endpoint (inherits from *Endpoint)references/endpoint-patterns.md
Serializer or form fieldreferences/serializer-patterns.md
Email template or HTML renderingreferences/output-sanitization.md
Token, OAuth, or session handlingreferences/token-lifecycle.md
Role or permission logicreferences/privilege-escalation.md

If the code spans multiple categories, load all relevant references.

Always load references/enforcement-layers.md — it documents where security checks can legitimately live in Sentry's request lifecycle. A check in any layer counts as enforcement.

Step 2: Check for the Top 6 Vulnerability Classes

These are ordered by frequency from the last year of real patches.

Check 1: Cross-Org Object Access (IDOR) — 9 patches last year

The most common vulnerability. An endpoint accepts an ID from the request but does not scope the query by the organization from the URL.

Trace this flow for every ID that comes from the request:

1. Where does the ID enter? (query param, request body, URL kwarg)
2. Where is it used in an ORM query?
3. Between (1) and (2), is the query scoped by organization_id or project_id
   from the URL (NOT from the request body)?

Red flags:

  • Model.objects.get(id=request.data["something_id"]) — no org scope
  • Model.objects.filter(id=request.GET["id"]) — no org scope
  • project_id from request body/query used directly without Project.objects.filter(id=pid, organization_id=organization.id)
  • Endpoint inherits OrganizationEndpoint but handler method does not accept or use the organization parameter

Safe patterns:

  • Query includes organization_id=organization.id where organization comes from convert_args()
  • Uses self.get_projects() which scopes by org internally
  • Object is fetched via URL kwargs resolved by convert_args()
  • Unscoped query is a guard that only raises an error (never returns data), AND

a downstream query in the same flow IS org-scoped and raises the same error — no differential behavior means no information leak

Check 2: Missing Authorization Checks — 10 patches last year

An endpoint or serializer performs a sensitive operation without verifying the user has permission.

Check:

  • Does the endpoint inherit from the right base class? (OrganizationEndpoint, ProjectEndpoint, etc.)
  • Does it declare permission_classes? If not, it inherits the base class default — verify that's appropriate.
  • For serializer fields that reference other objects: do they validate the user can access those objects?
  • For Django views (not DRF): is there a @login_required or equivalent?

Check 3: Privilege Escalation / Role Abuse — 3 patches last year

A user can assign ownership, modify roles, or escalate access beyond what their role allows.

Check:

  • Owner/assignee fields: uses OwnerActorField (validates membership), NOT ActorField (allows any actor)
  • Role modification endpoints: verify the requesting user's role is >= the target role
  • Team assignment: verify the user is a member of the target team (or has team:admin)

Check 4: Token / Session Security — 5 patches last year

Token lifecycle gaps that allow unauthorized access.

Check:

  • Token refresh: is the application's active status checked before granting a refresh?
  • Org-level tokens: is organization_id required and validated?
  • Member status: is the member's enabled/disabled status checked before granting tokens?
  • Impersonation: are impersonated sessions rate-limited?

Check 5: Output Sanitization (XSS/HTML Injection) — 4 patches last year

User-controlled strings rendered unsafely in emails, markdown, or HTML.

Check:

  • User display names, team names, org names used in email templates: are they sanitized?
  • Markdown rendering: is custom CSS or HTML allowed through?
  • format_html() vs string concatenation in templates
  • mark_safe() called on user input

Check 6: Auth/MFA Gaps — 3 patches last year

Authentication state inconsistencies.

Check:

  • When removing an authenticator: are recovery codes cleaned up?
  • CSRF token handling: is it synced across tabs/windows?
  • Session invalidation: does removing auth factors properly invalidate sessions?

If no checks produced a potential finding, stop and report zero findings. Do not invent issues to fill the report. An empty result is the correct output when the code has no vulnerabilities matching these patterns.

Step 3: Trace the Full Enforcement Chain

For each potential finding, trace the complete request flow end-to-end. Do not stop at the authentication class — follow into the endpoint handler, then into any business logic classes it delegates to (e.g., Validator, Refresher, GrantExchanger).

1. Authentication class   → does authenticate() or authenticate_token() enforce the check?
2. Permission class       → does has_permission() enforce it?
3. convert_args()         → does has_object_permission() / determine_access() enforce it?
4. Access module          → does from_rpc_auth() or from_request() enforce it?
5. Handler method         → does the endpoint handler enforce it?
6. Business logic classes → do downstream classes (Validator, etc.) enforce it?
7. Serializer             → do validate_*() methods enforce it?

A check at ANY layer is enforcement. Before marking HIGH, confirm the check is absent from all layers using the checklist in enforcement-layers.md.

If you cannot confirm the check is absent from every layer, mark the finding as MEDIUM (needs verification), not HIGH.

Cross-flow enforcement for token issuance: For token/credential issuance flows, also check whether the issued credential is blocked at usage time (e.g., determine_access() rejects it at all endpoints in the relevant scope). Classify based on the enforcement scope:

  • Centralized enforcement (check runs in a permission class inherited by all endpoints in the affected scope) → the credential is effectively inert → LOW (do not report)
  • Scattered enforcement (only some endpoints or serializers check, others may not) → MEDIUM (report as needs verification)

See enforcement-layers.md "Cross-Flow Enforcement."

Non-DRF views: OAuth views are plain Django views — the 7-layer DRF model does not apply to the view itself. Check the view's own decorators and handler logic. But tokens issued by these views are later used at DRF endpoints where the full enforcement chain applies.

Step 4: Report Findings

````markdown

Sentry Security Review: [Component]

Findings

[SENTRY-001] [Title] (Severity: Critical/High/Medium)
  • Category: [IDOR | Missing Auth | Privilege Escalation | Token | XSS | Auth/MFA]
  • Location: path/to/file.py:123
  • Confidence: HIGH — confirmed through code tracing
  • Issue: [What the vulnerability is]
  • Trace:

1. [Step-by-step trace showing how the vulnerability is reached]

  • Impact: [What an attacker could do]
  • Fix:
  [Code that fixes the issue — must enforce, not document]

````

  • Precedent: [Similar past fix if applicable, e.g. "Similar to #104990 PromptsActivity IDOR"]

Needs Verification

[MEDIUM confidence items with explanation of what to verify]

Not Reviewed

[Areas outside the scope of this review]


Fix suggestions must include actual enforcement code. Never suggest a comment or docstring as a fix.

Related skills

FAQ

What does sentry-security do?

Sentry-specific security review based on real vulnerability history. Use when reviewing Sentry endpoints, serializers, or views for security issues. Trigger keywords: "sentry security review", "check for IDOR", "access c

When should I use sentry-security?

Sentry-specific security review based on real vulnerability history. Use when reviewing Sentry endpoints, serializers, or views for security issues. Trigger keywords: "sentry security review", "check for IDOR", "access c

Is sentry-security safe to install?

Review the Security Audits panel on this page before installing in production.

Marketing & SEOseocontent

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.