supabase-audit-rls
Test Row Level Security (RLS) policies for common bypass vulnerabilities and misconfigurations.
What this skill does
# RLS Policy Audit
> ๐ด **CRITICAL: PROGRESSIVE FILE UPDATES REQUIRED**
>
> You MUST write to context files **AS YOU GO**, not just at the end.
> - Write to `.sb-pentest-context.json` **IMMEDIATELY after each finding**
> - Log to `.sb-pentest-audit.log` **BEFORE and AFTER each test**
> - **DO NOT** wait until the skill completes to update files
> - If the skill crashes or is interrupted, all prior findings must already be saved
>
> **This is not optional. Failure to write progressively is a critical error.**
This skill tests Row Level Security (RLS) policies for common vulnerabilities and misconfigurations.
## When to Use This Skill
- After discovering data exposure in tables
- To verify RLS policies are correctly implemented
- To test for common RLS bypass techniques
- As part of a comprehensive security audit
## Prerequisites
- Tables listed
- Anon key available
- Preferably also test with an authenticated user token
## Understanding RLS
Row Level Security in Supabase/PostgreSQL:
```sql
-- Enable RLS on a table
ALTER TABLE posts ENABLE ROW LEVEL SECURITY;
-- Create a policy
CREATE POLICY "Users see own posts"
ON posts FOR SELECT
USING (auth.uid() = author_id);
```
**If RLS is enabled but no policies exist, ALL access is blocked.**
## Common RLS Issues
| Issue | Description | Severity |
|-------|-------------|----------|
| RLS Disabled | Table has no RLS protection | P0 |
| Missing Policy | RLS enabled but no SELECT policy | Variable |
| Overly Permissive | Policy allows too much access | P0-P1 |
| Missing Operation | SELECT policy but no INSERT/UPDATE/DELETE | P1 |
| USING vs WITH CHECK | Read allowed but write inconsistent | P1 |
## Test Vectors
The skill tests these common bypass scenarios:
### 1. Unauthenticated Access
```
GET /rest/v1/users?select=*
# No Authorization header or with anon key only
```
### 2. Cross-User Access
```
# As user A, try to access user B's data
GET /rest/v1/orders?user_id=eq.[user-b-id]
Authorization: Bearer [user-a-token]
```
### 3. Filter Bypass
```
# Try to bypass filters with OR conditions
GET /rest/v1/posts?or=(published.eq.true,published.eq.false)
```
### 4. Join Exploitation
```
# Try to access data through related tables
GET /rest/v1/comments?select=*,posts(*)
```
### 5. RPC Bypass
```
# Check if RPC functions bypass RLS
POST /rest/v1/rpc/get_all_users
```
## Usage
### Basic RLS Audit
```
Audit RLS policies on my Supabase project
```
### Specific Table
```
Test RLS on the users table
```
### With Authenticated User
```
Test RLS policies using this user token: eyJ...
```
## Output Format
```
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
RLS POLICY AUDIT
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Project: abc123def.supabase.co
Tables Audited: 8
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
RLS Status by Table
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
1. users
RLS Enabled: โ NO
Status: ๐ด P0 - NO RLS PROTECTION
All operations allowed without restriction!
Test Results:
โโโ Anon SELECT: โ Returns all 1,247 rows
โโโ Anon INSERT: โ Succeeds (tested with rollback)
โโโ Anon UPDATE: โ Would succeed
โโโ Anon DELETE: โ Would succeed
Immediate Fix:
```sql
ALTER TABLE users ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Users see own data"
ON users FOR ALL
USING (auth.uid() = id);
```
2. posts
RLS Enabled: โ
YES
Policies Found: 2
Status: โ
PROPERLY CONFIGURED
Policies:
โโโ "Public sees published" (SELECT)
โ โโโ USING: (published = true)
โโโ "Authors manage own" (ALL)
โโโ USING: (auth.uid() = author_id)
Test Results:
โโโ Anon SELECT: Only published posts (correct)
โโโ Anon INSERT: โ Blocked (correct)
โโโ Cross-user access: โ Blocked (correct)
โโโ Filter bypass: โ Blocked (correct)
3. orders
RLS Enabled: โ
YES
Policies Found: 1
Status: ๐ P1 - PARTIAL ISSUE
Policies:
โโโ "Users see own orders" (SELECT)
โโโ USING: (auth.uid() = user_id)
Issue Found:
โโโ No INSERT policy - users can't create orders via API
โโโ No UPDATE policy - users can't modify their orders
โโโ This may be intentional (orders via Edge Functions)
Recommendation: Document if intentional, or add policies:
```sql
CREATE POLICY "Users insert own orders"
ON orders FOR INSERT
WITH CHECK (auth.uid() = user_id);
```
4. comments
RLS Enabled: โ
YES
Policies Found: 2
Status: ๐ P1 - BYPASS POSSIBLE
Policies:
โโโ "Anyone can read" (SELECT)
โ โโโ USING: (true) โ Too permissive
โโโ "Users comment on posts" (INSERT)
โโโ WITH CHECK: (auth.uid() = user_id)
Issue Found:
โโโ SELECT policy allows reading all comments
including user_id, enabling user correlation
Recommendation:
```sql
-- Use a view to hide user_id
CREATE VIEW public.comments_public AS
SELECT id, post_id, content, created_at FROM comments;
```
5. settings
RLS Enabled: โ NO
Status: ๐ด P0 - NO RLS PROTECTION
Contains sensitive configuration!
Immediate action required.
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Summary
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
RLS Disabled: 2 tables (users, settings) โ CRITICAL
RLS Enabled: 6 tables
โโโ Properly Configured: 3
โโโ Partial Issues: 2
โโโ Major Issues: 1
Bypass Tests:
โโโ Unauthenticated access: 2 tables vulnerable
โโโ Cross-user access: 0 tables vulnerable
โโโ Filter bypass: 0 tables vulnerable
โโโ Join exploitation: 1 table allows data leakage
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
```
## Context Output
```json
{
"rls_audit": {
"timestamp": "2025-01-31T10:45:00Z",
"tables_audited": 8,
"summary": {
"rls_disabled": 2,
"rls_enabled": 6,
"properly_configured": 3,
"partial_issues": 2,
"major_issues": 1
},
"findings": [
{
"table": "users",
"rls_enabled": false,
"severity": "P0",
"issue": "No RLS protection",
"operations_exposed": ["SELECT", "INSERT", "UPDATE", "DELETE"]
},
{
"table": "comments",
"rls_enabled": true,
"severity": "P1",
"issue": "Overly permissive SELECT policy",
"detail": "user_id exposed enabling correlation"
}
]
}
}
```
## Common RLS Patterns
### Good: User owns their data
```sql
CREATE POLICY "Users own their data"
ON user_data FOR ALL
USING (auth.uid() = user_id)
WITH CHECK (auth.uid() = user_id);
```
### Good: Public read, authenticated write
```sql
-- Anyone can read
CREATE POLICY "Public read" ON posts
FOR SELECT USING (published = true);
-- Only authors can write
CREATE POLICY "Author write" ON posts
FOR INSERT WITH CHECK (auth.uid() = author_id);
CREATE POLICY "Author update" ON posts
FOR UPDATE USING (auth.uid() = author_id);
```
### Bad: Using (true)
```sql
-- โ Too permissive
CREATE POLICY "Anyone" ON secrets
FOR SELECT USING (true);
```
### Bad: Forgetting WITH CHECK
```sql
-- โ Users can INSERT any user_id
CREATE POLICY "Insert" ON posts
FOR INSERT WITH CHECK (true); -- Should check user_id!
```
## RLS Bypass Documentation
For each bypass found, the skill provides:
1. **Description** of the vulnerability
2. **Proof of concept** query
3. **Impact** assessment
4. **Fix** with SQL code
5. **Documentation** link
## MANDATORY: Progressive Context File Updates
โ ๏ธ **This skill MUST update tracking files PROGRESSIVELY during execution, NOT just at the end.**
### Critical Rule: Write As You Go
**DO NOT** batch all writes at the end. Instead:
1. **Before testing each table** โ Log the action to `.sb-pentest-audit.log`
2. **After each RLS finding** โ Immediately update `.sb-pentest-context.json`
3. **After each test completes** โ Log the result to `.sb-pentest-audit.log`
This ensuRelated in Security
mac-ops
IncludedComprehensive macOS workstation operations โ diagnose kernel panics, identify failing drives, audit launchd startup items, decode wake reasons, triage TCC permission denials, manage APFS snapshots, recover from no-boot. Use for: Mac is slow, slow bootup, won't boot, kernel panic, kernel_task hot, mds_stores CPU, photoanalysisd, cloudd, login loop, gray screen, sleep wake failure, drive failing, IO errors, APFS snapshots eating space, Time Machine local snapshots, Spotlight indexing, launchd, LaunchAgent, LaunchDaemon, login items, TCC permissions, Full Disk Access, Screen Recording denied, Gatekeeper, quarantine, com.apple.quarantine, app is damaged, helper tool, /Library/PrivilegedHelperTools, pmset, wake reasons, dark wake, sysdiagnose, panic.ips, DiagnosticReports, configuration profile, MDM profile, remote diagnostics over SSH.
a11y-audit
IncludedRun accessibility audits on web projects combining automated scanning (axe-core, Lighthouse) with WCAG 2.1 AA compliance mapping, manual check guidance, and structured reporting. Output is configurable: markdown report only, markdown plus machine-readable JSON, or markdown plus issue tracker integration. Use this skill whenever the user mentions "accessibility audit", "a11y audit", "WCAG audit", "accessibility check", "compliance scan", or asks to check a web project for accessibility issues. Also trigger when the user wants to verify WCAG conformance or map findings to a specific standard (CAN-ASC-6.2, EN 301 549, ADA/AODA).
erpclaw
IncludedAI-native ERP system with self-extending OS. Full accounting, invoicing, inventory, purchasing, tax, billing, HR, payroll, advanced accounting (ASC 606/842, intercompany, consolidation), and financial reporting. 413 actions across 14 domains, 43 expansion modules. Constitutional guardrails, adversarial audit, schema migration. Double-entry GL, immutable audit trail, US GAAP.
assess
IncludedAssesses and rates quality 0-10 across multiple dimensions (correctness, maintainability, security, performance, testability, simplicity) with pros/cons analysis. Compares against project conventions and prior decisions from memory. Produces structured evaluation reports with actionable improvement suggestions. Use when evaluating code, designs, architectures, or comparing alternative approaches.
spring-boot-security-jwt
IncludedProvides JWT authentication and authorization patterns for Spring Boot 3.5.x covering token generation with JJWT, Bearer/cookie authentication, database/OAuth2 integration, and RBAC/permission-based access control using Spring Security 6.x. Use when implementing authentication or authorization in Spring Boot applications.
code-hardcode-audit
IncludedDetect hardcoded values, magic numbers, and leaked secrets. TRIGGERS - hardcode audit, magic numbers, PLR2004, secret scanning.