====== BBC Ch 22: Code Reviews ======
//Source: Bug Bounty Bootcamp by Vickie Li//
Source code review is one of the most effective ways to find vulnerabilities. Even partial access to source code (leaked repos, JS files, open-source components) dramatically increases your attack surface visibility.
===== Dangerous Functions =====
Start by grepping for functions known to introduce vulnerabilities. Their presence doesn't confirm a bug -- trace the input to determine if attacker-controlled data reaches them.
^ Language ^ Function ^ Vulnerability ^
| PHP | ''eval()'', ''assert()'' | Code injection |
| PHP | ''system()'', ''exec()'', ''shell_exec()'', ''passthru()'', ''popen()'', backticks | RCE / command injection |
| PHP | ''include()'', ''require()'' | RFI / LFI |
| PHP | ''unserialize()'' | Insecure deserialization |
| Python | ''eval()'', ''exec()'', ''os.system()'' | Code injection / RCE |
| Python | ''pickle.loads()'', ''yaml.load()'' | Insecure deserialization |
| JavaScript | ''document.write()'', ''document.writeln()'' | XSS |
| JavaScript | ''document.location.href'' | Open redirect |
| Ruby | ''system()'', ''exec()'', ''%x()'', backticks | RCE / command injection |
| Ruby | ''Marshal.load()'', ''yaml.load()'' | Insecure deserialization |
===== Leaked Secrets and Weak Cryptography =====
Grep for keywords that indicate hardcoded credentials or weak algorithms:
grep -rn "key\|secret\|password\|encrypt\|API\|login\|token" .
GitHub personal access tokens follow the pattern ''[a-f0-9]{40}''. Use TruffleHog for entropy-based secret scanning across git history:
trufflehog filesystem --directory=.
Weak/broken cryptographic algorithms to flag:
* ECB mode (deterministic, leaks block patterns)
* MD4, MD5 (collision-vulnerable; not suitable for password hashing)
* SHA-1 (deprecated)
* Custom crypto implementations
===== Outdated Dependencies =====
Grep for import and dependency statements:
grep -rn "import\|require" . | grep -v "node_modules"
cat package.json
cat requirements.txt
cat pom.xml
Cross-reference library versions against:
* CVE database / NVD
* Snyk Vulnerability Database
* OWASP Dependency-Check (automated): ''dependency-check --scan .''
===== Developer Comments =====
Developers leave notes that reveal internal details, removed features, and security TODOs:
grep -rn "TODO\|FIXME\|HACK\|completed\|config\|setup\|removed\|password\|secret" .
Look for comments like:
* ''// TODO: add auth check''
* ''// removed rate limiting for now''
* ''// admin key: ...''
===== Debug Endpoints and Config Files =====
Debug routes left in production:
grep -rn "debug\|test\|dev\|admin\|internal" . | grep -i "route\|path\|url\|endpoint"
grep -rn "HTTP\|HTTPS\|FTP" . | grep -i "dev\|internal\|staging"
Config file extensions to look for:
find . -name "*.conf" -o -name "*.env" -o -name "*.cnf" -o -name "*.cfg" -o -name "*.cf" -o -name "*.ini" -o -name "*.sys" -o -name "*.plist"
===== Detailed Code Review Approach =====
==== Step 1: Identify Important Functions ====
Focus on high-impact areas first:
* Authentication logic (login, session creation, token validation)
* Password reset flows (token generation, expiry checks, delivery)
* State-changing operations (transfers, purchases, account changes)
* Sensitive data reads (profile info, payment data, admin queries)
==== Step 2: Trace User Input ====
Follow attacker-controlled data from entry point to sink. Example -- login endpoint:
username = request.get("username") # entry point
query = "SELECT * FROM users WHERE username='" + username + "'" # SQL sink -> SQLi
Example -- file download endpoint revealing multiple issues:
url = request.get("url") # attacker controls url
# open redirect if url is external domain
# command injection if url passed to shell
# XSS if url reflected into HTML response
os.system("wget " + url) # command injection sink
Trace every parameter through the call chain. Look for points where sanitization is skipped, bypassed, or applied after use.
===== 5-Step Checklist =====
- Grep for dangerous functions (eval/system/unserialize/pickle.loads etc.) and trace their inputs to determine if attacker-controlled.
- Grep for secrets (key/secret/password/token) and scan git history with TruffleHog for entropy-based leaks.
- Audit dependencies against CVE databases; flag outdated packages.
- Grep for developer comments and debug endpoints that reveal hidden functionality or removed security controls.
- For each important function (auth, password reset, state-changing actions), trace user input from entry to sink and identify missing or bypassable sanitization.