The full report is available in the Shannon repository at
sample-reports/shannon-report-crapi.mdExecutive summary
- Target: OWASP crAPI (Completely Ridiculous API)
- Assessment scope: OWASP API Security Top 10
- Total vulnerabilities: Over 15 critical/high findings
- Overall impact: Full database compromise, authentication bypass, SSRF exploitation
Key accomplishments
Advanced JWT attacks
Algorithm confusion, alg:none, and weak key (kid) injection
Database compromise
SQL injection extracting user credentials from PostgreSQL
Critical SSRF
Internal auth token forwarding to external services
Zero false positives
Correctly validated robust XSS defenses
Critical findings
Authentication vulnerabilities (Critical)
JWT algorithm confusion attack
JWT algorithm confusion attack
Location: JWT validation in authentication middleware
Severity: Critical
Impact: Complete authentication bypassVulnerability: Server accepts symmetric algorithm (HS256) when expecting asymmetric (RS256)Exploit:Proof of impact:
Successfully bypassed authentication and accessed admin endpoints using forged JWT tokens.Technical details:
The JWT library doesn’t enforce algorithm type matching, allowing attackers to sign tokens with the public key using HMAC.
Severity: Critical
Impact: Complete authentication bypassVulnerability: Server accepts symmetric algorithm (HS256) when expecting asymmetric (RS256)Exploit:
Successfully bypassed authentication and accessed admin endpoints using forged JWT tokens.Technical details:
The JWT library doesn’t enforce algorithm type matching, allowing attackers to sign tokens with the public key using HMAC.
JWT alg:none bypass
JWT alg:none bypass
Location: JWT validation middleware
Severity: Critical
Impact: Universal authentication bypassExploit:Proof of impact:
Accessed all protected endpoints without any signature verification.
Severity: Critical
Impact: Universal authentication bypassExploit:
Accessed all protected endpoints without any signature verification.
JWT weak key injection (kid)
JWT weak key injection (kid)
Location: JWT key ID (kid) parameter
Severity: Critical
Impact: Arbitrary file read, authentication bypassExploit:By pointing
Forged admin tokens using empty secret and accessed all admin functionality.
Severity: Critical
Impact: Arbitrary file read, authentication bypassExploit:
kid to /dev/null (empty file), the HMAC secret becomes an empty string, enabling trivial token forgery.Proof of impact:Forged admin tokens using empty secret and accessed all admin functionality.
SQL injection (Critical)
PostgreSQL injection in search
PostgreSQL injection in search
Location:
Severity: Critical
Impact: Complete database compromiseExploit:Proof of impact:
Successfully extracted:
GET /api/shop/orders?search={query}Severity: Critical
Impact: Complete database compromiseExploit:
- All user emails and bcrypt password hashes
- Credit card information (last 4 digits, expiration)
- Order history and personal data
- Complete database schema
- PostgreSQL version and configuration
Blind SQL injection in vehicle lookup
Blind SQL injection in vehicle lookup
Location:
Severity: High
Impact: Database enumeration via boolean-based blind injectionExploit using time-based technique:Proof of impact:
Enumerated admin password character by character using boolean queries.
GET /api/mechanic/vehicle/{vin}Severity: High
Impact: Database enumeration via boolean-based blind injectionExploit using time-based technique:
Enumerated admin password character by character using boolean queries.
SSRF vulnerabilities (Critical)
SSRF with internal token forwarding
SSRF with internal token forwarding
Location:
Severity: Critical
Impact: Internal service access, credential exfiltrationVulnerability: URL validation bypass + automatic authentication header forwardingExploit:Proof of impact:
The sharing endpoint forwards the user’s
POST /api/share/report (report sharing endpoint)Severity: Critical
Impact: Internal service access, credential exfiltrationVulnerability: URL validation bypass + automatic authentication header forwardingExploit:
- Forwarded user authentication tokens to external attacker server
- Accessed internal services (Redis, PostgreSQL, maintenance API)
- Retrieved AWS metadata (IAM credentials) via
http://169.254.169.254/ - Scanned internal network and identified additional services
The sharing endpoint forwards the user’s
Authorization header when fetching the report URL, enabling token exfiltration.SSRF via profile picture upload
SSRF via profile picture upload
Location:
Severity: High
Impact: Internal network reconnaissance, file readExploit:Proof of impact:
POST /api/user/picture (URL-based upload)Severity: High
Impact: Internal network reconnaissance, file readExploit:
- Accessed internal API endpoints
- Read local configuration files
- Fingerprinted internal services and versions
Authorization vulnerabilities (High)
IDOR - Access any user's orders
IDOR - Access any user's orders
Location:
Severity: High
Impact: Horizontal privilege escalationSequential order IDs with no ownership validation enable accessing:
GET /api/shop/orders/{order_id}Severity: High
Impact: Horizontal privilege escalationSequential order IDs with no ownership validation enable accessing:
- Other users’ order details
- Shipping addresses
- Payment information (partial)
- Order history and patterns
IDOR - Modify any vehicle
IDOR - Modify any vehicle
Location:
Severity: High
Impact: Data manipulation, fraudNo authorization check on VIN parameter allows:
PUT /api/mechanic/vehicle/{vin}Severity: High
Impact: Data manipulation, fraudNo authorization check on VIN parameter allows:
- Modifying other users’ vehicle information
- Changing service records
- Altering mileage and maintenance history
BFLA - Access admin endpoints
BFLA - Access admin endpoints
Location:
Severity: Critical
Impact: Admin functionality accessible to regular usersMissing function-level authorization checks enable regular users to:
/api/admin/* endpointsSeverity: Critical
Impact: Admin functionality accessible to regular usersMissing function-level authorization checks enable regular users to:
- List all users via
/api/admin/users - Modify user roles via
/api/admin/users/{id}/role - Access system statistics and logs
- Trigger administrative operations
Additional vulnerabilities
Mass assignment in user profile
Mass assignment in user profile
Location:
Severity: High
Impact: Privilege escalationUnfiltered input allows setting privileged fields:
PUT /api/user/profileSeverity: High
Impact: Privilege escalationUnfiltered input allows setting privileged fields:
Weak password policy
Weak password policy
Location: Registration and password change
Severity: Medium
Impact: Account compromise via brute forceNo password complexity requirements:
Severity: Medium
Impact: Account compromise via brute forceNo password complexity requirements:
- Accepts passwords as short as 4 characters
- No special character requirements
- No uppercase/lowercase requirements
- No password history checks
Excessive data exposure
Excessive data exposure
Location: All API endpoints
Severity: Medium
Impact: Information disclosureAPI responses leak sensitive data:
Severity: Medium
Impact: Information disclosureAPI responses leak sensitive data:
- Internal database IDs
- Unnecessary user fields (created_at, updated_at)
- Stack traces in error messages
- PostgreSQL query details
Missing rate limiting
Missing rate limiting
Location: All endpoints
Severity: Medium
Impact: Brute force, DoSNo rate limiting on:
Severity: Medium
Impact: Brute force, DoSNo rate limiting on:
- Login endpoint (credential stuffing)
- Password reset (account enumeration)
- API endpoints (resource exhaustion)
XSS testing results
Accurate security validation: Shannon correctly confirmed crAPI’s robust XSS defenses:
- React automatic escaping in JSX
- Content Security Policy with nonce-based inline scripts
- DOMPurify sanitization on rich text fields
Impact summary
Statistics
| Metric | Value |
|---|---|
| Total vulnerabilities | 15+ |
| Critical severity | 8 |
| High severity | 6 |
| Medium severity | 3 |
| Runtime | 1.4 hours |
| API cost | ~$52 USD |
| False positives | 0 |
| JWT attacks | 3 variants |
Key security lessons
JWT validation is complex
Multiple attack vectors: algorithm confusion, alg:none, kid injection
SSRF + auth forwarding = critical
Combining SSRF with automatic header forwarding enables token exfiltration
PostgreSQL-specific attacks
pg_sleep for blind injection, information_schema for enumeration
Function-level authz matters
Role-based access control must be enforced at every endpoint
Related resources
Full report
View complete report in GitHub
OWASP crAPI
Official crAPI repository
Test your API
Run Shannon against your API
JWT security
Learn about JWT attack vectors