| name | Static Vulnerability Analysis |
| description | Methodical approach to finding security vulnerabilities through source code review and static analysis |
| when_to_use | When source code is available, before dynamic testing, or when performing security code review of applications |
| version | 1.0.0 |
| languages | c, c++, java, python, javascript, php |
Static Vulnerability Analysis
Overview
Static analysis examines source code without executing it, identifying security vulnerabilities through pattern matching, data flow analysis, and manual code review. This technique is essential for finding logic flaws, authentication bypasses, and subtle vulnerabilities that automated tools might miss.
Core principle: Combine automated tools with manual review. Tools find patterns; humans find logic flaws.
Common Vulnerability Patterns
Memory Safety Issues (C/C++)
char buffer[256];
strcpy(buffer, user_input);
strncpy(buffer, user_input, sizeof(buffer)-1);
size_t alloc = user_count * item_size;
void *ptr = malloc(alloc);
free(ptr);
ptr->field = value;
free(ptr);
free(ptr);
Injection Vulnerabilities
query = f"SELECT * FROM users WHERE name = '{user_input}'"
cursor.execute(query)
cursor.execute("SELECT * FROM users WHERE name = ?", (user_input,))
os.system(f"ping {user_input}")
subprocess.run(["ping", user_input])
filepath = f"/data/{user_filename}"
open(filepath, 'r')
Authentication and Authorization
if username == "admin" and password == config.ADMIN_PASSWORD:
grant_access()
import hmac
if hmac.compare_digest(username, "admin") and \
hmac.compare_digest(password, config.ADMIN_PASSWORD):
grant_access()
def get_user_data(user_id):
return database.get_user(user_id)
def get_user_data(user_id):
if current_user.id != user_id and not current_user.is_admin:
raise UnauthorizedException()
return database.get_user(user_id)
Automated Tools
semgrep --config=auto /path/to/source
bandit -r /path/to/python/code
eslint --plugin security /path/to/js
brakeman /path/to/rails/app
sonar-scanner
Manual Review Checklist
Data Flow Analysis
user_input = request.GET['file']
content = open(user_input).read()
Integration with Other Skills
- skills/analysis/zero-day-hunting - Comprehensive vulnerability research
- skills/exploitation/exploit-dev-workflow - Exploitation of found vulnerabilities
- skills/documentation/* - Document findings