Skip to main content

Overview

A finding in Pensar Apex represents a confirmed security vulnerability discovered during penetration testing. Findings include detailed evidence, proof-of-concept exploits, impact analysis, and remediation guidance. Pensar Apex uses a sophisticated deduplication system to prevent reporting the same vulnerability multiple times, even when multiple agents test the same target concurrently.

Finding Structure

Each finding is a JSON document with this structure:

Example Finding

Severity Levels

Pensar Apex uses four severity levels based on CVSS principles:
Critical (9.0-10.0)Vulnerabilities that allow complete system compromise:
  • Unauthenticated remote code execution
  • Full database access without authentication
  • Authentication bypass on admin interfaces
  • Mass data exfiltration
Example: Unauthenticated SQL injection in a public API that exposes the entire user database.
Severity is automatically normalized by the FindingsRegistry using a preprocessing step that maps various severity formats to the canonical CRITICAL/HIGH/MEDIUM/LOW scale.

Proof of Concept (POC)

Every finding must include a working proof-of-concept script that reliably demonstrates the vulnerability. POCs are stored in the session’s pocs/ directory.

POC Requirements

1

Reliability

The POC must work consistently and reliably reproduce the vulnerability.
2

Clarity

The POC should be well-commented and easy to understand.
3

Safety

The POC should minimize damage (e.g., read-only operations when possible).
4

Documentation

The POC should include usage instructions and expected output.

Example POC Script

Deduplication System

The FindingsRegistry prevents duplicate vulnerability reports using a three-tier deduplication system:

Tier 1: Exact Match

Matches findings with the same normalized endpoint and vulnerability class:
Example:

Tier 2: Application-Wide Match

Matches findings with the same title stem (endpoint-stripped title):
Example:

Tier 3: Semantic Match (LLM)

When Tier 1 and Tier 2 don’t match, the registry uses an LLM to detect semantically similar findings:
Example:
  • Finding 1: “SQL Injection vulnerability in user search”
  • Finding 2: “Database query injection in user lookup endpoint”
  • Result: Deduplicated by LLM (different wording, same vulnerability)
Semantic deduplication is conservative: when in doubt, it allows the finding through. It’s better to have a borderline duplicate than to suppress a genuinely new vulnerability.

Findings Registry

The FindingsRegistry is the central component for managing findings:

Creating a Registry

Registering Findings

Thread Safety

The FindingsRegistry is thread-safe and supports concurrent agent testing:
The registry uses a promise-based mutex internally to serialize concurrent register() calls while keeping the LLM semantic check outside the critical section for performance.

Vulnerability Classification

The registry automatically classifies vulnerabilities by type:

Documenting Findings

Agents document findings using the document_vulnerability tool:
The tool:
  1. Validates the finding structure
  2. Checks the FindingsRegistry for duplicates
  3. Writes the finding to disk (if not duplicate)
  4. Returns a confirmation or duplicate notification
Critical Rule: Only use document_vulnerability for confirmed, exploitable vulnerabilities with working POCs. Never document:
  • Positive observations (“authentication works correctly”)
  • Testing limitations (“rate limiting prevented testing”)
  • Informational notes
  • Unconfirmed suspicions

Reports and Export

Findings can be exported in multiple formats:

JSON Export

Markdown Report

Generate human-readable markdown reports:

Best Practices

Every finding must have a working proof-of-concept. The POC proves the vulnerability exists and helps developers reproduce and fix it.
When running multiple agents concurrently, share a single FindingsRegistry instance to prevent duplicate reports.
Include specific, actionable remediation steps. Generic advice like “fix the bug” is not helpful.
Include the payload, response, and explanation in the evidence field. Screenshots and request/response pairs are valuable.
Use CVSS principles to determine severity. Consider exploitability, impact, and scope.
If register() succeeds but persistence fails, call unregister() to remove the phantom finding from the registry.

Agent Architecture

Learn about the agents that discover and document findings

Penetration Testing

Complete guide to running security tests

Session Management

Understand how sessions store findings and POCs

API Reference

Complete API documentation for FindingsRegistry