changedOutput schema / (root)
Previous value: -nullNew value: +{
+ "properties": {
+ "confidence": {
+ "description": "How far the score can be trusted, 0-1: the mean confidence of its hops.",
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "confidenceLabel": {
+ "description": "The same as a band: high, medium or low.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "correlatedHops": {
+ "description": "True when two or more hops rest on the same kind of evidence.",
+ "type": [
+ "boolean",
+ "null"
+ ]
+ },
+ "id": {
+ "description": "The route's id, as asked for.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "mixtureScore": {
+ "description": "The score averaged over attacker profiles, weighted by how likely each is.",
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "nodes": {
+ "description": "The assets on the route, entry point first, target last.",
+ "items": {
+ "properties": {
+ "crownJewel": {
+ "description": "True for a sensitive asset.",
+ "type": [
+ "boolean",
+ "null"
+ ]
+ },
+ "cvss": {
+ "description": "For a vulnerability: its CVSS base score.",
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "id": {
+ "description": "Node id: what steps and cuts refer to.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "internetExposed": {
+ "description": "True for an entry point reachable from the internet.",
+ "type": [
+ "boolean",
+ "null"
+ ]
+ },
+ "kev": {
+ "description": "For a vulnerability: true when it is known to be exploited in the wild (CISA KEV).",
+ "type": [
+ "boolean",
+ "null"
+ ]
+ },
+ "label": {
+ "description": "Asset type, e.g. LoadBalancer, Container, IAM_Role, Bucket, CVE.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "name": {
+ "description": "Asset name.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "severity": {
+ "description": "For a vulnerability: its severity.",
+ "type": [
+ "string",
+ "null"
+ ]
+ }
+ },
+ "type": [
+ "object",
+ "null"
+ ]
+ },
+ "type": [
+ "array",
+ "null"
+ ]
+ },
+ "posteriorMean": {
+ "description": "The score with the uncertainty of each hop and the mix of attacker capabilities taken into account, 0-1.",
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "priority": {
+ "description": "Triage priority, 0-100: the score blended with corroboration, target sensitivity and how many routes share the entry point. This is the order of the list.",
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "priorityFactors": {
+ "description": "The reasons behind the priority, human-readable.",
+ "items": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "type": [
+ "array",
+ "null"
+ ]
+ },
+ "priorityLabel": {
+ "description": "Priority band: P1, P2 or P3. P1 is what to fix first.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "priorityReason": {
+ "description": "One sentence saying why the route is in its band, when a fact put it there; null when the blended number did.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "profileScores": {
+ "description": "The score against each attacker profile.",
+ "items": {
+ "properties": {
+ "prior": {
+ "description": "How likely this profile is assumed to be, 0-1.",
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "profile": {
+ "description": "Attacker profile: commodity, criminal or apt.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "score": {
+ "description": "Probability this profile completes the route, 0-1.",
+ "type": [
+ "number",
+ "null"
+ ]
+ }
+ },
+ "type": [
+ "object",
+ "null"
+ ]
+ },
+ "type": [
+ "array",
+ "null"
+ ]
+ },
+ "remediations": {
+ "description": "Ways to close the route.",
+ "items": {
+ "properties": {
+ "content": {
+ "description": "The fix itself: the code or the policy to apply.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "cut": {
+ "description": "The relationship this fix removes; null when it removes none. Pass it to simulate_fix as one of `cuts` to see what the fix would do.",
+ "properties": {
+ "from": {
+ "description": "Node id the relationship starts at.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "to": {
+ "description": "Node id it ends at.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "type": {
+ "description": "The relationship type.",
+ "type": [
+ "string",
+ "null"
+ ]
+ }
+ },
+ "type": [
+ "object",
+ "null"
+ ]
+ },
+ "kind": {
+ "description": "The form the fix takes, e.g. terraform.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "rationale": {
+ "description": "Why this closes the route.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "title": {
+ "description": "What to change, in a line.",
+ "type": [
+ "string",
+ "null"
+ ]
+ }
+ },
+ "type": [
+ "object",
+ "null"
+ ]
+ },
+ "type": [
+ "array",
+ "null"
+ ]
+ },
+ "runtimeConfirmed": {
+ "description": "True when a runtime alert sits on the route.",
+ "type": [
+ "boolean",
+ "null"
+ ]
+ },
+ "score": {
+ "description": "End-to-end probability that an attacker completes the route, 0-1. A modelled estimate, not a measured rate: see get_score_trust.",
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "scoreCiHigh": {
+ "description": "High end of the same interval.",
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "scoreCiLow": {
+ "description": "Low end of the 90% credible interval around posteriorMean. A wide interval means the score rests on soft inputs.",
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "scoreUpperBound": {
+ "description": "The score if the hops fail or succeed together rather than independently: the weakest hop's probability.",
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "steps": {
+ "description": "The hops, in order. Each is one relationship an attacker crosses.",
+ "items": {
+ "properties": {
+ "attack": {
+ "description": "The MITRE ATT&CK technique the hop maps to; null when none applies.",
+ "properties": {
+ "id": {
+ "description": "Technique id, e.g. T1190.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "name": {
+ "description": "Technique name.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "tactic": {
+ "description": "The tactic it serves, e.g. Initial Access.",
+ "type": [
+ "string",
+ "null"
+ ]
+ }
+ },
+ "type": [
+ "object",
+ "null"
+ ]
+ },
+ "edgeType": {
+ "description": "The relationship, e.g. EXPOSES, ASSUMES, HAS_PERMISSION, CAN_ESCALATE_TO.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "from": {
+ "description": "Node id the hop starts at. Usable as `from` in a simulate_fix cut.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "probability": {
+ "description": "Probability an attacker crosses this hop, 0-1.",
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "to": {
+ "description": "Node id the hop ends at. Usable as `to` in a simulate_fix cut.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "weightBasis": {
+ "description": "Where that probability came from: kev, epss or runtime are observed evidence; cvss, severity or heuristic are estimates.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "weightConfidence": {
+ "description": "How far to trust that probability, 0-1, given its basis.",
+ "type": [
+ "number",
+ "null"
+ ]
+ }
+ },
+ "type": [
+ "object",
+ "null"
+ ]
+ },
+ "type": [
+ "array",
+ "null"
+ ]
+ },
+ "suppressed": {
+ "description": "True when an analyst has triaged the route off the board (accepted risk, false positive). It still exists, but do not present it as open work.",
+ "type": [
+ "boolean",
+ "null"
+ ]
+ }
+ },
+ "required": [
+ "id"
+ ],
+ "type": "object"
+}