Security RX stores vulnerability and misconfiguration data in New Relic's database (NRDB), making it queryable using NRQL. This reference guide explains the entity types, attributes, and data structure you can use to build custom queries, dashboards, and alerts.
Entity and event types
Security RX uses the following entity and event types to store security data:
SecurityFinding Entity (Recommended)
The SECURITY_FINDING is a specialized entity type that serves as a generic container for all security issues detected by Security RX. This is the recommended way to query security data in New Relic.
Important: SecurityFinding is queried as an Entity type, not as a traditional event:
FROM EntitySELECT * WHERE type = 'SECURITY_FINDING'Understanding findingType
The findingType attribute is the key field for distinguishing the data source:
findingType = 'VULNERABILITY': Indicates a vulnerability finding from sources like APM agents, Infrastructure agents, or third-party scanners (Snyk, Trivy, FOSSA)findingType = 'MISCONFIGURATION': Indicates a cloud security posture management (CSPM) finding from Security RX Cloud (e.g., from AWS Security Hub, GuardDuty, or Config)
Other findingType values include: LIBRARY_VULNERABILITY, INFRASTRUCTURE_VULNERABILITY, APPLICATION_VULNERABILITY, SYSTEM_VULNERABILITY, SECURITY_EVENT, and OTHER.
Core entity fields
Attribute | Type | Description | Example |
|---|---|---|---|
| String | Globally unique identifier for this SecurityFinding (targets specific CVE & impacted entity) | "ABC123..." |
| String | Entity type - always "SECURITY_FINDING" | "SECURITY_FINDING" |
| String | Title of the vulnerability or misconfiguration | "CVE-2024-12345: SQL Injection in library-name" |
| String | Account ID where this finding was detected | "1234567" |
| String | Scope type - typically "ACCOUNT" | "ACCOUNT" |
| Timestamp | When this entity was created | Unix timestamp |
| Timestamp | When this entity was last updated | Unix timestamp |
| Array | List of tags applicable to entity (typically empty for SecurityFinding) | [] |
Classification fields
Attribute | Type | Description | Example |
|---|---|---|---|
| String | Identifier for aggregating SecurityFindings (usually CVE ID) | "CVE-2024-12345" |
| String | Top-level type of finding | "VULNERABILITY", "MISCONFIGURATION" |
| String | Sub-type (language for APM vulnerabilities, INFRA_OS_VULNERABILITY or INFRA_PACKAGE_VULNERABILITY for infrastructure) | "java", "INFRA_PACKAGE_VULNERABILITY" |
| String | Source of the finding | "New Relic", "Snyk", "AWS Security Hub" |
Status and severity fields
Attribute | Type | Description | Values |
|---|---|---|---|
| String | Reported severity of the finding | "CRITICAL", "HIGH", "MEDIUM", "LOW", "UNKNOWN", "INFO" |
| String | Current status of the finding | "AFFECTED", "IGNORED", "NO_LONGER_DETECTED", "UNKNOWN" |
| Boolean | Whether a remediation exists | true, false |
| String | Security RX's suggested upgrade | "Upgrade to version 2.17.1" |
| String | Brief remediation text from the source | "Update library to patched version" |
| String | Documentation URL from the source |
CVE reference fields
For vulnerability findings, the cve object contains detailed CVE information:
Attribute | Type | Description |
|---|---|---|
| String | CVE identifier |
| String | CVE description |
| Number | CVSS score |
| String | CVSS vector string |
| Number | EPSS exploit probability score |
| Number | EPSS percentile ranking |
| Boolean | Whether a known exploit exists |
| String | URL where CVE was disclosed |
| Timestamp | When CVE was disclosed |
Misconfiguration fields (Cloud findings)
For misconfiguration findings, the misconfiguration object contains cloud-specific information:
Attribute | Type | Description |
|---|---|---|
| String | Cloud provider |
| String | Title of the misconfiguration |
| String | Raw finding type from source |
| String | Simplified resource type (e.g., "S3", "EC2", "RDS") |
Impacted entity fields
The impactedEntity object identifies which New Relic entity is affected:
Attribute | Type | Description |
|---|---|---|
| String | Entity GUID |
| String | Entity name |
| String | Entity type (APM-APPLICATION, INFRA-HOST, etc.) |
| String | Account ID |
| String | Scope type |
Timestamp fields
Attribute | Type | Description |
|---|---|---|
| Timestamp | When the finding was first detected |
| Timestamp | When the finding was last updated |
| Timestamp | When the finding was last known to be active |
UI and internal fields
Attribute | Type | Description |
|---|---|---|
| String | Link to details page in Security RX UI |
| String | Link to entity-view in Security RX UI |
| String | Internal status field |
| Boolean | Internal active flag (used in cloud queries) |
| String | Internal field (will be hidden in production) |
| String | Internal field (will be hidden in production) |
| Array of Objects | Additional metadata with key-value pairs (used for cloud account IDs, etc.) |
Conseil
Fields marked as "internal" are currently visible in NRDB but may be hidden upon final launch. The internalState.active field is commonly used in cloud misconfiguration queries to filter active findings.
Query examples for vulnerabilities
Count active critical vulnerabilities by entity:
FROM EntitySELECT count(*)WHERE type = 'SECURITY_FINDING' AND status = 'AFFECTED' AND severity = 'CRITICAL'FACET impactedEntity.nameFind entities affected by a specific CVE:
FROM EntitySELECT count(*)WHERE type = 'SECURITY_FINDING' AND status = 'AFFECTED' AND cve.id = 'CVE-2024-23944'FACET impactedEntity.nameFind CVEs with active ransomware campaigns:
FROM EntitySELECT count(*)WHERE type = 'SECURITY_FINDING' AND cve.exploitKnown IS trueFACET impactedEntity.name, cve.idFind likely exploitable vulnerabilities (high EPSS score):
FROM EntitySELECT count(*)WHERE type = 'SECURITY_FINDING' AND cve.epssPercentile > '0.95'FACET cve.idFind reporting sources for your findings:
FROM EntitySELECT count(*)WHERE type = 'SECURITY_FINDING'FACET sourceEntities with high vulnerability thresholds:
SELECT impactedEntityFROM ( SELECT count(*) AS vulnerableCount FROM Entity WHERE type = 'SECURITY_FINDING' AND severity IN ('CRITICAL', 'HIGH') FACET impactedEntity.name AS impactedEntity, severity)WHERE (severity = 'HIGH' AND vulnerableCount > 10) OR (severity = 'CRITICAL' AND vulnerableCount > 5)Query examples for cloud misconfigurations
Count unique misconfigurations by status:
FROM EntitySELECT uniqueCount(misconfiguration.issueTitle)WHERE type = 'SECURITY_FINDING' AND findingType = 'MISCONFIGURATION'FACET statusTop 10 most common misconfiguration types:
FROM EntitySELECT count(*)WHERE type = 'SECURITY_FINDING' AND findingType = 'MISCONFIGURATION' AND internalState.active = trueFACET misconfiguration.issueTitleLIMIT 10Find riskiest AWS accounts:
FROM EntitySELECT uniqueCount(misconfiguration.issueTitle)WHERE type = 'SECURITY_FINDING' AND findingType = 'MISCONFIGURATION' AND internalState.active = true AND severity IN ('CRITICAL', 'HIGH')FACET aparse(additionalInfo, '%"key":"cloudProviderAccountId","values":["*"]%') AS 'AWS Account ID'LIMIT 10Count misconfigurations by resource type:
FROM EntitySELECT uniqueCount(misconfiguration.issueTitle)WHERE type = 'SECURITY_FINDING' AND findingType = 'MISCONFIGURATION' AND internalState.active = trueFACET misconfiguration.normalizedResourceTypeFind critical and publicly exposed resources:
FROM EntitySELECT name, impactedEntity.name, misconfiguration.misconfigurationTypeWHERE type = 'SECURITY_FINDING' AND findingType = 'MISCONFIGURATION' AND internalState.active = true AND severity = 'CRITICAL' AND misconfiguration.misconfigurationType LIKE 'Effects/Data Exposure'SINCE 1 day agoVulnerability (Custom Event)
Stores detailed vulnerability metadata including CVE information, severity scores, and remediation guidance.
Primary use: Deep dive into vulnerability details and metadata
Key attributes:
Attribute | Type | Description | Example |
|---|---|---|---|
| String | CVE identifier | "CVE-2024-12345" |
| String | CVSS-based severity | "CRITICAL", "HIGH", "MEDIUM", "LOW" |
| Number | CVSS numeric score | 9.8 |
| Number | EPSS exploit probability | 0.95 |
| Number | EPSS percentile ranking | 98.5 |
| Boolean | Used in known ransomware campaigns |
|
| String | Vulnerable library/package name | "log4j-core" |
| String | Vulnerable package version | "2.14.0" |
| String | Version with fix | "2.17.1" |
| String | Affected entity GUID | "ABC123..." |
| String | Detection source | "APM_AGENT", "SNYK", "AWS_SECURITY_HUB" |
Query example:
FROM VulnerabilitySELECT count(*)WHERE severity = 'CRITICAL'AND activeRansomware = trueFACET affectedPackageCommon attributes across event types
These attributes appear across multiple event types:
Entity identification
Attribute | Description |
|---|---|
| Unique identifier for the affected entity |
| Human-readable entity name |
| Entity type (APPLICATION, HOST, SERVICE) |
| New Relic account ID |
Timestamps
Attribute | Description |
|---|---|
| When the event occurred |
| When vulnerability was first detected |
| Last update timestamp |
| When vulnerability was marked resolved |
Source tracking
Attribute | Description |
|---|---|
| Data source (APM_AGENT, INFRASTRUCTURE, SNYK, etc.) |
| Unique ID from source system |
| Integration that provided data |
Data relationships
Understanding how data types relate to each other:
SecurityFinding Entity (type = 'SECURITY_FINDING') ↓ contains ├─ findingType (VULNERABILITY or MISCONFIGURATION) ├─ cve (CVE details for vulnerabilities) ├─ misconfiguration (Cloud security details) └─ impactedEntity (Affected New Relic entity)Query patterns
For query patterns using SecurityFinding Entity, see the Query examples sections above.
Attribute types and formats
Severity values
CRITICAL - CVSS 9.0-10.0HIGH - CVSS 7.0-8.9MEDIUM - CVSS 4.0-6.9LOW - CVSS 0.1-3.9INFO - CVSS 0.0State values
OPEN - Vulnerability currently activeCLOSED - Vulnerability resolved or fixedAFFECTED - Entity is confirmed affectedIGNORED - Marked as not applicableNO_LONGER_DETECTED - No longer seen in scansSource values
APM_AGENT - Detected by New Relic APM agentINFRASTRUCTURE - Detected by Infrastructure agentSNYK - Imported from SnykAWS_SECURITY_HUB - Imported from AWS Security HubDEPENDABOT - Imported from GitHub DependabotFOSSA - Imported from FOSSATRIVY - Imported from TrivySECURITY_DATA_API - Sent via APIQuerying tips
Filter by severity (Modern approach)
Findings are prioritized based on severity:
FROM EntitySELECT count(*)WHERE type = 'SECURITY_FINDING' AND severity IN ('CRITICAL', 'HIGH') AND status = 'AFFECTED'FACET impactedEntity.nameFilter by finding type
Separate vulnerabilities from misconfigurations:
-- Vulnerabilities onlyFROM EntitySELECT count(*)WHERE type = 'SECURITY_FINDING' AND findingType = 'VULNERABILITY'FACET impactedEntity.type
-- Misconfigurations onlyFROM EntitySELECT count(*)WHERE type = 'SECURITY_FINDING' AND findingType = 'MISCONFIGURATION'FACET misconfiguration.normalizedResourceTypeFilter by entity type
Separate application from infrastructure vulnerabilities:
-- Application vulnerabilitiesFROM EntitySELECT count(*)WHERE type = 'SECURITY_FINDING' AND impactedEntity.type LIKE '%APPLICATION%'FACET impactedEntity.name
-- Infrastructure vulnerabilitiesFROM EntitySELECT count(*)WHERE type = 'SECURITY_FINDING' AND impactedEntity.type LIKE '%HOST%'FACET impactedEntity.nameFilter by detection source
Query findings from specific integrations:
FROM EntitySELECT count(*)WHERE type = 'SECURITY_FINDING' AND source = 'Snyk'FACET severityTime-based filtering
Find recently detected findings:
FROM EntitySELECT count(*)WHERE type = 'SECURITY_FINDING' AND firstDetected > ago(7 days)FACET cve.id, severityBuilding custom dashboards
Use SecurityFinding Entity to create comprehensive security dashboards:
Executive dashboard - High-level security metrics across all finding types
FROM EntitySELECT count(*)WHERE type = 'SECURITY_FINDING'AND status = 'AFFECTED'FACET severity, findingTypeVulnerability trends - Track vulnerability detection over time
FROM EntitySELECT count(*)WHERE type = 'SECURITY_FINDING'AND findingType = 'VULNERABILITY'FACET weekOf(firstDetected)SINCE 90 days agoCloud security posture - Monitor cloud misconfigurations
FROM EntitySELECT uniqueCount(misconfiguration.issueTitle)WHERE type = 'SECURITY_FINDING'AND findingType = 'MISCONFIGURATION'FACET misconfiguration.cloudProvider, severityEntity security posture - Per-entity security views
FROM EntitySELECT count(*) AS 'Findings'WHERE type = 'SECURITY_FINDING'AND status = 'AFFECTED'FACET impactedEntity.name, severity
For more query examples, see Security data query examples.
Legacy dashboard approaches
For backward compatibility, you can still use the legacy event type (Vulnerability), but we recommend migrating to SecurityFinding Entity for new dashboards.