mirror of
https://github.com/empayre/fleet.git
synced 2024-11-06 17:05:18 +00:00
7e366272c0
This PR adds the capability of parsing the release notes posted in https://learn.microsoft.com/en-us/officeupdates/release-notes-office-for-mac into a JSON metadata file (to be released in the NVD repo) and use it for detecting vulnerabilities on Mac Office apps.
108 lines
2.4 KiB
Go
108 lines
2.4 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"os"
|
|
|
|
"github.com/fleetdm/fleet/v4/server/vulnerabilities/macoffice"
|
|
"github.com/fleetdm/fleet/v4/server/vulnerabilities/msrc"
|
|
"github.com/fleetdm/fleet/v4/server/vulnerabilities/nvd"
|
|
"github.com/fleetdm/fleet/v4/server/vulnerabilities/oval"
|
|
"github.com/urfave/cli/v2"
|
|
)
|
|
|
|
func vulnerabilityDataStreamCommand() *cli.Command {
|
|
var dir string
|
|
return &cli.Command{
|
|
Name: "vulnerability-data-stream",
|
|
Usage: "Download the vulnerability data stream",
|
|
UsageText: `
|
|
fleetctl vulnerability-data-stream [options]
|
|
|
|
Downloads (if needed) the data streams that can be used by the Fleet server to process software for vulnerabilities.
|
|
`,
|
|
Flags: []cli.Flag{
|
|
&cli.StringFlag{
|
|
Name: "dir",
|
|
EnvVars: []string{"DIR"},
|
|
Value: "",
|
|
Destination: &dir,
|
|
Usage: "Directory to place the data streams in",
|
|
},
|
|
configFlag(),
|
|
contextFlag(),
|
|
debugFlag(),
|
|
},
|
|
Action: func(c *cli.Context) error {
|
|
if dir == "" {
|
|
return errors.New("No directory provided")
|
|
}
|
|
err := os.MkdirAll(dir, 0o700)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
log(c, "[-] Downloading CPE database...")
|
|
err = nvd.DownloadCPEDBFromGithub(dir, "")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
log(c, " Done\n")
|
|
|
|
log(c, "[-] Downloading CPE translations...")
|
|
err = nvd.DownloadCPETranslationsFromGithub(dir, "")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
log(c, " Done\n")
|
|
|
|
log(c, "[-] Downloading NVD CVE feed...")
|
|
err = nvd.DownloadNVDCVEFeed(dir, "")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
log(c, " Done\n")
|
|
|
|
log(c, "[-] Downloading EPSS feed...")
|
|
err = nvd.DownloadEPSSFeed(dir)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
log(c, " Done\n")
|
|
|
|
log(c, "[-] Downloading CISA known exploits feed...")
|
|
err = nvd.DownloadCISAKnownExploitsFeed(dir)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
log(c, " Done\n")
|
|
|
|
log(c, "[-] Downloading Oval definitions...")
|
|
err = oval.Sync(dir, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
log(c, " Done\n")
|
|
|
|
log(c, "[-] Downloading MSRC artifacts...")
|
|
ctx := context.Background()
|
|
err = msrc.SyncFromGithub(ctx, dir, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
log(c, " Done\n")
|
|
|
|
log(c, "[-] Downloading MacOffice release notes...")
|
|
err = macoffice.SyncFromGithub(ctx, dir)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
log(c, " Done\n")
|
|
|
|
log(c, "[+] Data streams successfully downloaded!\n")
|
|
return nil
|
|
},
|
|
}
|
|
}
|