diff --git a/.gitignore b/.gitignore index 172ea8bf..979f6282 100644 --- a/.gitignore +++ b/.gitignore @@ -104,8 +104,7 @@ instance/ # Scrapy stuff: .scrapy -# Sphinx documentation -docs/_build/ +/docs/_build/doctrees/ # PyBuilder .pybuilder/ diff --git a/api/package-lock.json b/api/package-lock.json index c44922b3..3231bb79 100644 --- a/api/package-lock.json +++ b/api/package-lock.json @@ -2408,9 +2408,9 @@ } }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "license": "MIT", "dependencies": { diff --git a/client/src/app/pages/import-processing/tenable-import/tenableVulnerabilities.component.ts b/client/src/app/pages/import-processing/tenable-import/tenableVulnerabilities.component.ts index 09aa05a4..4b162188 100644 --- a/client/src/app/pages/import-processing/tenable-import/tenableVulnerabilities.component.ts +++ b/client/src/app/pages/import-processing/tenable-import/tenableVulnerabilities.component.ts @@ -37,7 +37,7 @@ interface CustomFilter { interface AssetsFilter { filterName: string; operator: string; - value: string | string[] | { id: string }[]; + value: any; } interface AccordionItem { header: string; @@ -1321,26 +1321,35 @@ export class TenableVulnerabilitiesComponent implements OnInit, OnDestroy { return addressRegex.test(ip); } - createAssetsFilter(value: any): AssetsFilter | null { - if (value && value.length > 0) { - let formattedValue: any = { id: value[0] }; - for (let i = 1; i < value.length; i++) { - formattedValue = { - operator: 'intersection', - operand1: formattedValue, - operand2: { - id: value[i], - }, - }; - } - - return { - filterName: 'asset', - operator: '~', - value: formattedValue, - }; - } - return null; + createAssetsFilter(value: any): AssetsFilter | null { + if (!value || value.length === 0) { + return null; + } + + if (value.length === 1) { + return { + filterName: 'asset', + operator: '=', + value: { id: value[0] } + }; + } + + let formattedValue: any = { id: value[0] }; + for (let i = 1; i < value.length; i++) { + formattedValue = { + operator: 'union', + operand1: formattedValue, + operand2: { + id: value[i], + }, + }; + } + + return { + filterName: 'asset', + operator: '~', + value: formattedValue, + }; } createAssetExposureScoreFilter(value: any): CustomFilter | null { @@ -2220,7 +2229,6 @@ export class TenableVulnerabilitiesComponent implements OnInit, OnDestroy { } loadVulnList() { - this.clearFilters(false); this.tenableTool = 'listvuln'; this.loadVulnerabilitiesLazy({ first: 0, rows: this.rows }); this.expandColumnSelections(); diff --git a/client/src/app/pages/poam-processing/poam-details/poam-details.component.html b/client/src/app/pages/poam-processing/poam-details/poam-details.component.html index 78634157..36de2b72 100644 --- a/client/src/app/pages/poam-processing/poam-details/poam-details.component.html +++ b/client/src/app/pages/poam-processing/poam-details/poam-details.component.html @@ -368,7 +368,6 @@
-
diff --git a/client/src/app/pages/poam-processing/poam-details/poam-details.component.ts b/client/src/app/pages/poam-processing/poam-details/poam-details.component.ts index e873af85..e0858445 100644 --- a/client/src/app/pages/poam-processing/poam-details/poam-details.component.ts +++ b/client/src/app/pages/poam-processing/poam-details/poam-details.component.ts @@ -623,9 +623,9 @@ ${this.pluginData.description ?? ''}`, this.poam.vulnerabilityId = this.stateData.vulnerabilityId; this.poam.rawSeverity = this.stateData.severity; this.poam.stigCheckData = this.stateData.ruleData; - const benchmarkId = this.stateData.benchmarkId; + this.poam.stigBenchmarkId = this.stateData.benchmarkId; const selectedStig = this.stigmanSTIGs.find( - (stig: any) => stig.benchmarkId === benchmarkId, + (stig: any) => stig.benchmarkId === this.poam.stigBenchmarkId, ); if (selectedStig) { this.selectedStigObject = selectedStig; @@ -633,8 +633,7 @@ ${this.pluginData.description ?? ''}`, this.poam.vulnerabilityName = selectedStig.title; this.onStigSelected(selectedStig); } else { - this.poam.stigBenchmarkId = benchmarkId; - this.poam.vulnerabilityName = benchmarkId; + this.poam.vulnerabilityName = this.poam.stigBenchmarkId; } }, }); @@ -1062,19 +1061,19 @@ ${this.pluginData.description ?? ''}`, } } - onStigSelected(event: any) { + onStigSelected(event: any) { let selectedStig; if (typeof event === 'string') { selectedStig = this.stigmanSTIGs.find( (stig: any) => stig.title === event, - ); + ); } else { - selectedStig = event.value; + selectedStig = event; } - if (selectedStig) { this.selectedStigTitle = selectedStig.title; this.selectedStigBenchmarkId = selectedStig.benchmarkId; + this.poam.stigBenchmarkId = this.selectedStigBenchmarkId; this.poam.vulnerabilityTitle = (() => { const [version, release] = selectedStig.lastRevisionStr?.match(/\d+/g) || []; @@ -1085,7 +1084,6 @@ ${this.pluginData.description ?? ''}`, return `${selectedStig.title} :: ${formattedRevision} Benchmark Date: ${selectedStig.lastRevisionDate}`; })(); - this.poam.stigBenchmarkId = selectedStig.benchmarkId; } } diff --git a/docs/_build/.gitignore b/docs/_build/.gitignore new file mode 100644 index 00000000..934815e7 --- /dev/null +++ b/docs/_build/.gitignore @@ -0,0 +1,6 @@ +# Ignore everything +* + +# Except +!html +!.gitignore \ No newline at end of file diff --git a/docs/build.sh b/docs/build.sh new file mode 100644 index 00000000..74209f1c --- /dev/null +++ b/docs/build.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +SPHINX_IMAGE_W_REQUIREMENTS=sphinx-w-requirements + +# Change to this script directory +cd "$(dirname "$(realpath "$0")")" + +# Create _build if it doesn't exist +mkdir -p _build + +# Clean up _build +find _build -type f -not -name '.gitignore' -delete +find _build -type d -empty -delete + +docker build -t $SPHINX_IMAGE_W_REQUIREMENTS . + +docker run --rm -v $(pwd):/docs $SPHINX_IMAGE_W_REQUIREMENTS \ No newline at end of file diff --git a/docs/source/install/documentation.rst b/docs/source/install/documentation.rst new file mode 100644 index 00000000..e2c421ca --- /dev/null +++ b/docs/source/install/documentation.rst @@ -0,0 +1,30 @@ + +.. _documentation: + +Documentation +######################################## + +Build with Docker +^^^^^^^^^^^^^^^^^^ + +#. Clone the C-PAT repository from GitHub. +#. Navigate to /docs folder of the repository. +#. Build the Docker image using the following command: ``docker build -t sphinx-w-requirements .`` +#. Run the Docker image using the following command: ``docker run --rm -v "$(pwd):/docs" sphinx-w-requirements`` +#. The build product is located in ``_build`` in the docs directory. + +Alternatively, you can run the ``build.sh`` script located in the /docs directory of the repository. This script will build the Docker image and run the container, generating the documentation. + +Build with Python +^^^^^^^^^^^^^^^^^^ + +To build the documentation locally: + +#. Clone the C-PAT repository from GitHub. +#. Install Python +#. Install Sphinx ``pip install sphinx`` +#. Navigate to /docs folder of the repository. +#. Install the documentation build requirements ``pip install -r requirements.txt`` +#. Depending on the OS you are using, build the documentation using make.bat or the Makefile, and specify html as the format. Windows PowerShell example: ``./make html`` + +By default, the build product is located in ``_build`` in the docs directory. \ No newline at end of file diff --git a/docs/source/install/index.rst b/docs/source/install/index.rst index fd6772d0..e1741592 100644 --- a/docs/source/install/index.rst +++ b/docs/source/install/index.rst @@ -24,4 +24,5 @@ These pages describe how to setup and deploy C-PAT environment-variables securing integrations + documentation diff --git a/docs/source/install/integrations.rst b/docs/source/install/integrations.rst index 0d59f44e..8fe47708 100644 --- a/docs/source/install/integrations.rst +++ b/docs/source/install/integrations.rst @@ -38,7 +38,7 @@ STIG Manager Tenable ------- +-------- .. list-table:: Tenable Environmenment Variables: :widths: 20 25 55 diff --git a/docs/source/install/reverse-proxy.rst b/docs/source/install/reverse-proxy.rst index 63f32ac4..dd356b8f 100644 --- a/docs/source/install/reverse-proxy.rst +++ b/docs/source/install/reverse-proxy.rst @@ -7,7 +7,7 @@ Deploy with TLS Configure a Reverse Proxy or Kubernetes Ingress Controller -======================== +========================================================== To support HTTPS connections, C-PAT components should be situated behind a reverse proxy or in a Kubernetes cluster. Configure the reverse proxy (such as nginx) or the Kubernetes Ingress Controller in accordance with publisher documentation, local security requirements, and Keycloak documentation. In either case, you will have to set Keycloak environment variable `PROXY_ADDRESS_FORWARDING=true` and make sure appropriate headers are forwarded. @@ -15,21 +15,21 @@ In either case, you will have to set Keycloak environment variable `PROXY_ADDRES Nginx for TLS -======================== +============== C-PAT provides two branches on GitHub with sample RMF Tools nginx deployments with a configuration file that may be useful to those setting up a Production deployment of C-PAT and STIG Manager: With CAC Authentication ------------------------------------------- +------------------------ https://github.com/NSWC-Crane/C-PAT/tree/rmftools-orchestration-cac Without CAC Authentication ------------------------------------------- +--------------------------- https://github.com/NSWC-Crane/C-PAT/tree/demo-auth-no-CAC @@ -42,7 +42,7 @@ https://github.com/NSWC-Crane/C-PAT/tree/demo-auth-no-CAC :show_caption: True :title: Component Diagram with Reverse Proxy ---------------------------- +------------------------------------------ .. thumbnail:: /assets/images/k8-component-diagram.svg :width: 50% diff --git a/docs/source/user/assetprocessing.rst b/docs/source/user/assetprocessing.rst index b0a1815a..f26c2e67 100644 --- a/docs/source/user/assetprocessing.rst +++ b/docs/source/user/assetprocessing.rst @@ -1,4 +1,6 @@ + .. _assetprocessing: + Asset Processing ---------------- @@ -6,7 +8,7 @@ The asset processing component is responsible for displaying all assets pertaini Each section contains global functionality to reduce or add columns to the table view and export the asset table data to a .csv file. Local Assets -^^^^^^^^^^^^ +^^^^^^^^^^^^^ When a user is browsing a collection that belongs organically to C-PAT, i.e. the collection was created in C-PAT and not imported from Tenable or STIG Manager, the Asset Processing component will display the local assets view. The local assets view contains a tabset with 2 tabs, Asset Management and Asset Chart. @@ -19,10 +21,10 @@ To modify an asset, a user has two options. Either option will open a pop-up form with the asset's information. The user can modify the asset's information and click "Save" to save the changes. STIG Manager Assets -^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^ The STIG Manager Assets view is displayed when a user is browsing a collection that was imported from STIG Manager. The STIG Manager Assets view contains a single assets table with columns for Asset Name, FQDN, IP Address, MAC Address, Collection Name, and STIG Manager Labels. The table is a display of assets returned from a query to the STIG Manager API at ``/assets?collectionId={collectionId}`` and contains data that is current as of the time that the user opens the Asset Processing component. Tenable Assets -^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^ The Tenable Assets view is displayed when a user is browsing a collection that was imported from Tenable. The Tenable Assets view contains a single assets table with columns for Plugin ID, Name, Family, Severity, VPR, IP Address, ACR, AES, NetBIOS, DNS, MAC Address, Port, Protocol, Agent ID, and Host ID. The table is a display of assets returned from a query to the Tenable API at ``/analysis`` using the ``listvuln`` tool with a filter for ``repository`` to match the collection that the user is currently viewing. The asset data displayed is current as of the time that the user opens the Asset Processing component. \ No newline at end of file diff --git a/docs/source/user/index.rst b/docs/source/user/index.rst index 9178cabe..8ec9bd2a 100644 --- a/docs/source/user/index.rst +++ b/docs/source/user/index.rst @@ -1,5 +1,5 @@ -.. _admin-index: +.. _user-index: User Guide =============================== diff --git a/docs/source/user/labelprocessing.rst b/docs/source/user/labelprocessing.rst index 33f963a6..ac326f0d 100644 --- a/docs/source/user/labelprocessing.rst +++ b/docs/source/user/labelprocessing.rst @@ -1,4 +1,6 @@ + .. _labelprocessing: + Label Processing ---------------- diff --git a/docs/source/user/manage-poams.rst b/docs/source/user/manage-poams.rst index 16964c91..9b7f570d 100644 --- a/docs/source/user/manage-poams.rst +++ b/docs/source/user/manage-poams.rst @@ -1,17 +1,19 @@ + .. _manage-poams: + Manage POAMs ------------ The Manage POAMs component is a compilation of charts, tables, and grids that are ultimately designed to assist a user in quickly and easily identifying the data they want or need to view. The Manage POAMs component is broken down into the following interactive sections: POAM Status Grid (tabset), Main POAM Chart, and the Main POAM Chart expansion table. POAM Main Chart -^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^ The POAM Main Chart contains a single dataset that is seperated into 4 different viewing formats; POAM Status, Severity, Scheduled Completion, and Labels. Each section is filterable via the filter dropdown located below the chart. Filters are available for Status, Severity, Scheduled Completion, Labels, and Vulnerability Source. Multiple filters can be applied. POAM Expanded Grid -^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^ The expanded POAM grid is a table that dynamically reflects the POAMs from the POAM Main Chart. When the main chart is filtered, the resulting data displayed in the expanded grid will also be filtered. In addition to the filters available in the Main Chart, the expanded POAM grid also contains column filters for the following fields: Last Updated, POAM ID, Vulnerability ID, POAM Status, Vulnerability Source, STIG Benchmark, Adjusted Severity, Submitter, Assigned Teams, Submitted Date, and Scheduled Completion Date. @@ -22,7 +24,7 @@ The far right column of the expanded POAM grid contains an icon that will direct POAM's are also exportable from within the expanded grid. The export will contain all POAMs displayed in the grid, formatted into the eMASS excel format. Assigned Grid -^^^^^^^^^^^^^ +^^^^^^^^^^^^^^ The Assigned Grid is a table that displays POAMs segmented into one of four seperate categories; All POAMs, Needs Attention, My POAMs, and Pending Approval. @@ -31,19 +33,19 @@ The Assigned Grid is a table that displays POAMs segmented into one of four sepe All POAMs -""""""""" +"""""""""" The All POAMs tab displays all POAMs that are currently available within the collection. No filtering is conducted on the dataset for the All POAMs tab. Access Level of 1 (Viewer) or greater is required to view this tab. Needs Attention -""""""""""""""" +"""""""""""""""" The Needs Attention tab contains POAMs where the Scheduled Completion Date is less than 30 days and the POAM status is not Draft, Closed, or False Positive. Access Level of 1 (Viewer) or greater is required to view this tab. My POAMs -"""""""" +""""""""" The My POAMs tab displays all POAMs that have been submitted by the user where the POAM status is not Closed. Access Level of 2 (Submitter) or greater is required to view this tab. Pending Approval -"""""""""""""""" +""""""""""""""""" The Pending Approval tab displays all POAMs that are Pending Approval within the current collection [POAM Status of Submitted, Extension Requested, or Pending CAT-I Approval]. Access Level of 3 (Approver) or greater is required to view this tab. diff --git a/docs/source/user/poamcreation.rst b/docs/source/user/poamcreation.rst index 177bef2d..6741fa62 100644 --- a/docs/source/user/poamcreation.rst +++ b/docs/source/user/poamcreation.rst @@ -1,10 +1,11 @@ + .. _poamcreation: POAM Creation ------------- Manual POAM Entry -^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^ While not recommended, POAMs can be created manually: 1. All fields must be entered by the user @@ -31,7 +32,7 @@ When creating a POAM from STIG Manager findings: * Assets cannot be manually added/removed as they are managed by STIG Manager Tenable Integration -^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^ When creating a POAM from Tenable findings: 1. C-PAT automatically populates: @@ -51,7 +52,7 @@ When creating a POAM from Tenable findings: Field Definitions -^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^ POAM Status * Draft - Initial state diff --git a/docs/source/user/poamexporting.rst b/docs/source/user/poamexporting.rst index 93f7c09e..5ef59c4b 100644 --- a/docs/source/user/poamexporting.rst +++ b/docs/source/user/poamexporting.rst @@ -1,7 +1,11 @@ -POAM Exporting + +.. _poamexporting: + +POAM Exporting -------------- C-PAT contains the ability to export into the standard eMASS excel format. Listed below are the applicable field mappings for STIG and ACAS originated POAMs. + .. note:: Draft POAMs are not exported. @@ -139,7 +143,7 @@ Milestone Formatting Milestones are formatted in two distinct sections: Comments (Column J) -~~~~~~~~~~~~~~~~~ +~~~~~~~~~~~~~~~~~~~~ .. code-block:: none @@ -149,7 +153,7 @@ Comments (Column J) Milestone Date: {Milestone Due Date (MM/dd/yyyy)} Changes (Column K) -~~~~~~~~~~~~~~~~ +~~~~~~~~~~~~~~~~~~~ .. code-block:: none diff --git a/docs/source/user/stigman.rst b/docs/source/user/stigman.rst index d02cd04e..64196c91 100644 --- a/docs/source/user/stigman.rst +++ b/docs/source/user/stigman.rst @@ -1,4 +1,6 @@ + .. _stigman: + STIG Manager ------------ diff --git a/docs/source/user/tenable.rst b/docs/source/user/tenable.rst index 5ebabd8a..d70fe0ef 100644 --- a/docs/source/user/tenable.rst +++ b/docs/source/user/tenable.rst @@ -1,3 +1,4 @@ + .. _tenable: Tenable @@ -6,17 +7,17 @@ Tenable The Tenable component is a comprehensive compilation of tools that provides a large majority of functionality contained in Tenable.sc in addition to numerous expanded capabilities. The tenable component is comprised of the Main Vulnerabilities, IAV Vulnerabilities, and Solutions components. Main Vulnerabilities Component -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The Main Vulnerabilities Component will display a table originating from Tenable's Vulnerabilities Summary (API tool ``sumid``) with filters to exclude "Informational" severity and include only items where the vulnerability was observed within the last 30 days by default. Default Display -""""""""""""" +"""""""""""""""" When the Vulnerability Summary view is selected, the component will display columns for the following fields: ``POAM`` ``Plugin ID`` ``Name`` ``Family`` ``Severity`` ``VPR`` ``IAV`` ``Navy Comply Date`` ``Total`` ``Host Total`` Predefined Filters -"""""""""""""""" +""""""""""""""""""" To access the filter menu, a filter button is available to the top left of the table. At the top of the filter panel, a dropdown has been provided with several pre-made filters: .. list-table:: Tenable Predefined Filters @@ -71,7 +72,7 @@ To access the filter menu, a filter button is available to the top left of the t | severity = [1, 2, 3, 4] Additional Filters -"""""""""""""""" +""""""""""""""""""" Additional filters are available for the following items inside of the main filter panel: ``ACR`` ``AES`` ``AES Severity`` ``Accept Risk`` ``Address`` ``Agent ID`` ``Application CPE`` ``Assets`` ``Audit File`` ``CCE ID`` ``Cross References`` ``CVE ID`` ``CVSS v2 Score`` ``CVSS v2 Vector`` ``CVSS v3 Score`` ``CVSS v3 Vector`` ``Data Format`` ``DNS Name`` ``Exploit Available`` ``Exploit Frameworks`` ``Host ID`` ``IAVM ID`` ``MS Bulletin ID`` ``Mitigated`` ``NetBIOS Name`` ``Patch Published`` ``Plugin Family`` ``Plugin ID`` ``Plugin Modified`` ``Plugin Name`` ``Plugin Published`` ``Plugin Type`` ``Port`` ``Protocol`` ``Recast Risk`` ``STIG Severity`` ``Scan Policy Plugins`` ``Severity`` ``Users`` ``Vulnerability Discovered`` ``Vulnerability Last Observed`` ``Vulnerability Priority Rating`` ``Vulnerability Published`` ``Vulnerability Text`` ``Vulnerability Type`` @@ -82,13 +83,13 @@ Column filters are available for the following items when the Vulnerability Summ Because of the potential for large amounts of data to be returned, Tenable server side pagination and server side filtering are used to limit the amount of data returned to the client when Vulnerability List view is selected in the main vulnerabilities component. Local filtering for POAM, IAV, and Navy Comply Date are only available when the Vulnerability Summary view is selected. All externally processed filters (filter panel items) are available in both views. View Navigation -""""""""""""" +"""""""""""""""" To navigate between Vulnerability Summary (API Tool ``sumid``) and Vulnerability List (API Tool ``listvuln``) a user has two options: 1. A button has been provided adjacent to the filtering buttons and can be identified by the magnifying glass icon that will change the vulnerability view 2. Clicking the row of a particular vulnerability will apply a filter for the selected plugin ID and change to Vulnerability List view View Specific Columns -""""""""""""""""""" +"""""""""""""""""""""" Vulnerability List View adds the following additional columns: ``IP Address`` ``ACR`` ``AES`` ``NewBIOS`` ``DNS`` ``MAC Address`` ``Port`` ``Protocol`` ``Agent ID`` ``Host ID`` @@ -96,12 +97,12 @@ Vulnerability Summary View adds the following additional columns: ``Total`` ``Host Total`` IAV Vulnerabilities Component -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The IAV Vulnerabilities Component displays a table originated from Tenable's vulnerability summary with filters to only return Plugin ID's that are mapped to an IAV #, exclude "Informational" severity, and exclude items that have been superseded by other vulnerabilities. Default Display -""""""""""""" +"""""""""""""""" When the IAV vulnerability table is initially displayed, the component will show columns for the following fields by default: ``POAM`` ``Plugin ID`` ``Name`` ``Family`` ``Severity`` ``VPR`` ``IAV`` ``Navy Comply Date`` ``Superseded By`` ``Total`` ``Host Total`` @@ -109,7 +110,7 @@ When the IAV vulnerability table is initially displayed, the component will show While similar to the main vulnerabilities view, the IAV Vulnerabilities Component loads the entire dataset and enables local column filtering rather than Tenable sever side filtering. This change allows for ``POAM`` ``IAV`` ``Navy Comply Date`` filtering in either the Vulnerability List view or the Vulnerability Summary view. Toolbar Controls -"""""""""""""" +""""""""""""""""" To access the filter menu, several controls are available in the toolbar: 1. A global search input field for filtering across all columns 2. A filter button that provides access to a Navy Comply Date dropdown with the following pre-made filters: @@ -130,31 +131,31 @@ To access the filter menu, several controls are available in the toolbar: 5. A column selector to customize visible columns View Options -""""""""""" +""""""""""""" The component provides two primary views: Summary View -''''''''''' +''''''''''''' Includes ``Total`` and ``Host Total`` columns. List View -''''''''' +'''''''''' Expands to show additional columns: ``IP Address`` ``ACR`` ``AES`` ``NetBIOS`` ``DNS`` ``MAC Address`` ``Port`` ``Protocol`` ``Agent ID`` ``Host ID`` Solutions Component -^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^ The Solutions Component provides a table view of solutions from Tenable, sorted by risk reduction percentage. The component automatically applies a filter for the repository that the user is currently viewing. Default Display -""""""""""""" +"""""""""""""""" The solutions table displays the following columns by default: ``Solution`` ``Risk Reduction`` ``Hosts Affected`` ``Vulnerabilities`` ``VPR`` ``CVSS v3 Base Score`` Toolbar Controls -"""""""""""""" +""""""""""""""""" The toolbar provides several controls: 1. A global search input field for filtering across all columns @@ -162,7 +163,7 @@ The toolbar provides several controls: 3. An export button for downloading the data as CSV Filtering Capabilities -"""""""""""""""""""" +""""""""""""""""""""""" Each column supports individual filtering. Available filter types include: * Text filtering for ``Solution`` @@ -174,7 +175,7 @@ Each column supports individual filtering. Available filter types include: - ``CVSS v3 Base Score`` (score) Solution Details Dialog -""""""""""""""""""""" +"""""""""""""""""""""""" Clicking a solution row opens a detailed view with three main sections: 1. Solution Summary Statistics