created mac vim mapping software transformer (#38333)

**Related issue:** Resolves #33005

# Checklist for submitter

If some of the following don't apply, delete the relevant line.

- [x] Changes file added for user-visible changes in `changes/`,
`orbit/changes/` or `ee/fleetd-chrome/changes`.
See [Changes
files](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/guides/committing-changes.md#changes-files)
for more information.

## Testing

- [x] Added/updated automated tests
- [x] QA'd all new/changed functionality manually
This commit is contained in:
Konstantin Sykulev
2026-01-21 12:33:14 -06:00
committed by GitHub
parent 2aa9bb2e35
commit 1330de8653
3 changed files with 112 additions and 0 deletions
+1
View File
@@ -0,0 +1 @@
* Fixed false positive for CVE-2023-41036 for macvim
+38
View File
@@ -395,6 +395,44 @@ var (
s.Version = newVersion
},
},
{
// MacVim uses dual versioning: MacVim release numbers (r178, r179, etc.) and bundled Vim versions (9.0.1897, 9.1.0, etc.)
// NVD CVEs reference MacVim release numbers, but Fleet inventories the bundled Vim version from macOS metadata.
// See https://github.com/macvim-dev/macvim/releases for version mappings.
matches: func(s *fleet.Software) bool {
return s.Name == "MacVim" && s.BundleIdentifier == "org.vim.MacVim" && s.Source == "apps"
},
mutate: func(s *fleet.Software, logger log.Logger) {
vimToMacVimMap := map[string]string{
// r182 series
"9.1.2068": "182.1", // r182.1 (prerelease)
"9.1.1887": "182", // r182 (stable)
// r181 series
"9.1.1577": "181.2", // r181.2 (prerelease)
"9.1.1251": "181.1", // r181.1 (prerelease)
"9.1.1128": "181", // r181 (stable)
// r180 series
"9.1.1050": "180.2", // r180.2 (prerelease)
"9.1.1000": "180.1", // r180.1 (prerelease)
"9.1.0727": "180", // r180 (stable)
// r179 series
"9.1.0695": "179.1", // r179.1 (prerelease)
"9.1.0": "179", // r179 (stable)
// r178 series
"9.0.1897": "178", // r178 (stable)
}
if macVimRelease, ok := vimToMacVimMap[s.Version]; ok {
level.Debug(logger).Log("msg", "converting MacVim Vim version to release number",
"original_version", s.Version, "macvim_release", macVimRelease)
s.Version = macVimRelease
} else {
// For unknown versions, leave as-is to avoid false negatives
level.Debug(logger).Log("msg", "unknown MacVim Vim version, unable to convert to release number",
"version", s.Version)
}
},
},
{
// Homebrew's "imp" (Integrative Modeling Platform) is incorrectly matched against
// Horde IMP CPEs. Rename the Homebrew package to prevent incorrect CPE
+73
View File
@@ -2316,6 +2316,79 @@ func TestMutateSoftware(t *testing.T) {
Source: "programs",
},
},
{
name: "MacVim with known Vim version (9.0.1897 -> 178)",
s: &fleet.Software{
Name: "MacVim",
Version: "9.0.1897",
Source: "apps",
BundleIdentifier: "org.vim.MacVim",
},
sanitized: &fleet.Software{
Name: "MacVim",
Version: "178",
Source: "apps",
BundleIdentifier: "org.vim.MacVim",
},
},
{
name: "MacVim with known Vim version (9.1.0 -> 179)",
s: &fleet.Software{
Name: "MacVim",
Version: "9.1.0",
Source: "apps",
BundleIdentifier: "org.vim.MacVim",
},
sanitized: &fleet.Software{
Name: "MacVim",
Version: "179",
Source: "apps",
BundleIdentifier: "org.vim.MacVim",
},
},
{
name: "MacVim with prerelease Vim version (9.1.1577 -> 181.2)",
s: &fleet.Software{
Name: "MacVim",
Version: "9.1.1577",
Source: "apps",
BundleIdentifier: "org.vim.MacVim",
},
sanitized: &fleet.Software{
Name: "MacVim",
Version: "181.2",
Source: "apps",
BundleIdentifier: "org.vim.MacVim",
},
},
{
name: "MacVim with unknown Vim version (leaves as-is)",
s: &fleet.Software{
Name: "MacVim",
Version: "9.2.9999",
Source: "apps",
BundleIdentifier: "org.vim.MacVim",
},
sanitized: &fleet.Software{
Name: "MacVim",
Version: "9.2.9999",
Source: "apps",
BundleIdentifier: "org.vim.MacVim",
},
},
{
name: "MacVim from wrong source (not transformed)",
s: &fleet.Software{
Name: "MacVim",
Version: "9.0.1897",
Source: "programs",
},
sanitized: &fleet.Software{
Name: "MacVim",
Version: "9.0.1897",
Source: "programs",
},
},
{
name: "Homebrew imp (Integrative Modeling Platform)",
s: &fleet.Software{