Photo: Unsplash — Free to use
The Vulnerabilities Your Security Scanner Won't Find
SQL injection and XSS are well-known and often caught by automated scanners. But the vulnerabilities causing the most serious breaches in 2026 are business logic flaws, access control bugs, and server-side request forgery — vulnerabilities that require understanding your application's specific logic to detect. This guide covers the hidden vulnerabilities that attackers actively exploit and how to find them before they do.
1. Insecure Direct Object References (IDOR)
IDOR is the #1 most common cause of data breaches in web applications (OWASP API Top 10). When your API allows users to access other users' data by simply changing an ID in the request.
Vulnerable Code Pattern
// VULNERABLE: No ownership check
app.get('/api/orders/:orderId', async (req, res) => {
const order = await db.orders.findOne({ id: req.params.orderId });
return res.json(order);
// User can access ANY order by trying different IDs
});
// FIXED: Verify ownership
app.get('/api/orders/:orderId', authenticate, async (req, res) => {
const order = await db.orders.findOne({
id: req.params.orderId,
userId: req.user.id // Only returns if this user owns it
});
if (!order) return res.status(404).json({ error: 'Not found' });
return res.json(order);
});
How to Find IDOR in Your Application
- List every API endpoint that takes an ID parameter
- For each: can an authenticated user access resources belonging to a different user?
- Test with two accounts: user A creates a resource → user B tries to access/modify/delete it
- Include indirect references: user profile images, documents, invoices, messages
2. Server-Side Request Forgery (SSRF)
SSRF tricks your server into making HTTP requests to internal services. Attackers use this to access AWS metadata APIs, internal databases, admin panels, and CI/CD systems that aren't exposed to the internet.
// VULNERABLE: User controls the URL your server fetches
app.post('/api/preview', async (req, res) => {
const { url } = req.body;
const response = await fetch(url); // Attacker sends: http://169.254.169.254/latest/meta-data/
// This retrieves AWS instance metadata including IAM credentials!
return res.json({ preview: await response.text() });
});
// FIXED: Validate URL against allowlist
function isSafeUrl(url) {
const parsed = new URL(url);
return ['https:', 'http:'].includes(parsed.protocol)
&& !isInternalHost(parsed.hostname); // Block 169.254.x.x, 10.x.x.x, 172.16-31.x.x, 127.x.x.x
}
app.post('/api/preview', async (req, res) => {
if (!isSafeUrl(req.body.url)) {
return res.status(400).json({ error: 'URL not allowed' });
}
// proceed with fetch
});
AWS credential theft via SSRF has been exploited in major breaches including Capital One (2019) and various cloud misconfigurations. The risk is real.
3. Business Logic Vulnerabilities
Business logic bugs are exploited by manipulating the application's intended workflow. No automated scanner can detect them because they require understanding what the application is supposed to do.
Common Business Logic Flaws
- Negative price manipulation: Attacker changes item quantity to -1, resulting in a negative cart total and balance refund
- Race conditions: Two simultaneous coupon redemptions bypass single-use validation — both requests pass the "is coupon used?" check before either marks it used
- Workflow bypass: Skip required verification steps by accessing step 3 directly without completing step 2
- Parameter tampering: Change price, discount, or role in a client-side submitted form that the server accepts without re-validation
Testing Business Logic
- Document every business rule: "coupon can only be used once", "items can't have negative quantity"
- For each rule: write a test that tries to violate it
- Test timing attacks on single-use operations (use concurrent requests)
- Never trust client-submitted prices, discounts, or role assignments
4. Mass Assignment Vulnerabilities
When ORM or framework automatically maps request body fields to model properties, attackers can set fields they're not supposed to:
// VULNERABLE: Rails/Mongoose-style mass assignment
app.put('/api/users/profile', async (req, res) => {
await user.update(req.body); // Attacker sends { "isAdmin": true }
});
// FIXED: Allowlist specific fields only
app.put('/api/users/profile', async (req, res) => {
const { name, bio, avatar } = req.body; // Only these fields
await user.update({ name, bio, avatar });
});
5. Insecure Deserialization
When applications deserialize user-controlled data (JWT payloads, pickle objects, Java serialized objects), attackers can craft malicious payloads that execute code.
- JWT algorithm confusion: Setting alg to "none" to bypass signature verification
- Python pickle: Never pickle user-supplied data — leads to remote code execution
- Node.js serialize/unserialize: node-serialize vulnerabilities with embedded function calls
Rule: never deserialize untrusted data with code-execution capable serialization formats.
6. Supply Chain Vulnerabilities
Your application is only as secure as its dependencies. Supply chain attacks have increased 742% over three years (Sonatype):
- Dependency confusion: Attackers publish malicious packages with the same name as your private packages to public registries
- Typosquatting:
lodaash,colo-rs— one character off from popular packages - Package takeover: Abandoned packages taken over by attackers who publish a malicious update
Mitigation: lock dependencies with package-lock.json/yarn.lock, use Snyk or Dependabot for automated vulnerability scanning, use a private registry with scope management for internal packages.
7. Broken Access Control Patterns
Beyond IDOR, access control failures include:
- Privilege escalation: Standard user accessing admin endpoints by knowing the URL
- JWT role tampering: Decoding JWT, changing
"role":"user"to"role":"admin", re-encoding — only works if server doesn't validate signature - Missing authorization on PUT/DELETE: GET endpoint has auth check, but PUT/DELETE on the same resource doesn't
- Tenant isolation failure: Multi-tenant SaaS where tenant A can query tenant B's data by guessing identifiers
Security Testing Toolchain
- Burp Suite Community: Intercept and modify requests — essential for manual security testing
- OWASP ZAP: Automated dynamic scanning — free, good for CI integration
- Snyk: Dependency vulnerability scanning + SAST for common patterns
- Semgrep: Custom rules for your codebase patterns — catches IDOR patterns and mass assignment
- Nuclei: Template-based vulnerability scanner — 5,000+ community templates
The Developer Security Mindset
Security is not a feature you add at the end — it's a mindset applied during development:
- For every data-returning endpoint: "can user A access user B's data?"
- For every user-supplied URL/file path: "can this reach internal services?"
- For every update operation: "am I re-validating all fields server-side?"
- For every single-use operation: "is this protected against concurrent requests?"
- For every dependency you install: "when was it last updated? how many downloads? does it have CVEs?"
Frequently Asked Questions
What is an IDOR vulnerability?
IDOR (Insecure Direct Object Reference) is when an API endpoint returns data based on an ID without verifying the requesting user owns that resource. Example: GET /api/orders/12345 returns the order even when another user requests it. Fix: always verify resource ownership in every data-returning query.
What is SSRF in web security?
SSRF (Server-Side Request Forgery) is when an attacker makes your server send HTTP requests to unintended locations — usually internal services, cloud metadata APIs, or other internal infrastructure not exposed to the internet. It's used to steal cloud credentials and access internal systems.
How do I find security vulnerabilities in my web application?
Combine automated and manual testing: automated (Snyk for dependencies, OWASP ZAP for dynamic scanning, Semgrep for SAST) + manual (test IDOR by logging in as two users and trying to access each other's resources, test business logic by violating stated rules). Bug bounty programs also surface novel vulnerabilities.
What are business logic vulnerabilities?
Business logic vulnerabilities are flaws where attackers manipulate application workflows in unintended ways — negative quantities in orders, race conditions on single-use coupons, skipping required verification steps, or price manipulation. They require understanding the application's intended business rules to detect.
What tools find web application security vulnerabilities?
Burp Suite (professional web app testing), OWASP ZAP (free automated scanner), Snyk (dependency and SAST), Semgrep (pattern-based code analysis), and Nuclei (template-based scanning). For comprehensive security, combine automated scanning with manual penetration testing.
Get a Security Audit for Your Web Application
We perform comprehensive web application security audits covering IDOR, SSRF, business logic flaws, and supply chain vulnerabilities. Find and fix security issues before attackers do.