diff --git a/changes/35192-imp-correct-classification b/changes/35192-imp-correct-classification new file mode 100644 index 0000000000..5144468e8a --- /dev/null +++ b/changes/35192-imp-correct-classification @@ -0,0 +1 @@ +* Differentiated IMP and Integrative Modeling Platform (IMP) while running vulnerability scanning. \ No newline at end of file diff --git a/server/vulnerabilities/nvd/cpe.go b/server/vulnerabilities/nvd/cpe.go index 3d64c5f94b..7de65280b7 100644 --- a/server/vulnerabilities/nvd/cpe.go +++ b/server/vulnerabilities/nvd/cpe.go @@ -395,6 +395,17 @@ var ( s.Version = newVersion }, }, + { + // Homebrew's "imp" (Integrative Modeling Platform) is incorrectly matched against + // Horde IMP CPEs. Rename the Homebrew package to prevent incorrect CPE + // matching with horde:imp. + matches: func(s *fleet.Software) bool { + return s.Name == "imp" && s.Source == "homebrew_packages" + }, + mutate: func(s *fleet.Software, logger log.Logger) { + s.Name = "integrative-modeling-platform" + }, + }, } ) diff --git a/server/vulnerabilities/nvd/cpe_test.go b/server/vulnerabilities/nvd/cpe_test.go index 73d87dc7c8..5d5a284e69 100644 --- a/server/vulnerabilities/nvd/cpe_test.go +++ b/server/vulnerabilities/nvd/cpe_test.go @@ -2316,6 +2316,45 @@ func TestMutateSoftware(t *testing.T) { Source: "programs", }, }, + { + name: "Homebrew imp (Integrative Modeling Platform)", + s: &fleet.Software{ + Name: "imp", + Version: "2.23.0_13", + Source: "homebrew_packages", + }, + sanitized: &fleet.Software{ + Name: "integrative-modeling-platform", + Version: "2.23.0_13", + Source: "homebrew_packages", + }, + }, + { + name: "imp from non-Homebrew source (should not be renamed)", + s: &fleet.Software{ + Name: "imp", + Version: "5.0.22", + Source: "programs", + }, + sanitized: &fleet.Software{ + Name: "imp", + Version: "5.0.22", + Source: "programs", + }, + }, + { + name: "Homebrew imp with different version", + s: &fleet.Software{ + Name: "imp", + Version: "2.20.0", + Source: "homebrew_packages", + }, + sanitized: &fleet.Software{ + Name: "integrative-modeling-platform", + Version: "2.20.0", + Source: "homebrew_packages", + }, + }, } { t.Run(tc.name, func(t *testing.T) { require.NotPanics(t, func() { mutateSoftware(tc.s, log.NewNopLogger()) })