Known Relationship Verbs

Relationship verbs are a closed set of 15 values. A relationship with an unknown verb is rejected at ingest time (in v0.1: warning; in v0.2: hard error).

The verb is the semantic label on a directed edge. A closed, curated set ensures that queries like FIND * THAT ALLOWS internet have consistent semantics across all connectors.

Full Verb List

VerbDirectionSemantic MeaningExample
HASA → BOwnership or containmentaws_account HAS aws_s3_bucket
ISA ↔ BIdentity or equivalenceokta_user IS person
ASSIGNEDA → BRole or permission assignmentuser ASSIGNED role
ALLOWSA → BGrants network or access permissionsecurity_group ALLOWS internet
USESA → BActive dependencyservice USES database
CONTAINSA → BLogical grouping (strong containment)aws_vpc CONTAINS aws_subnet
MANAGESA → BAdministrative controlteam MANAGES github_repo
CONNECTSA ↔ BNetwork-level connectivityaws_vpc CONNECTS aws_vpc
PROTECTSA → BSecurity control coverageedr_agent PROTECTS host
EXPLOITSA → BVulnerability exploitationcve EXPLOITS software_package
TRUSTSA → BTrust relationshipaws_account TRUSTS aws_account
SCANSA → BScanner coveragequalys_scanner SCANS host
RUNSA → BProcess or service executionhost RUNS service
READSA → BData access (read)application READS database
WRITESA → BData access (write)application WRITES database

Using Verbs in PQL

-- Direct verb queries
FIND host THAT RUNS service
FIND user THAT ASSIGNED role
FIND security_group THAT ALLOWS internet

-- Negated (coverage gap)
FIND host THAT !PROTECTS edr_agent
FIND service THAT !SCANS scanner

-- Multi-hop
FIND user THAT ASSIGNED role THAT ALLOWS aws_s3_bucket
FIND cve THAT EXPLOITS package THAT USES service THAT RUNS host

Verb Semantics in Blast Radius

For blast radius analysis, these verbs are considered attack-relevant by default:

RUNS, CONNECTS, TRUSTS, CONTAINS, HAS, USES, EXPLOITS

These cover the most common lateral movement patterns:

  • RUNS: compromise a host → compromise its services
  • CONNECTS: network path between hosts
  • TRUSTS: cross-account / cross-system trust
  • CONTAINS: moving from outer to inner containers
  • HAS: ownership chain traversal
  • USES: dependency exploitation
  • EXPLOITS: CVE to affected system

Verb Selection Guide

SituationRecommended Verb
Cloud resource ownershipHAS
IAM/RBAC assignmentASSIGNED
Network access rulesALLOWS
Service-to-databaseUSES or READS/WRITES
Host-to-serviceRUNS
VPC peeringCONNECTS
Scanner-to-targetSCANS
EDR-to-hostPROTECTS
CVE-to-packageEXPLOITS
Organizational groupingCONTAINS
Logical equivalenceIS

In Code

#![allow(unused)]
fn main() {
use parallax_core::relationship::KNOWN_VERBS;

// Validate a verb string
if KNOWN_VERBS.contains(&"RUNS") {
    let verb = RelationshipClass::new("RUNS").unwrap();
}

// Get all known verbs
println!("Known verbs: {:?}", KNOWN_VERBS);
}

Proposing a New Verb

New verbs require a spec change and community discussion. The bar is high: a new verb must:

  1. Be semantically distinct from all existing verbs
  2. Be used by at least 3 different connector types
  3. Enable new query patterns not possible with existing verbs

Open an issue on GitHub to propose new verbs.