2016-02-22 23:39:04 +00:00
< div class = "image-vulnerability-view-element" >
2016-12-14 05:50:06 +00:00
<!-- Unable to load -->
< div class = "empty" ng-if = "securityStatus == 'error'" >
< div class = "empty-icon" >
< i class = "fa fa-times-circle" > < / i >
< / div >
< div class = "empty-primary-msg" > Could not load security scan information< / div >
< div class = "empty-secondary-msg" >
Please try again in a few minutes. If this problem persists, please contact support.
< / div >
< / div >
2016-02-22 23:39:04 +00:00
<!-- Not scanned -->
< div class = "empty" ng-if = "securityStatus == 'queued'" >
2016-12-14 05:50:06 +00:00
< div class = "empty-icon" >
< i class = "fa fa-ellipsis-h" > < / i >
< / div >
2016-02-22 23:39:04 +00:00
< div class = "empty-primary-msg" > This image has not been indexed yet< / div >
< div class = "empty-secondary-msg" >
Please try again in a few minutes.
< / div >
< / div >
<!-- Unable to scan -->
< div class = "empty" ng-if = "securityStatus == 'failed'" >
2016-12-14 05:50:06 +00:00
< div class = "empty-icon" >
< i class = "fa fa-times-circle" > < / i >
< / div >
2016-02-22 23:39:04 +00:00
< div class = "empty-primary-msg" > This image could not be indexed< / div >
< div class = "empty-secondary-msg" >
2016-03-04 23:07:44 +00:00
Quay security scanner was unable to index this image.
2016-02-22 23:39:04 +00:00
< / div >
< / div >
2016-03-04 23:07:44 +00:00
<!-- Scanned and has no features -->
2016-03-09 20:28:21 +00:00
< div ng-if = "securityStatus == 'scanned' && !vulnerabilitiesInfo.features.length" >
2016-12-14 05:50:06 +00:00
< div class = "empty" >
2016-03-04 23:07:44 +00:00
< div class = "empty-icon" >
< i class = "fa fa-bug" > < / i >
< / div >
< div class = "empty-primary-msg" > Image is not supported by Quay Security Scanner< / div >
< div class = "empty-secondary-msg" >
This image has an operating system or package manager unsupported by Quay Security Scanner.
< / div >
< / div >
< / div >
<!-- Scanned and has features -->
2016-03-09 20:28:21 +00:00
< div ng-if = "securityStatus == 'scanned' && vulnerabilitiesInfo.features.length" >
2016-02-22 23:39:04 +00:00
<!-- Header -->
2016-03-09 20:28:21 +00:00
< div class = "security-header" >
< div class = "donut-col" >
2016-02-22 23:39:04 +00:00
< div id = "vulnDonutChart" style = "position: relative;" >
< svg style = "height:250px; width:250px" > < / svg >
< span class = "donut-icon" >
< i class = "fa fa-bug" > < / i >
< / span >
< / div >
< / div >
2016-03-09 20:28:21 +00:00
< div class = "summary-col" >
< ul class = "summary-list" ng-if = "vulnerabilitiesInfo.severityBreakdown.length" >
< li class = "title-item" > Quay Security Scanner has detected < strong > {{ vulnerabilitiesInfo.vulnerabilities.length }}< / strong > vulnerabilities.< / li >
< li class = "subtitle-item" ng-if = "vulnerabilitiesInfo.fixable.length" >
Patches are available for < strong > {{ vulnerabilitiesInfo.fixable.length }}< / strong > vulnerabilities.
< / li >
< li style = "margin-bottom: 30px" > < / li >
2016-02-22 23:39:04 +00:00
2016-03-09 20:28:21 +00:00
< li class = "severity-item" ng-repeat = "severity in vulnerabilitiesInfo.severityBreakdown" >
< i class = "fa fa-exclamation-triangle" ng-style = "{'color': severity.color}" > < / i > < strong > {{ severity.value }}< / strong > {{ severity.label }}-level vulnerabilities.
2016-02-22 23:39:04 +00:00
< / li >
< / ul >
2016-03-09 20:28:21 +00:00
< div ng-if = "!vulnerabilitiesInfo.severityBreakdown.length" >
2016-03-04 23:07:44 +00:00
Quay Security Scanner has detected no vulnerabilities in this image.
2016-02-22 23:39:04 +00:00
< / div >
< / div >
< / div >
<!-- Filter -->
2016-03-09 20:28:21 +00:00
< span class = "co-filter-box with-options" ng-show = "vulnerabilitiesInfo.vulnerabilities.length" >
< span class = "filter-message" ng-if = "options.filter || options.fixableVulns" >
Showing {{ orderedVulnerabilities.entries.length }} of {{ vulnerabilitiesInfo.vulnerabilities.length }} Vulnerabilities
2016-02-22 23:39:04 +00:00
< / span >
2016-03-09 20:28:21 +00:00
< input class = "form-control" type = "text" ng-model = "options.filter" placeholder = "Filter Vulnerabilities..." >
2016-02-22 23:39:04 +00:00
< div class = "filter-options" >
2016-03-09 20:28:21 +00:00
< label > < input type = "checkbox" ng-model = "options.fixableVulns" > Only show fixable< / label >
2016-02-22 23:39:04 +00:00
< / div >
< / span >
< h3 > Image Vulnerabilities< / h3 >
<!-- Table -->
2016-03-09 20:28:21 +00:00
< div class = "empty" ng-if = "!vulnerabilitiesInfo.vulnerabilities.length"
2016-03-04 23:07:44 +00:00
style="margin-top: 20px;">
< div class = "empty-primary-msg" > No vulnerabilities found.< / div >
< div class = "empty-secondary-msg" > Quay Security Scanner has detected no vulnerabilities in this image.< / div >
< / div >
2016-03-09 20:28:21 +00:00
< table class = "co-table" ng-show = "vulnerabilitiesInfo.vulnerabilities.length" >
2016-02-22 23:39:04 +00:00
< thead >
< td class = "caret-col" > < / td >
2016-03-09 20:28:21 +00:00
< td ng-class = "TableService.tablePredicateClass('name', options.predicate, options.reverse)" >
2016-03-22 18:15:54 +00:00
< a ng-click = "TableService.orderBy('name', options)" > CVE< / a >
2016-02-22 23:39:04 +00:00
< / td >
2016-03-09 20:28:21 +00:00
< td ng-class = "TableService.tablePredicateClass('score', options.predicate, options.reverse)" >
2016-03-22 18:15:54 +00:00
< a ng-click = "TableService.orderBy('score', options)" > Severity< / a >
2016-02-22 23:39:04 +00:00
< / td >
2016-03-09 20:28:21 +00:00
< td class = "hidden-xs" ng-class = "TableService.tablePredicateClass('featureName', options.predicate, options.reverse)" >
2016-03-22 18:15:54 +00:00
< a ng-click = "TableService.orderBy('featureName', options)" > Package< / a >
2016-02-22 23:39:04 +00:00
< / td >
< td class = "hidden-xs" > Current version< / td >
< td class = "hidden-xs hidden-sm" > Fixed in version< / td >
< / td >
< td class = "hidden-xs hidden-sm hidden-md" > Introduced in image< / td >
< td class = "hidden-xs options-col" > < / td >
< / thead >
< tbody ng-repeat = "vuln in orderedVulnerabilities.visibleEntries" bindonce >
2016-03-10 20:02:38 +00:00
< tr ng-class = "vuln.severityInfo.index == 0 ? 'defcon1' : ''" >
2016-02-22 23:39:04 +00:00
< td class = "caret-col" >
< span ng-click = "toggleDetails(vuln)" >
< i class = "fa"
ng-class="vuln.expanded ? 'fa-caret-down' : 'fa-caret-right'"
data-title="View Details" bs-tooltip>< / i >
< / span >
< / td >
< td class = "single-col nowrap-col" >
2016-03-22 18:15:54 +00:00
< a bo-text = "vuln.name" ng-click = "toggleDetails(vuln)" class = "expand-link" > < / a >
2016-04-28 18:38:22 +00:00
< a href = "{{ vuln.link }}" class = "external-link hidden-xs hidden-sm hidden-md" ng-safenewtab >
2016-02-22 23:39:04 +00:00
< i class = "fa fa-link" > < / i >
< / a >
< / td >
< td class = "single-col nowrap-col" >
2016-03-09 20:28:21 +00:00
< span bo-if = "vuln.cvssScore && !vuln.scoreDivergence" >
< span class = "cvss-text" bo-text = "vuln.cvssScore" > < / span >
< span class = "cvss" > < span bo-style = "{'width': (vuln.cvssScore * 10) + '%', 'background-color': vuln.cvssColor}" > < / span >
2016-02-22 23:39:04 +00:00
< / span >
< / span >
2016-03-09 20:28:21 +00:00
< span bo-if = "!vuln.cvssScore || vuln.scoreDivergence" data-title = "{{ getSeverityTooltip(vuln) }}" data-container = "body" bs-tooltip >
2016-02-22 23:39:04 +00:00
< span class = "vulnerability-priority-view" priority = "vuln.severity" > < / span >
2016-03-09 20:28:21 +00:00
< span class = "asterisk" ng-if = "vuln.scoreDivergence == 'adjusted-lower'" ng-style = "{'color': vuln.severityInfo.color}" >
< i class = "fa fa-asterisk" > < / i >
< / span >
2016-02-22 23:39:04 +00:00
< / span >
< / td >
< td class = "single-col hidden-xs" > < span bo-text = "vuln.featureName" > < / span > < / td >
2016-03-09 20:28:21 +00:00
< td class = "single-col hidden-xs hidden-sm" >
< span bo-text = "vuln.introducedInVersion" > < / span >
< / td >
2016-02-22 23:39:04 +00:00
< td class = "single-col hidden-xs" >
< span class = "empty" bo-if = "!vuln.fixedInVersion" > (None)< / span >
< span class = "fixed-in-version" bo-if = "vuln.fixedInVersion" bo-text = "vuln.fixedInVersion" > < / span >
< / td >
< td class = "double-col image-col hidden-xs hidden-sm hidden-md" >
2016-03-17 20:55:41 +00:00
< span bo-if = "vuln.imageCommand" >
< span data-title = "{{ vuln.imageCommand }}" data-container = "body" bs-tooltip >
< span class = "dockerfile-command" command = "vuln.imageCommand" > < / span >
< / span >
< a href = "/repository/{{ repository.namespace }}/{{ repository.name }}/image/{{ vuln.imageId }}" > < i class = "fa fa-archive" > < / i > < / a >
< / span >
< span bo-if = "!vuln.imageCommand" >
< span class = "image-link" repository = "repository" image-id = "vuln.imageId" > < / span >
2016-02-22 23:39:04 +00:00
< / span >
< / td >
< td > < / td >
< / tr >
< tr ng-if = "vuln.expanded" >
< td class = "expansion-col" colspan = "8" >
< div class = "visible-xs" style = "margin-bottom: 20px" >
< div class = "subtitle" > Summary< / div >
< table >
< tr > < td > Package:< / td > < td > < span bo-text = "vuln.featureName" > < / span > < / td > < / tr >
2016-03-09 20:28:21 +00:00
< tr >
< td > Introduced in version:< / td >
< td >
< span bo-text = "vuln.introducedInVersion" > < / span >
< / td >
< / tr >
2016-02-22 23:39:04 +00:00
< tr >
< td > Fixed in version:< / td >
< td >
< span class = "empty" bo-if = "!vuln.fixedInVersion" > (None)< / span >
< span class = "fixed-in-version" bo-if = "vuln.fixedInVersion" bo-text = "vuln.fixedInVersion" > < / span >
< / td >
< / tr >
< tr >
< td > Introduced in Image:< / td >
< td > < span class = "image-link" repository = "repository" image-id = "vuln.imageId" > < / span > < / td >
< / tr >
< / table >
< / div >
2016-03-09 20:28:21 +00:00
< div class = "severity-note" bo-if = "vuln.scoreDivergence" >
< div class = "subtitle" > Severity note< / div >
< span class = "description" >
Note that this vulnerability was originally given a CVSSv2 score of < strong bo-text = "vuln.cvssScore" > < / strong > by NVD but was subsequently reclassified as
< span class = "vulnerability-priority-view" priority = "vuln.severity" > < / span >
by < span bo-text = "getDistro(vuln)" > < / span >
< / span >
< / div >
2016-02-22 23:39:04 +00:00
< div class = "vectors" bo-if = "vuln.metadata.NVD.CVSSv2.Vectors" >
< div class = "subtitle" > Vectors< / div >
< div class = "nvd-vectors-display" vectors = "{{ vuln.metadata.NVD.CVSSv2.Vectors }}" > < / div >
< / div >
< div class = "subtitle" > Description< / div >
< span class = "description" bo-text = "vuln.description" > < / span >
< / td >
< / tr >
< / tbody >
< / table >
2016-03-09 20:28:21 +00:00
< div class = "empty" ng-if = "vulnerabilitiesInfo.vulnerabilities.length && !orderedVulnerabilities.entries.length"
2016-02-22 23:39:04 +00:00
style="margin-top: 20px;">
< div class = "empty-primary-msg" > No matching vulnerabilities found.< / div >
< div class = "empty-secondary-msg" > Try expanding your filtering terms.< / div >
< / div >
< / div >
2016-03-22 18:15:54 +00:00
< / div >