diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml new file mode 100644 index 0000000..e427687 --- /dev/null +++ b/.github/workflows/ci.yaml @@ -0,0 +1,58 @@ +name: Go + +on: + push: + branches: [master] + pull_request: + branches: [master] + +jobs: + build: + name: Build + runs-on: ubuntu-latest + steps: + - name: Set up Go 1.x + uses: actions/setup-go@v2 + with: + go-version: 1.15.x + + - name: Check out source code + uses: actions/checkout@v2 + + - name: Build + run: go build + + # - name: Test + # run: go test -v ./... + + pre-commit: + runs-on: ubuntu-latest + strategy: + matrix: + python-version: [3.6, 3.7, 3.8] + + steps: + - name: Check out source code + uses: actions/checkout@v2 + + - name: Set up Go 1.x + uses: actions/setup-go@v2 + with: + go-version: 1.15.x + + - name: Set up python environment for pre-commit + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install pre-commit + - name: Run pre-commit + run: | + go get -u golang.org/x/lint/golint + go get github.com/fzipp/gocyclo/cmd/gocyclo + go get github.com/golangci/golangci-lint/cmd/golangci-lint@v1.33.0 + go get -v -u github.com/go-critic/go-critic/cmd/gocritic + pre-commit run --all-files diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml new file mode 100644 index 0000000..32ef750 --- /dev/null +++ b/.github/workflows/release.yaml @@ -0,0 +1,26 @@ +name: release + +on: + push: + branches-ignore: + - "**" + tags: + - "v*.*.*" + +jobs: + goreleaser: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Set up Go + uses: actions/setup-go@v2 + with: + go-version: 1.15.x + - name: Run GoReleaser + uses: goreleaser/goreleaser-action@v2 + with: + version: latest + args: release --rm-dist + env: + GITHUB_TOKEN: ${{ secrets.GORELEASER_GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f6f6b8a --- /dev/null +++ b/.gitignore @@ -0,0 +1,26 @@ +# Binaries for programs and plugins +*.exe +*.exe~ +*.dll +*.so +*.dylib + +# Test binary, built with `go test -c` +*.test + +# Output of the go coverage tool, specifically when used with LiteIDE +*.out + +# Dependency directories (remove the comment below to include it) +# vendor/ + +test +bin +dist +tfc-helper +.vscode +qualys_parser +*.json +test.csv +real.csv +real_2.csv \ No newline at end of file diff --git a/.goreleaser.yml b/.goreleaser.yml new file mode 100644 index 0000000..f0a0f26 --- /dev/null +++ b/.goreleaser.yml @@ -0,0 +1,39 @@ +# This is an example goreleaser.yaml file with some sane defaults. +# Make sure to check the documentation at http://goreleaser.com +before: + hooks: + # You may remove this if you don't use go modules. + - go mod download + # you may remove this if you don't need go generate + - go generate ./... +builds: + - env: + - CGO_ENABLED=0 + goos: + - linux + - windows + - darwin + goarch: + - amd64 + - "386" + ldflags: + - -s -w -X main.version={{.Version}} +archives: + - format: tar.gz + name_template: "{{ .Binary }}_{{ .Os }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}" + files: + - LICENSE* + - README* + +checksum: + name_template: "{{ .ProjectName }}_checksums.txt" + +snapshot: + name_template: "{{ .Tag }}-next" + +changelog: + sort: asc + filters: + exclude: + - "^docs:" + - "^test:" \ No newline at end of file diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..a7827f6 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,25 @@ +exclude: test +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v3.4.0 + hooks: + - id: check-json + - id: check-yaml + - id: trailing-whitespace + - id: end-of-file-fixer + - repo: git://github.com/dnephin/pre-commit-golang + rev: master + hooks: + - id: go-fmt + - id: go-vet + - id: go-lint + - id: go-imports + - id: go-cyclo + args: [-over=15] + - id: validate-toml + - id: no-go-testing + - id: golangci-lint + args: [--skip-dirs=test] + - id: go-critic + - id: go-unit-tests + - id: go-build diff --git a/README.md b/README.md new file mode 100644 index 0000000..b7dcb23 --- /dev/null +++ b/README.md @@ -0,0 +1,175 @@ +# `qualys_parser` + +qualys_parser is a CLI tool that parses the csv report from Qualys and gives quick result + +The tool is only tested on scanning report of ubuntu machines + +## Installing + +`git clone https://github.com/eRaMvn/qualys_parser.git` + +Build executable + +```bash +#!/bin/bash +go build +``` + +Or you can grab one of the executables under `Releases` + +## Example Commands + +The following examples were executed on the `samples/reports.csv` file + +1. Generate a report of all vulnerable packages found along with where the packages can be found + +` +qualys_parser -i report.csv +` + +Sample output: + +```json +{ + "OpenSSH_7.2p2": { + "csv_title": "OpenSSH Information Disclosure Vulnerability", + "severity": "Medium", + "solution": "OpenSSH team committed a partial mitigation of this issue which is included in openssh 8.4. \nRefer to OpenSSH 8.4 (https://www.openssh.com/) for details.", + "count": 1, + "ip_list": ["172.30.1.6"] + }, + "git-man": { + "csv_title": "Ubuntu Security Notification for Git Vulnerabilities (USN-4220-1)", + "severity": "Medium", + "solution": "Refer to Ubuntu advisory USN-4220-1 (https://lists.ubuntu.com/archives/ubuntu-security-announce/2019-December/005244.html)...", + "count": 2, + "ip_list": ["172.30.1.1", "172.30.1.2"] + }, + "linux-image-aws": { + "csv_title": "Ubuntu Security Notification for Linux, Linux-aws, Linux-kvm, Linux-raspi2, Linux-snapdragon (USN-4211-1)", + "severity": "Medium", + "solution": "Refer to Ubuntu advisory USN-4211-1 (https://lists.ubuntu.com/archives/ubuntu-security-announce/2019-December/005229.html) ", + "count": 3, + "ip_list": ["172.30.1.3", "172.30.1.4", "172.30.1.5"] + }, + "linux-libc-dev": { + "csv_title": "Ubuntu Security Notification for Linux, Linux-aws, Linux-kvm, Linux-raspi2, Linux-snapdragon (USN-4211-1)", + "severity": "Medium", + "solution": "Refer to Ubuntu advisory USN-4211-1 (https://lists.ubuntu.com/archives/ubuntu-security-announce/2019-December/005229.html)", + "count": 3, + "ip_list": ["172.30.1.3", "172.30.1.4", "172.30.1.5"] + } +} +``` + +2. Generate a report of all vulnerable packages found along with where the packages can be found but with more details + +` +qualys_parser -i report.csv -d +` + +Sample output: + +```json + +{ + "OpenSSH_7.2p2 | Ubuntu-4ubuntu2.10, | OpenSSL": { + "csv_title": "OpenSSH Information Disclosure Vulnerability", + "severity": "Medium", + "solution": "OpenSSH team committed a partial mitigation of this issue which is included in openssh 8.4. \nRefer to OpenSSH 8.4 (https://www.openssh.com/) for details.", + "count": 1, + "ip_list": ["10.235.110.8"] + } +} +``` + +3. Generate a report of all ips with vulnerable packages + +` +qualys_parser -i report.csv --ip +` + +Sample output: + +```json +{ + "172.30.1.1": ["git-man"], + "172.30.1.2": ["git-man"], + "172.30.1.3": ["linux-image-aws", "linux-libc-dev"], + "172.30.1.4": ["linux-image-aws", "linux-libc-dev"], + "172.30.1.5": ["linux-image-aws", "linux-libc-dev"], + "172.30.1.6": ["OpenSSH_7.2p2"] +} +``` + +With more details + +` +qualys_parser -i report.csv --ip -d +` + +Sample output: + +```json +{ + "172.30.1.1": ["git-man | 1:2.7.4-0ubuntu1.6 | 1:2.7.4-0ubuntu1.7#"], + "172.30.1.2": ["git-man | 1:2.7.4-0ubuntu1.6 | 1:2.7.4-0ubuntu1.7#"], + "172.30.1.3": [ + "linux-image-aws | 4.4.0.1048.50 | 4.4.0.1099.103", + "linux-libc-dev | 4.4.0-109.132 | 4.4.0-170.199#" + ], + "172.30.1.4": [ + "linux-image-aws | 4.4.0.1048.50 | 4.4.0.1099.103", + "linux-libc-dev | 4.4.0-109.132 | 4.4.0-170.199#" + ], + "172.30.1.5": [ + "linux-image-aws | 4.4.0.1048.50 | 4.4.0.1099.103", + "linux-libc-dev | 4.4.0-109.132 | 4.4.0-170.199#" + ], + "172.30.1.6": ["OpenSSH_7.2p2 | Ubuntu-4ubuntu2.10, | OpenSSL"] +} +``` + +4. Quickly grab the vulnerable packages for a certain ip + +` +qualys_parser -i report.csv --host 172.30.1.2 --ip +` + +Sample output: + +```bash +The vulnerable package(s) found for the host 172.30.1.2 are: +git-man +``` + +5. Quickly grab the ips a vulnerable package can be found in + +` +qualys_parser -i report.csv --pkg git-man +` + +Sample output: + +```bash +The ip(s) found for the package git-man are: +172.30.1.1 +172.30.1.2 +``` + +6. List just the packages or ips without further info + +` +qualys_parser -i real.csv -l +` + +Sample output: + +```bash +The vulnerable packages found : +git-man +linux-image-aws +linux-libc-dev +OpenSSH_7.2p2 +There are a total of 4 of package(s) found +``` diff --git a/cmd/root.go b/cmd/root.go new file mode 100644 index 0000000..2ef9505 --- /dev/null +++ b/cmd/root.go @@ -0,0 +1,92 @@ +package cmd + +import ( + "fmt" + "os" + + "github.com/spf13/cobra" + + homedir "github.com/mitchellh/go-homedir" + "github.com/spf13/viper" +) + +var cfgFile string + +// rootCmd represents the base command when called without any subcommands +var rootCmd = &cobra.Command{ + Use: "qualys_parser", + Short: "Parse the qualys report", + Long: `A tool to parse the qualys report by giving + Example: + qualys_parser -i report.csv + qualys_parser -i report.csv -d + qualys_parser -i report.csv --ip + qualys_parser -i report.csv --host 172.31.251.19 --ip + qualys_parser -i report.csv --pkg git-man + qualys_parser -i real.csv -l + `, + Run: func(cmd *cobra.Command, args []string) { + inputFileName, _ = cmd.Flags().GetString("input") + outputFileName, _ = cmd.Flags().GetString("output") + detailSet, _ = cmd.Flags().GetBool("detail") + if outputFileName == "" { + outputFileName = "parsing_result.json" + } + hostIp, _ = cmd.Flags().GetString("host") + listOnly, _ = cmd.Flags().GetBool("list") + pkgName, _ = cmd.Flags().GetString("pkg") + reportByIp, _ := cmd.Flags().GetBool("ip") + if reportByIp { + GetVulnerabilitiesByIP() + } else { + GetVulnerabilities() + } + }, +} + +// Execute adds all child commands to the root command and sets flags appropriately. +// This is called by main.main(). It only needs to happen once to the rootCmd. +func Execute() { + if err := rootCmd.Execute(); err != nil { + fmt.Println(err) + os.Exit(1) + } +} + +func init() { + cobra.OnInitialize(initConfig) + rootCmd.PersistentFlags().StringP("input", "i", "", "Specify the report to parse") + _ = rootCmd.MarkPersistentFlagRequired("input") + rootCmd.PersistentFlags().StringP("output", "o", "", "Specify the name of the output file") + rootCmd.PersistentFlags().String("host", "", "Specify the host ip address to print out vulnerable package") + rootCmd.PersistentFlags().StringP("pkg", "p", "", "Specify the package to print out the ip with that vulnerable package") + rootCmd.PersistentFlags().BoolP("list", "l", false, "Specify whether we want just a pure list of IPs or packages") + rootCmd.PersistentFlags().BoolP("detail", "d", false, "Specify whether to add package detail or not") + rootCmd.PersistentFlags().Bool("ip", false, "Specify whether to receive the report based on ip address or not") +} + +// initConfig reads in config file and ENV variables if set. +func initConfig() { + if cfgFile != "" { + // Use config file from the flag. + viper.SetConfigFile(cfgFile) + } else { + // Find home directory. + home, err := homedir.Dir() + if err != nil { + fmt.Println(err) + os.Exit(1) + } + + // Search config in home directory with name ".find_repo_owner" (without extension). + viper.AddConfigPath(home) + viper.SetConfigName(".find_repo_owner") + } + + viper.AutomaticEnv() // read in environment variables that match + + // If a config file is found, read it in. + if err := viper.ReadInConfig(); err == nil { + fmt.Println("Using config file:", viper.ConfigFileUsed()) + } +} diff --git a/cmd/vuln.go b/cmd/vuln.go new file mode 100644 index 0000000..5dc8dc7 --- /dev/null +++ b/cmd/vuln.go @@ -0,0 +1,136 @@ +package cmd + +import ( + "encoding/csv" + "encoding/json" + "fmt" + "io" + "io/ioutil" + "log" + "os" + "strings" +) + +var pkgName string + +type VulnRecord struct { + CveTitle string `json:"csv_title"` + Severity string `json:"severity"` + Solution string `json:"solution"` + Count int `json:"count"` + IpList []string `json:"ip_list"` +} + +// CheckIfIpExist checks if ip exists in a slice +func CheckIfIpExist(ip string, IpList []string) bool { + for _, value := range IpList { + if value == ip { + return true + } + } + return false +} + +// PrsRrdVuln parses each record in csv and updates the slice of vulnerabilities +func PrsRrdVuln(vulnDict map[string]VulnRecord, record []string, severityMap map[string]string) { + packages := ParsePackage(record[31]) + + for _, pkg := range packages { + _, valueInDict := vulnDict[pkg] + if !valueInDict { + vulnDict[pkg] = VulnRecord{ + CveTitle: record[8], + Severity: severityMap[record[11]], + Solution: record[28], + Count: 1, + IpList: []string{record[0]}, + } + } + + // Check if the ip is in the list of ips belonging to the vuln record + if !CheckIfIpExist(record[0], vulnDict[pkg].IpList) { + newIPList := append(vulnDict[pkg].IpList, record[0]) + newCount := vulnDict[pkg].Count + 1 + + vulnDict[pkg] = VulnRecord{ + CveTitle: vulnDict[pkg].CveTitle, + Severity: vulnDict[pkg].Severity, + Solution: vulnDict[pkg].Solution, + Count: newCount, + IpList: newIPList, + } + } + } +} + +// GetVulnDictKeys transforms dictionary to an array containing vulnerabilities +func GetVulnDictKeys(vulnDict map[string]VulnRecord) []string { + vulnList := []string{} + for vuln := range vulnDict { + vulnList = append(vulnList, vuln) + } + return vulnList +} + +// WriteMapToFile write to json file given a map +func WriteVulnMapToFile(fileName string, ipDict map[string]VulnRecord) { + jsonString, _ := json.Marshal(ipDict) + ioutil.WriteFile(fileName, jsonString, os.ModePerm) +} + +func GetVulnerabilities() { + vulnDict := make(map[string]VulnRecord) + severityMap := map[string]string{ + "1": "Low", + "2": "Low", + "3": "Medium", + "4": "High", + "5": "High", + } + + f, err := os.Open(inputFileName) + + if err != nil { + log.Fatal(err) + } + + r := csv.NewReader(f) + + ip_order := 0 + for { + record, err := r.Read() + if err == io.EOF { + break + } + + if record[0] == "IP" { + ip_order += 1 + continue + } + + if ip_order == 2 { + PrsRrdVuln(vulnDict, record, severityMap) + } + } + + if pkgName == "" { + // Generates just a list of IPs + if listOnly { + vulnDictKeys := GetVulnDictKeys(vulnDict) + fmt.Printf("The vulnerable packages found :\n") + fmt.Println(strings.Join(vulnDictKeys, "\n")) + fmt.Printf("There are a total of %d of package(s) found\n", len(vulnDictKeys)) + } else { + WriteVulnMapToFile(outputFileName, vulnDict) + } + + } else { + _, valueInDict := vulnDict[pkgName] + if len(vulnDict[pkgName].IpList) == 0 || !valueInDict { + fmt.Printf("The ip(s) for the package %s cannot be found!\n", pkgName) + } else { + fmt.Printf("The ip(s) found for the package %s are:\n", pkgName) + fmt.Println(strings.Join(vulnDict[pkgName].IpList, "\n")) + } + } +} diff --git a/cmd/vulnbyip.go b/cmd/vulnbyip.go new file mode 100644 index 0000000..87e7122 --- /dev/null +++ b/cmd/vulnbyip.go @@ -0,0 +1,141 @@ +package cmd + +import ( + "encoding/csv" + "encoding/json" + "fmt" + "io" + "io/ioutil" + "log" + "os" + "strings" +) + +var inputFileName string +var outputFileName string +var detailSet bool +var hostIp string +var listOnly bool + +// PrsRrdVulnByIp parses each record in csv and updates the dictionary +func PrsRrdVulnByIp(ipDict map[string]map[string]bool, ip string, packages *[]string) { + // Check if value in Dictionary + _, valueInDict := ipDict[ip] + if !valueInDict { + ipDict[ip] = make(map[string]bool) + } + + for _, pkg := range *packages { + if !ipDict[ip][pkg] { + ipDict[ip][pkg] = true + } + } +} + +// ParsePackage parses the Results field and returns the list of packages +func ParsePackage(recordField string) []string { + var packages []string + lines := strings.Split(recordField, "\n") + + for i, line := range lines { + if i == 0 { + continue + } + + lineWords := strings.Fields(line) + // Ignore blank lines + if len(lineWords) == 0 { + continue + } + + if detailSet { + packageInfo := fmt.Sprintf("%s | %s | %s", lineWords[0], lineWords[1], lineWords[2]) + packages = append(packages, packageInfo) + } else { + packages = append(packages, lineWords[0]) + } + } + + return packages +} + +func convertDict(ipDict map[string]map[string]bool) map[string][]string { + convertedDict := make(map[string][]string) + for ip := range ipDict { + keys := make([]string, len(ipDict[ip])) + + i := 0 + for k := range ipDict[ip] { + keys[i] = k + i++ + } + convertedDict[ip] = keys + } + return convertedDict +} + +// GetIPDictKeys transforms dictionary to an array containing ips +func GetIPDictKeys(ipDict map[string]map[string]bool) []string { + ipList := []string{} + for ip := range ipDict { + ipList = append(ipList, ip) + } + return ipList +} + +// WriteMapToFile write to json file given a map +func WriteIPMapToFile(fileName string, ipDict map[string][]string) { + jsonString, _ := json.Marshal(ipDict) + ioutil.WriteFile(fileName, jsonString, os.ModePerm) +} + +// GetVulnerabilitiesByIP get the list of vulnerabilities for each ip +func GetVulnerabilitiesByIP() { + ipDict := make(map[string]map[string]bool) + + f, err := os.Open(inputFileName) + + if err != nil { + log.Fatal(err) + } + + r := csv.NewReader(f) + + ip_order := 0 + for { + record, err := r.Read() + if err == io.EOF { + break + } + + if record[0] == "IP" { + ip_order += 1 + continue + } + + if ip_order == 2 { + // 31 is Result field + packages := ParsePackage(record[31]) + PrsRrdVulnByIp(ipDict, record[0], &packages) + } + } + + convertedDict := convertDict(ipDict) + if hostIp == "" { + if listOnly { + ipDictKeys := GetIPDictKeys(ipDict) + fmt.Printf("The IPs with vulnerable packages:\n") + fmt.Println(strings.Join(ipDictKeys, "\n")) + fmt.Printf("There are a total of %d of ip(s) found\n", len(ipDictKeys)) + } else { + WriteIPMapToFile(outputFileName, convertedDict) + } + } else { + if len(convertedDict[hostIp]) == 0 { + fmt.Printf("The vulnerable package(s) found for the host %s cannot be found!\n", hostIp) + } else { + fmt.Printf("The vulnerable package(s) found for the host %s are:\n", hostIp) + fmt.Println(strings.Join(convertedDict[hostIp], "\n")) + } + } +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..08d1cb5 --- /dev/null +++ b/go.mod @@ -0,0 +1,9 @@ +module qualys_parser + +go 1.15 + +require ( + github.com/mitchellh/go-homedir v1.1.0 + github.com/spf13/cobra v1.1.3 + github.com/spf13/viper v1.7.1 +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..99c11b5 --- /dev/null +++ b/go.sum @@ -0,0 +1,313 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= +github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= +github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= +github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= +github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= +github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= +github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= +github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= +github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= +github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= +github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4= +github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= +github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= +github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= +github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= +github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= +github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/afero v1.1.2 h1:m8/z1t7/fwjysjQRYbP0RD+bUIF/8tJwPdEZsI83ACI= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8= +github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cobra v1.1.3 h1:xghbfqPkxzxP3C/f3n5DdpAbdKLj4ZE4BWQI362l53M= +github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= +github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= +github.com/spf13/viper v1.7.1 h1:pM5oEahlgWv/WnHXpgbKz7iLIxRf65tye2Ci+XFK5sk= +github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= +github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= +github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0 h1:HyfiK1WMnHj5FXFXatD+Qs1A/xC2Run6RzeW1SyHxpc= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/ini.v1 v1.51.0 h1:AQvPpx3LzTDM0AjnIRlVFwFFGC+npRopjZxLJj6gdno= +gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= +gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= diff --git a/main.go b/main.go new file mode 100644 index 0000000..7e5e874 --- /dev/null +++ b/main.go @@ -0,0 +1,7 @@ +package main + +import "qualys_parser/cmd" + +func main() { + cmd.Execute() +} diff --git a/samples/report.csv b/samples/report.csv new file mode 100755 index 0000000..beedb47 --- /dev/null +++ b/samples/report.csv @@ -0,0 +1,69 @@ +SOMECOMPANY-VM-REPORT,03/08/2021 at 00:08:44 (GMT-0800),,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +A360 Operations,"Abc, Inc.","Abc Street, 2th floor.",Santa Monica,California,United States of America,90291,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +John Doe,Manager,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Asset Groups,IPs,Active Hosts,Hosts Matching Filters,Trend Analysis,Date Range,Network,Asset Tags,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +NONE,NONE,0,0,Last 1 week,03/01/2021 - 03/08/2021,Global Default Network,"Included(any): PLANGRID-P-UE1, PLANGRID-P-UW2, PLANGRID-C-UE1, PLANGRID-P-AS2, PLANGRID-C-UE2; +Excluded(any): Stopped, Terminated;",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Total Vulnerabilities,Avg Security Risk,Business Risk,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +0,0,0/100,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +IP,Network,Total Vulnerabilities,Security Risk,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +10.10.0.1,Global Default Network,0,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +10.10.0.2,Global Default Network,0,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +10.10.0.3,Global Default Network,0,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Severity,Total,Trend,Confirmed,Trend,Potential,Trend,Information Gathered,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +5,0,0,0,0,0,0,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +4,0,0,0,0,0,0,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +3,0,0,0,0,0,0,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +2,0,0,0,0,0,0,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +1,0,0,0,0,0,0,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +Total,0,0,0,0,0,0,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +IP,Network,DNS,NetBIOS,Tracking Method,OS,IP Status,QID,Title,Vuln Status,Type,Severity,Port,Protocol,FQDN,SSL,First Detected,Last Detected,Times Detected,Date Last Fixed,CVE ID,Vendor Reference,Bugtraq ID,CVSS3,CVSS3 Base,CVSS3 Temporal,Threat,Impact,Solution,Exploitability,Associated Malware,Results,PCI Vuln,Ticket State,Instance,OS CPE,Category,Associated Tags,Non-running Kernel +172.30.1.1,Global Default Network,event-stream-rabbitmq-node-2,event-stream-rabbitmq-node-2,QAGENT,Ubuntu Linux 16.04.6,"host scanned, found vuln",197733,Ubuntu Security Notification for Git Vulnerabilities (USN-4220-1),Active,Vuln,3,,,,,5/4/2020 16:26,3/7/2021 21:27,1498,,"CVE-2019-1348, CVE-2019-1349, CVE-2019-1350, CVE-2019-1351, CVE-2019-1352, CVE-2019-1353, CVE-2019-1354, CVE-2019-1387, CVE-2019-19604",USN-4220-1,,7.8,9.8 (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H),7.8 (E:U/RL:O/RC:U), It was discovered that Git contained various security flaws.," An attacker could possibly use these issues to overwrite arbitrary paths, execute arbitrary code, and overwrite files in the .git directory.","Refer to Ubuntu advisory USN-4220-1 (https://lists.ubuntu.com/archives/ubuntu-security-announce/2019-December/005244.html) for affected packages and patching details, or update with your package manager. + Patch: +Following are links for downloading patches to fix the vulnerabilities: + USN-4220-1: 18.04 (bionic) on src (git) (https://launchpad.net/ubuntu/+source/git/1:2.17.1-1ubuntu0.5) USN-4220-1: 19.10 (eoan) on src (git) (https://launchpad.net/ubuntu/+source/git/1:2.20.1-2ubuntu1.19.10.1) USN-4220-1: 19.04 (disco) on src (git) (https://launchpad.net/ubuntu/+source/git/1:2.20.1-2ubuntu1.19.04.1) USN-4220-1: 16.04 (Xenial) on src (git) (https://launchpad.net/ubuntu/+source/git/1:2.7.4-0ubuntu1.7)",,,"Package Installed Version Required Version +git-man 1:2.7.4-0ubuntu1.6 1:2.7.4-0ubuntu1.7#",yes,,,,Ubuntu,,No +172.30.1.2,Global Default Network,event-stream-rabbitmq-node-1,event-stream-rabbitmq-node-1,QAGENT,Ubuntu Linux 16.04.6,"host scanned, found vuln",197733,Ubuntu Security Notification for Git Vulnerabilities (USN-4220-1),Active,Vuln,3,,,,,5/20/2020 11:34,3/7/2021 20:30,1436,,"CVE-2019-1348, CVE-2019-1349, CVE-2019-1350, CVE-2019-1351, CVE-2019-1352, CVE-2019-1353, CVE-2019-1354, CVE-2019-1387, CVE-2019-19604",USN-4220-1,,7.8,9.8 (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H),7.8 (E:U/RL:O/RC:U), It was discovered that Git contained various security flaws.," An attacker could possibly use these issues to overwrite arbitrary paths, execute arbitrary code, and overwrite files in the .git directory.","Refer to Ubuntu advisory USN-4220-1 (https://lists.ubuntu.com/archives/ubuntu-security-announce/2019-December/005244.html) for affected packages and patching details, or update with your package manager. + Patch: +Following are links for downloading patches to fix the vulnerabilities: + USN-4220-1: 18.04 (bionic) on src (git) (https://launchpad.net/ubuntu/+source/git/1:2.17.1-1ubuntu0.5) USN-4220-1: 19.10 (eoan) on src (git) (https://launchpad.net/ubuntu/+source/git/1:2.20.1-2ubuntu1.19.10.1) USN-4220-1: 19.04 (disco) on src (git) (https://launchpad.net/ubuntu/+source/git/1:2.20.1-2ubuntu1.19.04.1) USN-4220-1: 16.04 (Xenial) on src (git) (https://launchpad.net/ubuntu/+source/git/1:2.7.4-0ubuntu1.7)",,,"Package Installed Version Required Version +git-man 1:2.7.4-0ubuntu1.6 1:2.7.4-0ubuntu1.7#",yes,,,,Ubuntu,,No +172.30.1.3,Global Default Network,i-0c1fdf72b,i-0c1fdf72b,QAGENT,Ubuntu Linux 16.04.3,"host scanned, found vuln",197723,"Ubuntu Security Notification for Linux, Linux-aws, Linux-kvm, Linux-raspi2, Linux-snapdragon (USN-4211-1)",Active,Vuln,3,,,,,4/27/2020 10:36,3/7/2021 20:23,1570,,"CVE-2018-20784, CVE-2019-17075, CVE-2019-17133",USN-4211-1,,7.8,9.8 (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H),7.8 (E:U/RL:O/RC:U)," It was discovered that an infinite loop could be triggered in the CFS Linux kernel process scheduler. + It was discovered that the WiFi driver stack in the Linux kernel did not properly validate SSID lengths. + It was discovered that the Chelsio T4/T5 RDMA Driver for the Linux kernel performed DMA from a kernel stack.", A local attacker could possibly use this to cause a denial of service. (CVE-2018-20784) A physically proximate attacker could use this to cause a denial of service (system crash). (CVE-2019-17133) A local attacker could use this to cause a denial of service (system crash). (CVE-2019-17075),"Refer to Ubuntu advisory USN-4211-1 (https://lists.ubuntu.com/archives/ubuntu-security-announce/2019-December/005229.html) for affected packages and patching details, or update with your package manager. + Patch: +Following are links for downloading patches to fix the vulnerabilities: + USN-4211-1: 16.04 (Xenial) on src (linux-image-snapdragon) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-4.4.0-170-generic-lpae) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-virtual) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-powerpc-e500mc) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-powerpc64-emb) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-4.4.0-170-generic) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-powerpc64-smp) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-4.4.0-170-powerpc64-smp) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-aws) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-raspi2) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-4.4.0-1126-raspi2) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-4.4.0-170-lowlatency) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-4.4.0-1099-aws) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-4.4.0-1063-kvm) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-generic-lpae) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-4.4.0-170-powerpc-smp) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-lowlatency) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-generic) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-4.4.0-170-powerpc-e500mc) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-powerpc-smp) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-4.4.0-1130-snapdragon) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-4.4.0-170-powerpc64-emb) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-kvm) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199)",,,"Package Installed Version Required Version +linux-image-aws 4.4.0.1048.50 4.4.0.1099.103 +linux-libc-dev 4.4.0-109.132 4.4.0-170.199#",yes,,,,Ubuntu,,Yes +172.30.1.4,Global Default Network,i-0b6af332e,i-0b6af332e,QAGENT,Ubuntu Linux 16.04.3,"host scanned, found vuln",197723,"Ubuntu Security Notification for Linux, Linux-aws, Linux-kvm, Linux-raspi2, Linux-snapdragon (USN-4211-1)",Active,Vuln,3,,,,,4/27/2020 12:39,3/7/2021 19:26,1563,,"CVE-2018-20784, CVE-2019-17075, CVE-2019-17133",USN-4211-1,,7.8,9.8 (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H),7.8 (E:U/RL:O/RC:U)," It was discovered that an infinite loop could be triggered in the CFS Linux kernel process scheduler. + It was discovered that the WiFi driver stack in the Linux kernel did not properly validate SSID lengths. + It was discovered that the Chelsio T4/T5 RDMA Driver for the Linux kernel performed DMA from a kernel stack.", A local attacker could possibly use this to cause a denial of service. (CVE-2018-20784) A physically proximate attacker could use this to cause a denial of service (system crash). (CVE-2019-17133) A local attacker could use this to cause a denial of service (system crash). (CVE-2019-17075),"Refer to Ubuntu advisory USN-4211-1 (https://lists.ubuntu.com/archives/ubuntu-security-announce/2019-December/005229.html) for affected packages and patching details, or update with your package manager. + Patch: +Following are links for downloading patches to fix the vulnerabilities: + USN-4211-1: 16.04 (Xenial) on src (linux-image-snapdragon) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-4.4.0-170-generic-lpae) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-virtual) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-powerpc-e500mc) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-powerpc64-emb) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-4.4.0-170-generic) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-powerpc64-smp) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-4.4.0-170-powerpc64-smp) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-aws) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-raspi2) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-4.4.0-1126-raspi2) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-4.4.0-170-lowlatency) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-4.4.0-1099-aws) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-4.4.0-1063-kvm) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-generic-lpae) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-4.4.0-170-powerpc-smp) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-lowlatency) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-generic) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-4.4.0-170-powerpc-e500mc) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-powerpc-smp) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-4.4.0-1130-snapdragon) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-4.4.0-170-powerpc64-emb) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-kvm) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199)",,,"Package Installed Version Required Version +linux-image-aws 4.4.0.1048.50 4.4.0.1099.103 +linux-libc-dev 4.4.0-109.132 4.4.0-170.199#",yes,,,,Ubuntu,,Yes +172.30.1.5,Global Default Network,i-0442cdd90,i-0442cdd90,QAGENT,Ubuntu Linux 16.04.3,"host scanned, found vuln",197723,"Ubuntu Security Notification for Linux, Linux-aws, Linux-kvm, Linux-raspi2, Linux-snapdragon (USN-4211-1)",Active,Vuln,3,,,,,4/27/2020 12:51,3/7/2021 19:43,1573,,"CVE-2018-20784, CVE-2019-17075, CVE-2019-17133",USN-4211-1,,7.8,9.8 (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H),7.8 (E:U/RL:O/RC:U)," It was discovered that an infinite loop could be triggered in the CFS Linux kernel process scheduler. + It was discovered that the WiFi driver stack in the Linux kernel did not properly validate SSID lengths. + It was discovered that the Chelsio T4/T5 RDMA Driver for the Linux kernel performed DMA from a kernel stack.", A local attacker could possibly use this to cause a denial of service. (CVE-2018-20784) A physically proximate attacker could use this to cause a denial of service (system crash). (CVE-2019-17133) A local attacker could use this to cause a denial of service (system crash). (CVE-2019-17075),"Refer to Ubuntu advisory USN-4211-1 (https://lists.ubuntu.com/archives/ubuntu-security-announce/2019-December/005229.html) for affected packages and patching details, or update with your package manager. + Patch: +Following are links for downloading patches to fix the vulnerabilities: + USN-4211-1: 16.04 (Xenial) on src (linux-image-snapdragon) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-4.4.0-170-generic-lpae) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-virtual) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-powerpc-e500mc) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-powerpc64-emb) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-4.4.0-170-generic) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-powerpc64-smp) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-4.4.0-170-powerpc64-smp) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-aws) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-raspi2) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-4.4.0-1126-raspi2) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-4.4.0-170-lowlatency) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-4.4.0-1099-aws) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-4.4.0-1063-kvm) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-generic-lpae) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-4.4.0-170-powerpc-smp) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-lowlatency) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-generic) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-4.4.0-170-powerpc-e500mc) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-powerpc-smp) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-4.4.0-1130-snapdragon) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-4.4.0-170-powerpc64-emb) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199) USN-4211-1: 16.04 (Xenial) on src (linux-image-kvm) (https://launchpad.net/ubuntu/+source/linux/4.4.0-170.199)",,,"Package Installed Version Required Version +linux-image-aws 4.4.0.1048.50 4.4.0.1099.103 +linux-libc-dev 4.4.0-109.132 4.4.0-170.199#",yes,,,,Ubuntu,,Yes +172.30.1.6,Global Default Network,i-00176a5b0,i-00176a5b0,QAGENT,Ubuntu Linux 16.04.7,"host scanned, found vuln",650035,OpenSSH Information Disclosure Vulnerability,Active,Vuln,3,,,,,2/22/2021 16:54,3/5/2021 5:20,59,,CVE-2020-14145,OpenSSH 8.4,,5.4,5.9 (AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N),5.4 (E:U/RL:U/RC:C),"OpenSSH is the premier connectivity tool for remote login with the SSH protocol. +The client side in OpenSSH 5.7 through 8.3 has an Observable Discrepancy leading to an information leak in the algorithm negotiation. This allows man-in-the-middle attackers to target initial connection attempts (where no host key for the server has been cached by the client). Affected Versions: + OpenSSH 5.7 through 8.3 + +QID Detection Logic: +The QID checks for the vulnerable versions of OpenSSH",On successful exploitation it allows man-in-the-middle attackers to target initial connection attempts.,"OpenSSH team committed a partial mitigation of this issue which is included in openssh 8.4. +Refer to OpenSSH 8.4 (https://www.openssh.com/) for details.",,,"Vulnerable version of OpenSSH Detected: + +OpenSSH_7.2p2 Ubuntu-4ubuntu2.10, OpenSSL 1.0.2g 1 Mar 2016#",yes,,,,Security Policy,,No