@x12i/memorix-retrieval 1.35.0 → 1.37.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/catalox-seeds/inputs/entity-descriptors/assets.json +166 -0
  2. package/catalox-seeds/inputs/entity-descriptors/subnets.json +115 -1
  3. package/catalox-seeds/inputs/entity-descriptors/topology-zones.json +52 -1
  4. package/catalox-seeds/inputs/entity-descriptors/vulnerabilities-groups.json +10 -2
  5. package/catalox-seeds/inputs/entity-descriptors/vulnerabilities.json +79 -7
  6. package/catalox-seeds/inputs/graph-descriptors/asset-subnet-paths-graph.json +41 -0
  7. package/catalox-seeds/inputs/graph-descriptors/asset-topology-vulnerabilities-graph.json +81 -0
  8. package/catalox-seeds/inputs/graph-descriptors/asset-vulnerability-group-graph.json +38 -0
  9. package/catalox-seeds/inputs/graph-descriptors/vulnerability-asset-subnet-graph.json +40 -0
  10. package/catalox-seeds/inputs/list-descriptors/assets-exploitability-decisions-list.json +4 -0
  11. package/catalox-seeds/inputs/list-descriptors/assets-potential-impact-decisions-list.json +16 -8
  12. package/catalox-seeds/inputs/manifest.json +4 -0
  13. package/catalox-seeds/inputs/memorix-catalog-ids.json +2 -1
  14. package/catalox-seeds/memorix-retrieval-descriptors.manifest.json +1186 -34
  15. package/dist/client/catalox-adapter.d.ts.map +1 -1
  16. package/dist/client/catalox-adapter.js +10 -1
  17. package/dist/client/catalox-adapter.js.map +1 -1
  18. package/dist/client/catalox-like.d.ts +6 -0
  19. package/dist/client/catalox-like.d.ts.map +1 -1
  20. package/dist/data/identity.d.ts +19 -1
  21. package/dist/data/identity.d.ts.map +1 -1
  22. package/dist/data/identity.js +41 -25
  23. package/dist/data/identity.js.map +1 -1
  24. package/dist/data/record-info.d.ts +1 -1
  25. package/dist/data/record-info.d.ts.map +1 -1
  26. package/dist/descriptors/catalog-ids.d.ts +1 -0
  27. package/dist/descriptors/catalog-ids.d.ts.map +1 -1
  28. package/dist/descriptors/catalog-ids.js +1 -0
  29. package/dist/descriptors/catalog-ids.js.map +1 -1
  30. package/dist/descriptors/descriptor-types.d.ts +3 -1
  31. package/dist/descriptors/descriptor-types.d.ts.map +1 -1
  32. package/dist/errors/issues.d.ts +2 -0
  33. package/dist/errors/issues.d.ts.map +1 -1
  34. package/dist/errors/issues.js.map +1 -1
  35. package/dist/graphs/build-graph-directory.d.ts +28 -0
  36. package/dist/graphs/build-graph-directory.d.ts.map +1 -0
  37. package/dist/graphs/build-graph-directory.js +253 -0
  38. package/dist/graphs/build-graph-directory.js.map +1 -0
  39. package/dist/graphs/build-graph-document.d.ts +13 -0
  40. package/dist/graphs/build-graph-document.d.ts.map +1 -0
  41. package/dist/graphs/build-graph-document.js +888 -0
  42. package/dist/graphs/build-graph-document.js.map +1 -0
  43. package/dist/graphs/fallback-graph-capabilities.d.ts +16 -0
  44. package/dist/graphs/fallback-graph-capabilities.d.ts.map +1 -0
  45. package/dist/graphs/fallback-graph-capabilities.js +376 -0
  46. package/dist/graphs/fallback-graph-capabilities.js.map +1 -0
  47. package/dist/graphs/index.d.ts +9 -0
  48. package/dist/graphs/index.d.ts.map +1 -0
  49. package/dist/graphs/index.js +8 -0
  50. package/dist/graphs/index.js.map +1 -0
  51. package/dist/graphs/infer-graph-descriptor.d.ts +17 -0
  52. package/dist/graphs/infer-graph-descriptor.d.ts.map +1 -0
  53. package/dist/graphs/infer-graph-descriptor.js +234 -0
  54. package/dist/graphs/infer-graph-descriptor.js.map +1 -0
  55. package/dist/graphs/load-graph-descriptor.d.ts +31 -0
  56. package/dist/graphs/load-graph-descriptor.d.ts.map +1 -0
  57. package/dist/graphs/load-graph-descriptor.js +141 -0
  58. package/dist/graphs/load-graph-descriptor.js.map +1 -0
  59. package/dist/graphs/record-access.d.ts +36 -0
  60. package/dist/graphs/record-access.d.ts.map +1 -0
  61. package/dist/graphs/record-access.js +178 -0
  62. package/dist/graphs/record-access.js.map +1 -0
  63. package/dist/graphs/types.d.ts +70 -0
  64. package/dist/graphs/types.d.ts.map +1 -0
  65. package/dist/graphs/types.js +17 -0
  66. package/dist/graphs/types.js.map +1 -0
  67. package/dist/graphs/validate-graph-metadata.d.ts +36 -0
  68. package/dist/graphs/validate-graph-metadata.d.ts.map +1 -0
  69. package/dist/graphs/validate-graph-metadata.js +71 -0
  70. package/dist/graphs/validate-graph-metadata.js.map +1 -0
  71. package/dist/index.d.ts +1 -0
  72. package/dist/index.d.ts.map +1 -1
  73. package/dist/index.js +1 -0
  74. package/dist/index.js.map +1 -1
  75. package/dist/retrieval/fetch-list.d.ts.map +1 -1
  76. package/dist/retrieval/fetch-list.js +3 -1
  77. package/dist/retrieval/fetch-list.js.map +1 -1
  78. package/dist/retrieval/resolve-fields.d.ts.map +1 -1
  79. package/dist/retrieval/resolve-fields.js +7 -1
  80. package/dist/retrieval/resolve-fields.js.map +1 -1
  81. package/dist/retrieval/resolve-list-analytics.d.ts +2 -2
  82. package/dist/retrieval/resolve-list-analytics.d.ts.map +1 -1
  83. package/dist/retrieval/resolve-list-analytics.js.map +1 -1
  84. package/dist/retrieval/resolve-property-source.d.ts.map +1 -1
  85. package/dist/retrieval/resolve-property-source.js +10 -3
  86. package/dist/retrieval/resolve-property-source.js.map +1 -1
  87. package/dist/seeds/default-seed-spec.d.ts.map +1 -1
  88. package/dist/seeds/default-seed-spec.js +25 -1
  89. package/dist/seeds/default-seed-spec.js.map +1 -1
  90. package/dist/tests/catalox-adapter-scope.test.d.ts +2 -0
  91. package/dist/tests/catalox-adapter-scope.test.d.ts.map +1 -0
  92. package/dist/tests/catalox-adapter-scope.test.js +26 -0
  93. package/dist/tests/catalox-adapter-scope.test.js.map +1 -0
  94. package/dist/tests/fetch-list.test.js +28 -0
  95. package/dist/tests/fetch-list.test.js.map +1 -1
  96. package/dist/tests/graphs.test.d.ts +2 -0
  97. package/dist/tests/graphs.test.d.ts.map +1 -0
  98. package/dist/tests/graphs.test.js +423 -0
  99. package/dist/tests/graphs.test.js.map +1 -0
  100. package/dist/tests/identity.test.js +13 -1
  101. package/dist/tests/identity.test.js.map +1 -1
  102. package/dist/tests/infer-graph.test.d.ts +2 -0
  103. package/dist/tests/infer-graph.test.d.ts.map +1 -0
  104. package/dist/tests/infer-graph.test.js +19 -0
  105. package/dist/tests/infer-graph.test.js.map +1 -0
  106. package/dist/tests/resolve-filters.test.js +8 -0
  107. package/dist/tests/resolve-filters.test.js.map +1 -1
  108. package/dist/tests/seed-manifest.test.js +3 -0
  109. package/dist/tests/seed-manifest.test.js.map +1 -1
  110. package/dist/tests/validate-graph-metadata.test.d.ts +2 -0
  111. package/dist/tests/validate-graph-metadata.test.d.ts.map +1 -0
  112. package/dist/tests/validate-graph-metadata.test.js +81 -0
  113. package/dist/tests/validate-graph-metadata.test.js.map +1 -0
  114. package/package.json +13 -2
@@ -82,6 +82,32 @@
82
82
  "item": true,
83
83
  "valueType": "array"
84
84
  },
85
+ "subnetCidr": {
86
+ "label": "Subnet CIDR",
87
+ "source": {
88
+ "contentType": "snapshots",
89
+ "path": "data.subnetCidrs.0"
90
+ },
91
+ "humanReadable": true,
92
+ "sortable": true,
93
+ "filterable": true,
94
+ "list": true,
95
+ "item": true,
96
+ "valueType": "string"
97
+ },
98
+ "subnetIp": {
99
+ "label": "Subnet IP",
100
+ "source": {
101
+ "contentType": "snapshots",
102
+ "path": "data.subnets.0.networkAddress"
103
+ },
104
+ "humanReadable": true,
105
+ "sortable": true,
106
+ "filterable": true,
107
+ "list": true,
108
+ "item": true,
109
+ "valueType": "string"
110
+ },
85
111
  "subnets": {
86
112
  "label": "Resolved Subnets",
87
113
  "source": {
@@ -438,6 +464,46 @@
438
464
  "list": true,
439
465
  "item": true,
440
466
  "valueType": "number"
467
+ },
468
+ "impactDecisionLabel": {
469
+ "label": "Impact Decision",
470
+ "source": { "contentType": "decisions", "path": "data.impactDecision.decision" },
471
+ "humanReadable": true,
472
+ "sortable": true,
473
+ "filterable": true,
474
+ "list": true,
475
+ "item": true,
476
+ "valueType": "string"
477
+ },
478
+ "impactDecisionStatus": {
479
+ "label": "Impact Decision Status",
480
+ "source": { "contentType": "decisions", "path": "data.impactDecision.status" },
481
+ "humanReadable": true,
482
+ "sortable": true,
483
+ "filterable": true,
484
+ "list": true,
485
+ "item": true,
486
+ "valueType": "string"
487
+ },
488
+ "impactDecisionRiskScore": {
489
+ "label": "Impact Decision Score",
490
+ "source": { "contentType": "decisions", "path": "data.impactDecision.riskScore" },
491
+ "humanReadable": true,
492
+ "sortable": true,
493
+ "filterable": true,
494
+ "list": true,
495
+ "item": true,
496
+ "valueType": "number"
497
+ },
498
+ "impactDecisionUrgencyScore": {
499
+ "label": "Impact Urgency Score",
500
+ "source": { "contentType": "decisions", "path": "data.impactDecision.urgencyScore" },
501
+ "humanReadable": true,
502
+ "sortable": true,
503
+ "filterable": true,
504
+ "list": true,
505
+ "item": true,
506
+ "valueType": "number"
441
507
  }
442
508
  },
443
509
  "associatedProperties": [
@@ -768,5 +834,105 @@
768
834
  "cveId"
769
835
  ]
770
836
  }
837
+ },
838
+ "graph": {
839
+ "node": {
840
+ "kind": "ipAddress",
841
+ "directoryFields": ["ipAddress", "hostType", "zones"],
842
+ "contentLenses": ["snapshot", "analysis", "decisions"],
843
+ "ui": { "icon": "server" }
844
+ },
845
+ "edgeTemplates": [
846
+ {
847
+ "id": "asset-topology-associated",
848
+ "source": { "kind": "associatedArray", "key": "associatedTopology" },
849
+ "edges": [
850
+ {
851
+ "type": "containedIn",
852
+ "from": { "source": "concept" },
853
+ "to": { "source": "itemField", "field": "cidr", "kind": "cidr" },
854
+ "toObjectType": "subnets",
855
+ "toKind": "cidr",
856
+ "when": { "itemFieldExists": "cidr" }
857
+ },
858
+ {
859
+ "type": "inZone",
860
+ "from": { "source": "itemField", "field": "cidr", "kind": "cidr" },
861
+ "to": { "source": "itemField", "field": "zone", "kind": "zoneName" },
862
+ "toObjectType": "topology-zones",
863
+ "toKind": "zoneName",
864
+ "when": { "itemFieldExists": "zone" }
865
+ },
866
+ {
867
+ "type": "reachableFrom",
868
+ "from": { "source": "itemArrayField", "field": "reachableFromZones", "kind": "zoneName" },
869
+ "to": { "source": "itemField", "field": "zone", "kind": "zoneName" },
870
+ "toObjectType": "topology-zones",
871
+ "toKind": "zoneName",
872
+ "when": { "itemFieldExists": "zone" }
873
+ },
874
+ {
875
+ "type": "pathBridge",
876
+ "from": { "source": "literal", "kind": "zoneName", "value": "OUTSIDE" },
877
+ "to": { "source": "itemField", "field": "zone", "kind": "zoneName" },
878
+ "toObjectType": "topology-zones",
879
+ "toKind": "zoneName",
880
+ "synthesizePath": { "titleTemplate": "{from} → {to}" },
881
+ "when": {
882
+ "itemFieldExists": "zone",
883
+ "itemArrayIncludes": { "field": "reachableFromZones", "value": "OUTSIDE" }
884
+ }
885
+ },
886
+ {
887
+ "type": "observedInZone",
888
+ "from": { "source": "concept" },
889
+ "to": { "source": "itemField", "field": "zone", "kind": "zoneName" },
890
+ "toObjectType": "topology-zones",
891
+ "toKind": "zoneName",
892
+ "when": { "itemFieldExists": "zone", "itemFieldMissing": "cidr" }
893
+ }
894
+ ]
895
+ },
896
+ {
897
+ "id": "asset-vulnerabilities-by-ip",
898
+ "source": {
899
+ "kind": "queryByField",
900
+ "objectType": "vulnerabilities",
901
+ "sourcePath": "data.assetIp",
902
+ "targetPath": "data.assetIp",
903
+ "limit": 50
904
+ },
905
+ "edges": [
906
+ {
907
+ "type": "affectsAsset",
908
+ "from": { "source": "relatedConcept" },
909
+ "to": { "source": "concept" },
910
+ "toObjectType": "vulnerabilities",
911
+ "toKind": "hostVulnerability",
912
+ "neighbor": "from"
913
+ }
914
+ ]
915
+ },
916
+ {
917
+ "id": "asset-subnets-by-cidr",
918
+ "source": {
919
+ "kind": "queryByField",
920
+ "objectType": "subnets",
921
+ "sourcePath": "data.subnetCidrs",
922
+ "targetPath": "data.cidr",
923
+ "limit": 20
924
+ },
925
+ "edges": [
926
+ {
927
+ "type": "containedIn",
928
+ "from": { "source": "concept" },
929
+ "to": { "source": "relatedConcept" },
930
+ "toObjectType": "subnets",
931
+ "toKind": "cidr",
932
+ "neighbor": "to"
933
+ }
934
+ ]
935
+ }
936
+ ]
771
937
  }
772
938
  }
@@ -535,6 +535,7 @@
535
535
  "inputKind": "cidr",
536
536
  "outputKind": "cidr-path-facts",
537
537
  "writeToInsights": false,
538
+ "writeToRootProperty": "possiblePaths",
538
539
  "sources": {
539
540
  "topologyDb": "memorix-knowledge",
540
541
  "topologyCollection": "topology-raw"
@@ -558,5 +559,118 @@
558
559
  ]
559
560
  }
560
561
  },
561
- "relations": {}
562
+ "relations": {
563
+ "subnetAssets": {
564
+ "targetEntity": "assets",
565
+ "type": "oneToMany",
566
+ "source": {
567
+ "contentType": "snapshots",
568
+ "path": "data.cidr"
569
+ },
570
+ "target": {
571
+ "contentType": "snapshots",
572
+ "path": "data.subnetCidrs"
573
+ },
574
+ "defaultMode": "array",
575
+ "defaultArrayProperty": "associatedAssetsSnapshots",
576
+ "targetFields": [
577
+ "ipAddress",
578
+ "hostName",
579
+ "hostType",
580
+ "zones"
581
+ ]
582
+ },
583
+ "subnetZone": {
584
+ "targetEntity": "topology-zones",
585
+ "type": "manyToOne",
586
+ "source": {
587
+ "contentType": "snapshots",
588
+ "path": "data.zone"
589
+ },
590
+ "target": {
591
+ "contentType": "snapshots",
592
+ "path": "data.name"
593
+ },
594
+ "defaultMode": "array",
595
+ "defaultArrayProperty": "associatedTopologyZonesSnapshots",
596
+ "targetFields": [
597
+ "name",
598
+ "zoneClass"
599
+ ]
600
+ }
601
+ },
602
+ "narratives": {
603
+ "has-assets": {
604
+ "label": "Has assets",
605
+ "displayName": "Has assets",
606
+ "description": "Subnet has one or more associated asset snapshots (associatedAssetsSnapshots).",
607
+ "kind": "having-signal",
608
+ "visibility": "user",
609
+ "sourceRef": "associatedAssetsSnapshots",
610
+ "targetEntity": "assets"
611
+ },
612
+ "has-possible-paths": {
613
+ "label": "Has possible paths",
614
+ "displayName": "Has possible paths",
615
+ "description": "Subnet snapshot has non-empty possiblePaths root property (topology path facts).",
616
+ "kind": "having-signal",
617
+ "visibility": "user",
618
+ "sourceRef": "possiblePaths"
619
+ }
620
+ },
621
+ "graph": {
622
+ "node": {
623
+ "kind": "cidr",
624
+ "directoryFields": ["cidr", "zone"],
625
+ "contentLenses": ["snapshot", "analysis"],
626
+ "ui": { "icon": "network" }
627
+ },
628
+ "edgeTemplates": [
629
+ {
630
+ "id": "subnet-zone-topology",
631
+ "source": {
632
+ "kind": "queryByField",
633
+ "objectType": "topology-zones",
634
+ "sourcePath": "data.zone",
635
+ "targetPath": "data.name",
636
+ "limit": 5
637
+ },
638
+ "edges": [
639
+ {
640
+ "type": "inZone",
641
+ "from": { "source": "concept" },
642
+ "to": { "source": "relatedConcept" },
643
+ "toObjectType": "topology-zones",
644
+ "toKind": "zoneName",
645
+ "neighbor": "to"
646
+ }
647
+ ]
648
+ },
649
+ {
650
+ "id": "subnet-assets-by-cidr",
651
+ "source": {
652
+ "kind": "queryByField",
653
+ "objectType": "assets",
654
+ "sourcePath": "data.cidr",
655
+ "targetPath": "data.subnetCidrs",
656
+ "limit": 50
657
+ },
658
+ "edges": [
659
+ {
660
+ "type": "containedIn",
661
+ "from": { "source": "relatedConcept" },
662
+ "to": { "source": "concept" },
663
+ "toObjectType": "assets",
664
+ "toKind": "ipAddress",
665
+ "neighbor": "from"
666
+ }
667
+ ]
668
+ },
669
+ {
670
+ "id": "subnet-path-facts",
671
+ "source": { "kind": "pathFacts", "key": "possiblePaths" },
672
+ "edges": []
673
+ }
674
+ ]
675
+ }
562
676
  }
@@ -81,5 +81,56 @@
81
81
  },
82
82
  "associatedProperties": [],
83
83
  "processing": {},
84
- "relations": {}
84
+ "relations": {
85
+ "zoneSubnets": {
86
+ "targetEntity": "subnets",
87
+ "type": "oneToMany",
88
+ "source": {
89
+ "contentType": "snapshots",
90
+ "path": "data.name"
91
+ },
92
+ "target": {
93
+ "contentType": "snapshots",
94
+ "path": "data.zone"
95
+ },
96
+ "defaultMode": "array",
97
+ "defaultArrayProperty": "associatedSubnetsSnapshots",
98
+ "targetFields": [
99
+ "cidr",
100
+ "networkAddress",
101
+ "zone",
102
+ "vr"
103
+ ]
104
+ }
105
+ },
106
+ "graph": {
107
+ "node": {
108
+ "kind": "zoneName",
109
+ "directoryFields": ["name"],
110
+ "contentLenses": ["snapshot", "analysis"],
111
+ "ui": { "icon": "shield" }
112
+ },
113
+ "edgeTemplates": [
114
+ {
115
+ "id": "zone-subnets-by-name",
116
+ "source": {
117
+ "kind": "queryByField",
118
+ "objectType": "subnets",
119
+ "sourcePath": "data.name",
120
+ "targetPath": "data.zone",
121
+ "limit": 50
122
+ },
123
+ "edges": [
124
+ {
125
+ "type": "inZone",
126
+ "from": { "source": "relatedConcept" },
127
+ "to": { "source": "concept" },
128
+ "toObjectType": "subnets",
129
+ "toKind": "cidr",
130
+ "neighbor": "from"
131
+ }
132
+ ]
133
+ }
134
+ ]
135
+ }
85
136
  }
@@ -306,8 +306,8 @@
306
306
  "analysisImpact": {
307
307
  "label": "Impact",
308
308
  "source": { "contentType": "analysis", "path": "data.impact" },
309
- "humanReadable": false,
310
- "list": false,
309
+ "humanReadable": true,
310
+ "list": true,
311
311
  "item": true,
312
312
  "valueType": "object"
313
313
  },
@@ -393,5 +393,13 @@
393
393
  "pluginName"
394
394
  ]
395
395
  }
396
+ },
397
+ "graph": {
398
+ "node": {
399
+ "kind": "pluginId",
400
+ "directoryFields": ["name", "severity", "pluginId", "cveId"],
401
+ "contentLenses": ["snapshot", "analysis"],
402
+ "ui": { "icon": "bug" }
403
+ }
396
404
  }
397
405
  }
@@ -442,8 +442,8 @@
442
442
  "analysisImpact": {
443
443
  "label": "Impact",
444
444
  "source": { "contentType": "analysis", "path": "data.impact" },
445
- "humanReadable": false,
446
- "list": false,
445
+ "humanReadable": true,
446
+ "list": true,
447
447
  "item": true,
448
448
  "valueType": "object"
449
449
  },
@@ -475,6 +475,8 @@
475
475
  "label": "Exploitability Level (analysis)",
476
476
  "source": { "contentType": "analysis", "path": "data.exploitability.exploitability" },
477
477
  "humanReadable": true,
478
+ "sortable": true,
479
+ "filterable": true,
478
480
  "list": true,
479
481
  "item": true,
480
482
  "valueType": "string"
@@ -653,11 +655,11 @@
653
655
  "direction": "parentToChild",
654
656
  "source": {
655
657
  "contentType": "snapshots",
656
- "path": "data.assetIp"
658
+ "path": "data.assetIps"
657
659
  },
658
660
  "target": {
659
661
  "contentType": "snapshots",
660
- "path": "data.assetIps"
662
+ "path": "data.assetIp"
661
663
  }
662
664
  }
663
665
  ],
@@ -719,14 +721,14 @@
719
721
  "displayName": "Vulnerability",
720
722
  "description": "Security-impacting scanner result (severity low/medium/high/critical).",
721
723
  "kind": "product-narrative",
722
- "visibility": "user"
724
+ "visibility": "internal"
723
725
  },
724
726
  "is-finding": {
725
727
  "label": "Is finding",
726
728
  "displayName": "Informational finding",
727
729
  "description": "Informational scanner result (severity none/unknown).",
728
730
  "kind": "product-narrative",
729
- "visibility": "user"
731
+ "visibility": "internal"
730
732
  },
731
733
  "has-analysis": {
732
734
  "label": "Has analysis",
@@ -762,7 +764,7 @@
762
764
  "label": "Has triage decision",
763
765
  "displayName": "Triaged",
764
766
  "kind": "rollup",
765
- "visibility": "user"
767
+ "visibility": "internal"
766
768
  },
767
769
  "has-breach-vector": {
768
770
  "label": "Breach vector",
@@ -856,5 +858,75 @@
856
858
  "vulnerability_family"
857
859
  ]
858
860
  }
861
+ },
862
+ "graph": {
863
+ "node": {
864
+ "kind": "hostVulnerability",
865
+ "directoryFields": ["assetIp", "severity", "vulnerabilityName"],
866
+ "contentLenses": ["snapshot", "discovery", "analysis", "decisions"],
867
+ "ui": { "icon": "alert-triangle" }
868
+ },
869
+ "edgeTemplates": [
870
+ {
871
+ "id": "vuln-affected-asset",
872
+ "source": {
873
+ "kind": "queryByField",
874
+ "objectType": "assets",
875
+ "sourcePath": "data.assetIp",
876
+ "targetPath": "data.assetIps",
877
+ "limit": 5
878
+ },
879
+ "edges": [
880
+ {
881
+ "type": "affectsAsset",
882
+ "from": { "source": "concept" },
883
+ "to": { "source": "relatedConcept" },
884
+ "toObjectType": "assets",
885
+ "toKind": "ipAddress",
886
+ "neighbor": "to"
887
+ }
888
+ ]
889
+ },
890
+ {
891
+ "id": "vuln-in-group",
892
+ "source": {
893
+ "kind": "queryByField",
894
+ "objectType": "vulnerabilities-groups",
895
+ "sourcePath": "data.vulnerabilityName",
896
+ "targetPath": "data.name",
897
+ "limit": 5
898
+ },
899
+ "edges": [
900
+ {
901
+ "type": "inGroup",
902
+ "from": { "source": "concept" },
903
+ "to": { "source": "relatedConcept" },
904
+ "toObjectType": "vulnerabilities-groups",
905
+ "toKind": "pluginId",
906
+ "neighbor": "to"
907
+ }
908
+ ]
909
+ },
910
+ {
911
+ "id": "vuln-group-by-plugin",
912
+ "source": {
913
+ "kind": "queryByField",
914
+ "objectType": "vulnerabilities-groups",
915
+ "sourcePath": "data.pluginId",
916
+ "targetPath": "data.pluginId",
917
+ "limit": 5
918
+ },
919
+ "edges": [
920
+ {
921
+ "type": "inGroup",
922
+ "from": { "source": "concept" },
923
+ "to": { "source": "relatedConcept" },
924
+ "toObjectType": "vulnerabilities-groups",
925
+ "toKind": "pluginId",
926
+ "neighbor": "to"
927
+ }
928
+ ]
929
+ }
930
+ ]
859
931
  }
860
932
  }
@@ -0,0 +1,41 @@
1
+ {
2
+ "id": "asset-subnet-paths-graph",
3
+ "title": "Asset → subnet → paths",
4
+ "focusObjectType": "assets",
5
+ "maxDepth": 3,
6
+ "includeEdgeTemplates": [
7
+ "asset-subnets-by-cidr",
8
+ "asset-topology-associated",
9
+ "subnet-zone-topology",
10
+ "subnet-assets-by-cidr",
11
+ "subnet-path-facts",
12
+ "zone-subnets-by-name"
13
+ ],
14
+ "tiers": [
15
+ {
16
+ "id": "topology",
17
+ "label": "Topology",
18
+ "objectTypes": ["assets", "subnets", "topology-zones"]
19
+ }
20
+ ],
21
+ "nodes": [
22
+ { "objectType": "assets", "tier": "topology" },
23
+ { "objectType": "subnets", "tier": "topology" },
24
+ { "objectType": "topology-zones", "tier": "topology" }
25
+ ],
26
+ "directory": {
27
+ "defaultObjectTypes": ["assets", "subnets", "topology-zones"],
28
+ "searchFields": ["title", "identifierKey"],
29
+ "narrativeFiltersByObjectType": {
30
+ "subnets": [
31
+ { "key": "has-assets", "label": "Has assets" },
32
+ { "key": "has-possible-paths", "label": "Has possible paths" }
33
+ ]
34
+ }
35
+ },
36
+ "ui": {
37
+ "icon": "network",
38
+ "group": "network",
39
+ "order": 30
40
+ }
41
+ }
@@ -0,0 +1,81 @@
1
+ {
2
+ "id": "asset-topology-vulnerabilities-graph",
3
+ "title": "Asset topology & vulnerabilities",
4
+ "focusObjectType": "assets",
5
+ "maxDepth": 3,
6
+ "includeEdgeTemplates": [
7
+ "asset-topology-associated",
8
+ "asset-subnets-by-cidr",
9
+ "asset-vulnerabilities-by-ip",
10
+ "vuln-affected-asset",
11
+ "vuln-in-group",
12
+ "vuln-group-by-plugin",
13
+ "subnet-zone-topology",
14
+ "subnet-assets-by-cidr",
15
+ "subnet-path-facts",
16
+ "zone-subnets-by-name"
17
+ ],
18
+ "tiers": [
19
+ {
20
+ "id": "topology",
21
+ "label": "Topology",
22
+ "objectTypes": ["assets", "subnets", "topology-zones"]
23
+ },
24
+ {
25
+ "id": "vulnerabilities",
26
+ "label": "Vulnerabilities",
27
+ "objectTypes": ["vulnerabilities", "vulnerabilities-groups"]
28
+ }
29
+ ],
30
+ "nodes": [
31
+ { "objectType": "assets", "tier": "topology" },
32
+ { "objectType": "subnets", "tier": "topology" },
33
+ { "objectType": "topology-zones", "tier": "topology" },
34
+ { "objectType": "vulnerabilities-groups", "tier": "vulnerabilities" },
35
+ { "objectType": "vulnerabilities", "tier": "vulnerabilities" }
36
+ ],
37
+ "directory": {
38
+ "defaultObjectTypes": [
39
+ "assets",
40
+ "subnets",
41
+ "topology-zones",
42
+ "vulnerabilities",
43
+ "vulnerabilities-groups"
44
+ ],
45
+ "searchFields": ["title", "identifierKey"],
46
+ "narrativeFiltersByObjectType": {
47
+ "assets": [
48
+ { "key": "has-vulnerabilities", "label": "Has vulnerabilities" },
49
+ { "key": "has-no-vulnerabilities", "label": "No vulnerabilities" },
50
+ { "key": "is-triaged", "label": "Is triaged" },
51
+ { "key": "has-lateral-movement-risk", "label": "Lateral movement risk" },
52
+ { "key": "has-critical-predicted-impact", "label": "Critical predicted impact" },
53
+ { "key": "has-high-or-critical-exploitability", "label": "High or critical exploitability" }
54
+ ],
55
+ "vulnerabilities": [
56
+ { "key": "has-critical-severity", "label": "Critical severity" },
57
+ { "key": "has-high-severity", "label": "High severity" },
58
+ { "key": "has-medium-severity", "label": "Medium severity" },
59
+ { "key": "has-breach-vector", "label": "Breach vector" }
60
+ ],
61
+ "vulnerabilities-groups": [
62
+ { "key": "has-critical-severity", "label": "Critical severity" },
63
+ { "key": "has-high-severity", "label": "High severity" },
64
+ { "key": "has-medium-severity", "label": "Medium severity" },
65
+ { "key": "has-low-severity", "label": "Low severity" }
66
+ ],
67
+ "subnets": [
68
+ { "key": "has-assets", "label": "Has assets" },
69
+ { "key": "has-possible-paths", "label": "Has possible paths" }
70
+ ],
71
+ "topology-zones": [
72
+ { "key": "has-analysis", "label": "Has analysis" }
73
+ ]
74
+ }
75
+ },
76
+ "ui": {
77
+ "icon": "network",
78
+ "group": "network",
79
+ "order": 10
80
+ }
81
+ }