🔴 CRITICAL: Fix SQL Injection in Product Search (Line 205)
Security Vulnerability: SQL Injection (CWE-89)
Severity: HIGH
Priority: CRITICAL - Fix Today
Location: app.py, line 205
Vulnerability ID: 238776714
📋 Summary
The /demo/search.html endpoint contains a critical SQL injection vulnerability where user input (search_term) is directly concatenated into SQL queries using f-strings, allowing attackers to manipulate database queries.
🎯 Exploitability Analysis
Risk Level:
Code Flow:
-
Source: User input at line 172 (
search_termfrom form) - Propagation: Line 172 → Line 172
- Sink: SQL execution at line 205
Attack Vector:
# Attacker submits:
search_term = "' OR '1'='1' --"
# Results in query:
SELECT * FROM demo_products WHERE name LIKE '%' OR '1'='1' --%' OR description LIKE '%' OR '1'='1' --%'
# Returns all records, bypasses search logic
Advanced Attacks Possible:
- Data exfiltration via UNION queries
- Database structure enumeration
- Potential authentication bypass
- Data modification/deletion
💥 Impact
- Complete database compromise
- Unauthorized data access to all product records
- Data theft of sensitive information
- Data integrity violations (modification/deletion)
- Authentication bypass in production systems
- Compliance violations (GDPR, PCI-DSS)
🔧 Required Fix
Replace string concatenation with parameterized queries:
Current Vulnerable Code (Line 205):
vulnerable_query = f"SELECT * FROM demo_products WHERE name LIKE '%{search_term}%' OR description LIKE '%{search_term}%'"
cursor.execute(vulnerable_query)
Secure Implementation:
# Use parameterized queries with placeholders
safe_query = """
SELECT * FROM demo_products
WHERE name LIKE ? OR description LIKE ?
"""
search_pattern = f'%{search_term}%'
cursor.execute(safe_query, (search_pattern, search_pattern))
✅ Acceptance Criteria
-
Replace all f-string SQL queries with parameterized queries -
Use ?placeholders for all user input -
Pass user input as tuple parameters to execute() -
Add input validation and sanitization as defense-in-depth -
Test with SQL injection payloads to verify fix -
Scan for other SQL injection vulnerabilities in codebase -
Update security tests
🧪 Test Cases
Verify these inputs are safely handled:
"' OR '1'='1' --"
"'; DROP TABLE demo_products; --"
"' UNION SELECT username, password FROM users --"
"admin'--"