offensive-idor
IDOR (Insecure Direct Object Reference) testing checklist: object ID enumeration, horizontal/vertical privilege escalation, GUID predictability, indirect references via hashes, chained IDOR, and API endpoint IDOR. Use for web app pentests and bug bounty IDOR discovery.
Install / Use
npx skills add SnailSploit/Claude-Red --skill offensive-idorInstalls into whichever agent you are using.
SKILL.md
Installable skill definition
Quality Score
Category
SecuritySupported Platforms
Our assessment of offensive-idor
offensive-idor scores 96/100 on our quality scale, 133rd of 653 Security skills we index (top 21%).
Its SKILL.md is 25 KB long, well organised into 47 sections with 5 code examples: a thorough specification that gives an agent plenty to work with.
With 6,850 GitHub stars, it is one of the more widely adopted skills in the catalogue.
Maintenance, license and trust
- The repository was last updated 6 days ago, so offensive-idor is actively maintained.
- It is released under the MIT license, a permissive license that allows use, modification and commercial use with attribution.
- Its trust signals score 100/100, with no cautions. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
Safety scan
No issues foundOur scan of the whole file found no instruction hijacking, hidden characters, credential access, data exfiltration or destructive commands.
Automated pattern scan on 2026-09-26. It catches known dangerous patterns, not every risk — read a skill before letting an agent act on it.
offensive-idor compared with similar skills
All 4 of these similar skills score higher than offensive-idor; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| offensive-idor (this skill)by SnailSploit | 96 | 6.8k | 6d ago | SKILL.md |
| Agent-Reachby Panniantong | 100 | 85.5k | 11d ago | CLAUDE.md |
| headroomby headroomlabs-ai | 100 | 73.8k | today | CLAUDE.md |
| Scraplingby D4Vinci | 100 | 83.8k | today | MCP Server |
| LocalAIby mudler | 100 | 49.3k | today | MCP Server |
Frequently asked questions
- How do I install offensive-idor?
- Run
npx skills add SnailSploit/Claude-Red --skill offensive-idor. The install tabs above show the steps for each supported agent. - Which AI agents does offensive-idor work with?
- It is written for Universal, as a SKILL.md file. Other agents that read the same format can often use it too.
- Is offensive-idor safe to use?
- Our scan of the whole file found no instruction hijacking, hidden characters, credential access, data exfiltration or destructive commands. It is MIT-licensed and scores 100/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is offensive-idor still maintained?
- The repository was last updated 6 days ago, so offensive-idor is actively maintained.
Skill content
View source on GitHubSKILL: Insecure Direct Object References (IDOR)
Metadata
- Skill Name: idor
- Folder: offensive-idor
- Source: https://github.com/SnailSploit/offensive-checklist/blob/main/idor.md
Description
IDOR (Insecure Direct Object Reference) testing checklist: object ID enumeration, horizontal/vertical privilege escalation, GUID predictability, indirect references via hashes, chained IDOR, and API endpoint IDOR. Use for web app pentests and bug bounty IDOR discovery.
Trigger Phrases
Use this skill when the conversation involves any of:
IDOR, insecure direct object reference, horizontal privilege escalation, vertical privilege escalation, object enumeration, GUID, API IDOR, mass assignment, broken access control
Instructions for Claude
When this skill is active:
- Load and apply the full methodology below as your operational checklist
- Follow steps in order unless the user specifies otherwise
- For each technique, consider applicability to the current target/context
- Track which checklist items have been completed
- Suggest next steps based on findings
Full Methodology
Insecure Direct Object References (IDOR)
Shortcut
flowchart LR
A[Create Test Accounts] --> B[Discover Features]
B --> C[Intercept Traffic]
C --> D[Switch IDs in Requests]
D --> E{IDOR Found?}
E -->|Yes| F[Document Vulnerability]
E -->|No| G[Try Protection Bypass]
G --> H[Monitor Information Leaks]
- Create two accounts for each application role and designate one as the attacker account and the other as the victim account.
- Discover features in the application that might lead to IDOR. Pay attention to features that return sensitive information or modify user data.
- Revisit the features you discovered in step 2. With a proxy, intercept your browser traffic while you browse through the sensitive functionalities.
- With a proxy, intercept each sensitive request and switch out the IDs that you see in the requests. If switching out IDs grants you access to other user's information or lets you change their data, this indicates an IDOR.
- Don't despair if the application seems to be immune to IDOR. Use this opportunity to try a protection bypass technique. If the application uses an encoded, hashed, or randomized ID, you can try decoding, or predicting the IDs. You can also try supplying the application with an ID when it does not ask for one. Finally, sometimes changing the request method type or file type makes all the difference.
- Monitor for information leaks in export files, email, and other text alerts. An IDOR now might lead to an information leak in the future.
Mechanisms
flowchart TD
A[IDOR Vulnerabilities] --> B[Missing Authorization Checks]
A --> C[Client-Side ID Transmission]
A --> D[Predictable Resource Identifiers]
A --> E[Insufficient Access Control Logic]
A --> F[Improper Session Handling]
A --> G[Reliance on Obfuscation]
B --> H[Horizontal Access Control Failures]
C --> H
D --> I[Vertical Access Control Failures]
E --> I
F --> J[Context-Dependent Access Control Failures]
G --> J
Insecure Direct Object References (IDOR) occur when an application exposes a reference to an internal implementation object without sufficient access control. These vulnerabilities allow attackers to manipulate these references to access unauthorized data or perform unauthorized actions.
IDOR vulnerabilities arise from flawed access control mechanisms that fail to validate whether a user should have permission to access or modify a specific resource. The core implementation issues include:
- Missing Authorization Checks: No validation of user permissions when accessing objects
- Client-Side ID Transmission: Relying on client-provided identifiers without server-side verification
- Predictable Resource Identifiers: Sequential or easily guessable object references
- Insufficient Access Control Logic: Authentication without proper authorization
- Improper Session Handling: Not binding resources to user sessions
- Reliance on Obfuscation: Using complex identifiers without actual access control
IDORs manifest in various patterns:
- Horizontal Access Control Failures: Accessing resources belonging to other users of the same privilege level
- Vertical Access Control Failures: Accessing resources requiring higher privileges
- Context-Dependent Access Control Failures: Access based on improper contextual states
Hunt
Identifying IDOR Vulnerabilities
Preparation
-
Create Multiple Test Accounts:
- Set up accounts with different privilege levels (e.g., regular user, premium user)
- Create multiple accounts within the same privilege level
-
Establish Baseline Behavior:
- Document normal resource access patterns
- Map all application endpoints that reference objects
- Identify resource identifiers in requests
- Evaluate caching headers (ETag/Last-Modified) that can leak existence side‑channels during enumeration
-
Request Capture Setup:
- Configure a proxy (e.g., Burp Suite, OWASP ZAP)
- For mobile applications, install the proxy’s CA certificate on the device or emulator (e.g., with mitmproxy or Burp Mobile Assistant) so HTTPS traffic can be intercepted.
- Record all interactions with resource identifiers
- Create an inventory of potential IDOR test targets
Finding IDOR Vulnerabilities
-
Request Parameter Analysis:
- Look for identifiers in URLs, request bodies, cookies, and headers
- Common parameter names:
id, user_id, account_id, file, doc, document, record, item, order, number, profile, edit, view, filename, object, num, key, userid, uuid, group, role - Watch for identifiers hidden in JWT claims (
sub,org_id) or signed cookies; tamper if server fails to re‑authorize.
-
Parameter Manipulation Techniques:
- Direct Modification: Change numerical IDs (e.g.,
id=1→id=2) - Add Missing IDs: Try adding relevant IDs (e.g.,
user_id,account_id) to requests that don't initially have them (e.g.,GET /api/messages→GET /api/messages?user_id=<victim_uuid>). Parameter names can often be inferred from other requests or discovered using tools like Arjun. - GUID/UUID Replacement: Replace one user's GUID with another's
- Decode and Modify: Decode base64/hex encoded parameters before modification
- Array/Object Manipulation: Add or modify array elements in API requests
{"items": [{"id": 123, "owner": "victim"}]} → {"items": [{"id": 456, "owner": "attacker"}]} - File Type Manipulation: Try changing requested file types or appending extensions (e.g.,
.json,.xml,.config). Ruby applications might respond differently to/resource/123vs/resource/123.json. - Wildcard Testing: Replace IDs with wildcards (e.g.,
GET /api/users/*). Rare, but worth trying. - Array-based Access: Try wrapping IDs in arrays (e.g.,
{"id":19}→{"id":[19]}). - JSON Object Wrapping: Try wrapping the ID in a nested JSON object (e.g.,
{"id":111}→{"id":{"id":111}}). - Numeric vs Non-Numeric IDs: If the application uses non-numeric IDs (GUIDs, usernames), try substituting them with potential numeric equivalents (e.g.,
account_id=UUID→account_id=123). - Parameter Name Replacement: Try alternative parameter names (e.g., album_id → account_id). Fuzz JSON Patch (RFC 6902) and JSON Merge Patch (RFC 7386) bodies for cross‑user modifications.
- Direct Modification: Change numerical IDs (e.g.,
- Multiple Value Testing: Supply multiple values for same parameter (e.g.,
id=123&id=456,user_id=attacker_id&user_id=victim_id,user_id=attacker_id[]&user_id=victim_id[]). See HTTP Parameter Pollution under Bypass Techniques. - New Feature Focus: Pay special attention to newly added features as they may have weaker access controls; include mobile and older API versions.
- Cache Probing: Use CDN cache keys and
If-None-Matchprobing to infer existence without full access.
-
Endpoint Analysis Questions: For each endpoint receiving an object ID, ask:
- Does this ID reference a private or sensitive resource (vs. public)?
- What are my legitimate IDs for this type of resource?
- What are the different user roles interacting with this API? (user, admin, manager, etc.)
-
Hidden Parameter Discovery:
- Analyze JavaScript client-side code for hidden parameters
- Check mobile app API communications
- Examine response data for additional identifiable references
-
Web Socket Discovery:
- Identify how websockets are being initiated
- Check if we can manipulate it to change anything
- Make sure to test mobile/desktop applications of the target as well
- Inspect mobile deep links and intent filters that include object IDs; try cross‑app invocation.
-
Testing Methodology:
- Access resource as User A and capture the request
- Note all identifiers (explicit and obfuscated)
- Log in as User B
- Replay User A's request with User B's session
- Modify identifiers to access resources belonging to other users
- Test both read and write operations(and all other application boundaries)
- if there are mobile applications create a unique user for that platform as well and test IDOR
Advanced IDOR Testing Techniques
mindmap
root((IDOR Testing))
::icon(fa fa-bug)
style root fill:#f96,stroke:#333,stroke-width:2px
id1(Blind Detection)
::icon(fa fa-eye-slash)
style id1 fill:#bbf,stroke:#33f,stroke-width:1px
id1.1[Comparative Response Analysis]
style id1.1 fill:#ddf,stroke:#33f
id1.2[Out-of-Band Detection]
style id1.2 fill:#ddf,stroke:#33f
id1.3[Side-Channel Analysis]
style id1.3 fill:#ddf,stroke:#33f
id2(Mass Testing)
::icon(fa fa-rocket)
style id2 fill:#fbf,stroke:#939,stroke-width:1px
id2.1[Automated Identifier Enumeration]
style id2.1 fill:#fdf,stroke:#939
id2.2[Parallel Testing with Burp]
style id2.2 fill:#fdf,stroke:#939
id2.3[Pattern Recognition]
style id2.3 fill:#fdf,stroke:#939
id3(Protection Bypass)
::icon(fa fa-shield)
style id3 fill:#bfb,stroke:#393,stroke-width:1px
id3.1[ID Obfuscation Bypass]
style id3.1 fill:#dfd,stroke:#393
id3.2[Access Control Bypass]
style id3.2 fill:#dfd,stroke:#393
id3.3[Reference Leakage Exploitation]
style id3.3 fill:#dfd,stroke:#393
Blind IDOR Detection
-
Comparative Response Analysis:
- Compare responses between valid and invalid resource IDs
- Look for subtle differences in response times, sizes, or error messages
- Use automated tools to detect variations across multiple requests
-
Out-of-Band Detection:
- Inject tracking URLs in modifiable parameters
- Monitor for callbacks when the resource is accessed
- Use server callbacks to detect successful access
-
Side-Channel Analysis:
- Analyze network traffic for additional clues
- Look for timing differences or response size variations
Mass IDOR Testing
- Automated Identifier Enumeration:
import requests
session = requests.Session()
# Login code here...
# Test range of IDs
for id in range(1, 1000):
response = session.get(f"https://example.com/api/documents/{id}")
if response.status_code == 200:
print(f"Found accessible document: {id}")
# Log response for later analysis
-
Parallel Testing with Burp:
- Use number payloads for sequential IDs (test large ranges, e.g., 100-1000+).
- Use custom word lists for GUIDs/UUIDs from observed patterns
- Set up Grep Match rules to identify successful access
-
Pattern Recognition:
- Analyze response patterns for common IDOR signatures
- Look for repeated or predictable a
Truncated for display — read the full file on GitHub.
Related Skills
Agent-Reach
85.5kGive your AI agent eyes to see the entire internet. Read & search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu — one CLI, zero API fees.
headroom
73.8kCompress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.
Scrapling
83.8k🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl! Don't be shy, join here: https://discord.gg/EMgGbDceNQ and follow here for daily tips and tricks: https://x.com/Scrapling_dev
LocalAI
49.3kLocalAI is the open-source AI engine. Run any model - LLMs, vision, voice, image, video - on any hardware. No GPU required.
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
