supabase-evidence
Initialize and manage the evidence collection directory for professional security audits with documented proof of findings.
What this skill does
# Evidence Collection Management
> š“ **CRITICAL: PROGRESSIVE FILE UPDATES REQUIRED**
>
> You MUST write evidence files **AS YOU GO**, not just at the end.
> - Save each piece of evidence **IMMEDIATELY after collection**
> - **DO NOT** wait until the skill completes to save evidence
> - If the audit crashes or is interrupted, all prior evidence must already be saved
>
> **This is not optional. Failure to save evidence progressively is a critical error.**
This skill initializes and manages the evidence collection system for professional security audits.
## When to Use This Skill
- Automatically invoked at the start of `supabase-pentest`
- When you need to organize evidence for a professional report
- When conducting audits that require documented proof
- For compliance and legal purposes
## Why Evidence Collection Matters
Professional security audits require:
| Requirement | Purpose |
|-------------|---------|
| **Reproducibility** | Others can verify findings |
| **Legal proof** | Documentation for legal/compliance |
| **Remediation verification** | Prove issues existed before fix |
| **Audit trail** | Complete record of what was tested |
## Evidence Directory Structure
The skill creates `.sb-pentest-evidence/` with this structure:
```
.sb-pentest-evidence/
āāā README.md # Evidence index and summary
āāā curl-commands.sh # All curl commands used (reproducible)
āāā timeline.md # Chronological evidence timeline
ā
āāā 01-detection/
ā āāā initial-scan.json # Raw detection results
ā āāā supabase-endpoints.txt # Discovered endpoints
ā āāā client-code-snippets/ # Relevant code excerpts
ā āāā supabase-init.js
ā
āāā 02-extraction/
ā āāā extracted-url.json # URL extraction proof
ā āāā extracted-anon-key.json # Anon key with decoded JWT
ā āāā extracted-jwts.json # All JWTs found
ā āāā service-key-exposure/ # If service key found (P0)
ā ā āāā location.txt
ā ā āāā decoded-payload.json
ā āāā db-string-exposure/ # If DB string found (P0)
ā āāā connection-details.json
ā
āāā 03-api-audit/
ā āāā openapi-schema.json # Raw OpenAPI/PostgREST schema
ā āāā tables/
ā ā āāā tables-list.json # All exposed tables
ā ā āāā tables-metadata.json # Column details per table
ā āāā data-samples/ # Sample data retrieved (redacted)
ā ā āāā users-sample.json
ā ā āāā orders-sample.json
ā ā āāā ...
ā āāā rls-tests/ # RLS policy test results
ā ā āāā users-anon.json # Anon access attempt
ā ā āāā users-auth.json # Authenticated access
ā ā āāā cross-user-test.json # Cross-user access attempt
ā āāā rpc-tests/ # RPC function test results
ā āāā function-list.json
ā āāā vulnerable-functions/
ā āāā get-all-users.json
ā
āāā 04-storage-audit/
ā āāā buckets-config.json # Bucket configurations
ā āāā buckets/
ā ā āāā avatars/
ā ā ā āāā file-list.json
ā ā āāā backups/ # If sensitive (P0)
ā ā ā āāā file-list.json
ā ā ā āāā sample-contents/ # Redacted samples
ā ā āāā ...
ā āāā public-url-tests/ # Direct URL access tests
ā āāā backup-access.json
ā
āāā 05-auth-audit/
ā āāā auth-settings.json # Auth configuration
ā āāā signup-tests/
ā ā āāā open-signup.json # Signup availability
ā ā āāā weak-password.json # Weak password test
ā ā āāā rate-limit.json # Rate limiting test
ā āāā enumeration-tests/
ā āāā login-timing.json # Timing attack data
ā āāā recovery-timing.json
ā āāā otp-enumeration.json
ā
āāā 06-realtime-audit/
ā āāā websocket-connection.json
ā āāā postgres-changes/ # Table subscription tests
ā ā āāā users-streaming.json
ā āāā broadcast-channels/ # Channel access tests
ā ā āāā admin-channel.json
ā āāā presence-data/
ā āāā exposed-users.json
ā
āāā 07-functions-audit/
ā āāā discovered-functions.json
ā āāā function-tests/
ā āāā hello-world.json
ā āāā get-user-data-idor.json
ā āāā admin-panel-escalation.json
ā
āāā screenshots/ # Optional: browser screenshots
āāā ...
```
## Usage
### Initialize Evidence Directory
```
Initialize evidence collection for audit
```
### Manual Evidence Save
```
Save evidence: [description] to [category]
```
## Evidence File Format
Each evidence file follows this structure:
```json
{
"evidence_id": "API-001",
"timestamp": "2025-01-31T10:30:00Z",
"category": "api-audit",
"type": "data-sample",
"finding_id": "P0-001",
"description": "Users table data accessible without authentication",
"request": {
"method": "GET",
"url": "https://abc123.supabase.co/rest/v1/users?select=*&limit=5",
"headers": {
"apikey": "[REDACTED - anon key]",
"Authorization": "Bearer [REDACTED - anon key]"
},
"curl_command": "curl -X GET 'https://abc123.supabase.co/rest/v1/users?select=*&limit=5' -H 'apikey: eyJ...' -H 'Authorization: Bearer eyJ...'"
},
"response": {
"status": 200,
"headers": {
"content-type": "application/json",
"x-total-count": "1247"
},
"body": [
{
"id": "550e8400-e29b-41d4-a716-446655440001",
"email": "[REDACTED]@example.com",
"name": "[REDACTED]",
"created_at": "2025-01-15T10:30:00Z"
}
],
"body_redacted": true,
"total_rows_indicated": 1247
},
"analysis": {
"severity": "P0",
"impact": "All user PII accessible without authentication",
"affected_data": ["email", "name", "id"],
"row_count": 1247
}
}
```
## Curl Commands File
All curl commands are collected in `curl-commands.sh`:
```bash
#!/bin/bash
# Supabase Security Audit - Reproducible Commands
# Target: https://myapp.example.com
# Project: abc123def.supabase.co
# Date: 2025-01-31
#
# IMPORTANT: Replace [ANON_KEY] with actual key before running
# WARNING: These commands may modify data - use with caution
SUPABASE_URL="https://abc123def.supabase.co"
ANON_KEY="eyJ..."
# === DETECTION ===
# Check if Supabase is used
curl -s "$SUPABASE_URL/rest/v1/" -H "apikey: $ANON_KEY" | head -100
# === TABLE LISTING ===
# Get OpenAPI schema (list all tables)
curl -s "$SUPABASE_URL/rest/v1/" -H "apikey: $ANON_KEY"
# === DATA ACCESS TESTS ===
# Test: Users table (P0 - should be blocked)
curl -s "$SUPABASE_URL/rest/v1/users?select=*&limit=5" \
-H "apikey: $ANON_KEY" \
-H "Authorization: Bearer $ANON_KEY"
# Test: Orders table (should be blocked by RLS)
curl -s "$SUPABASE_URL/rest/v1/orders?select=*&limit=5" \
-H "apikey: $ANON_KEY" \
-H "Authorization: Bearer $ANON_KEY"
# === RLS BYPASS TESTS ===
# ... additional commands ...
```
## Timeline File
The `timeline.md` provides chronological evidence:
```markdown
# Audit Timeline
## 2025-01-31 10:00:00 - Audit Started
- Target: https://myapp.example.com
- Authorization confirmed
## 2025-01-31 10:05:00 - Detection Phase
- Supabase detected with high confidence
- Project URL: https://abc123def.supabase.co
- Evidence: `01-detection/initial-scan.json`
## 2025-01-31 10:10:00 - P0 CRITICAL: Service Key Exposed
- Service role key found in client code
- Location: /static/js/admin.chunk.js:89
- Evidence: `02-extraction/service-key-exposure/`
## 2025-01-31 10:15:00 - API Audit Started
- 8 tables discovered
- Evidence: `03-api-audit/tables/tables-list.json`
## 2025-01-31 10:20:00 - P0 CRITICAL: Users Table Exposed
- All 1,247 user records accessible
- PII exposed: email, name
- Evidence: `03-api-audit/data-samples/users-sample.json`
...
```
## Context Output
Updates `.sb-pentest-context.json`:
```json
{
"evidence": {
"directory": ".sb-pentest-evidence",
"initialized_at": "2025-01-31T10:00:00Z",
"files_count": 45,
"categories": {
"detection": 3,
"extraction": 5,
"api-audit": 15,
"storage-audit": 8,
"auth-audit": 7,
"realtime-audit": 4,
"funRelated 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.