A simulated attack to find weaknesses
A penetration test is an authorised, simulated attack on a system, run to find the weaknesses a real attacker could use. The authorisation is the whole point. The same actions that make a pentest valuable would, without a signed scope, be a crime. A pentest is an attack performed under contract, and that contract (the rules of engagement) is what separates a security service from an intrusion.
The idea predates the web. In the late 1960s the US government convened "tiger teams" to probe time-sharing systems, and the 1970s RAND and Anderson reports on computer security treated deliberate penetration as a way to measure how well a system actually held up. The practice matured alongside the systems it tested, moving from mainframes to networks to web applications to cloud and APIs.
Methodology arrived to make results comparable. The Penetration Testing Execution Standard (PTES) defines seven phases: pre-engagement interactions, intelligence gathering, threatThreatSecurityA specific security threatView reference → modelling, vulnerabilityVulnerabilitySecurityA known vulnerabilityView reference → analysis, exploitation, post-exploitation, and reporting. For web applications specifically, the OWASP Testing Guide supplies a detailed checklist of what to probe and how. PTES describes the shape of an engagement; OWASP fills in the application-layer detail.
A second distinction hardened over time, by how much the tester knows going in. Black-box testing grants no internal knowledge and most closely mimics an external attacker. White-box hands over source code, architecture, and credentials for the deepest coverage. Grey-box sits between, typically a standard user account, which trades some realism for far better use of a fixed time budget. Most commercial engagements today are grey-box for exactly that reason.
A fintech commissions a two-week grey-box test ahead of a funding round. The rules of engagement are explicit: production is in scope but the payment processor's sandbox only, testing windows are 09:00 to 17:00 UTC, no denial-of-service, and any finding that exposes live customer data triggers an immediate stop-and-call.
In week one the testers chain two issues. A verbose error message leaks an internal hostname (low on its own), and that hostname runs an admin panel reachable from the internet with default credentials. Alone, each is minor. Chained, they grant administrative access, which a scanner would have rated as two unrelated mediums. The report ranks the chain critical, includes the exact reproduction steps, and the team patches the panel within forty-eight hours. The value was the chaining, the human judgement no automated tool produced.
In the Unified Product Graph, a penetration test sits in the security region as an assessment activity, linked to what it examined and what it found. A Producttested byPenetration Testhierarchy edge and a product_tested_by_penetration_testPenetration TestassessesServicecross-domain edge record the scope at the product and service level, so coverage gaps are queryable: a critical service with no linked test is an obvious blind spot. A penetration_test_assesses_serviceSecurity ReviewcommissionsPenetration Testhierarchy edge ties the test to the governance decisionDecisionStrategyA recorded decision with context, rationale, and consequencesView reference → that authorised it, preserving the chain of authorisation that makes the work legitimate. The outbound security_review_commissions_penetration_testVulnerabilitydiscovered byPenetration Testcross-domain edge connects each finding back to the engagement that surfaced it, which lets the graph distinguish flaws found in the open from flaws found under contract before an attacker did.vulnerability_discovered_by_penetration_test
Type-specific fields on BaseNode
categorystringTest type
scopestringSystems or features in scope
findings_countnumberTotal findings
critical_countnumberCritical-severity findings
start_datestringISO start date
end_datestringISO end date
report_urlstringFull report URL
methodologystringMethodology (e.g. "OWASP", "PTES")
idstringrequiredUnique identifier (UUID)
typeNodeTyperequiredDiscriminator for the entity type
titlestringrequiredDisplay name
descriptionstringOptional detailed description
statusstringLifecycle status
tagsstring[]Freeform tags for filtering
5 phases — initial: planning · template: OPERATIONAL
4 edge types connected to this entity.
product_tested_by_penetration_testsecurity_review_commissions_penetration_testpenetration_test_assesses_servicevulnerability_discovered_by_penetration_test