Skip to content

Software inventory & vulnerabilities: Add Adobe plugins - #50006

Merged
juan-fdz-hawa merged 10 commits into
mainfrom
45414-software-inventory-vulnerabilities-add-adobe-plugins
Aug 6, 2026
Merged

Software inventory & vulnerabilities: Add Adobe plugins#50006
juan-fdz-hawa merged 10 commits into
mainfrom
45414-software-inventory-vulnerabilities-add-adobe-plugins

Conversation

@juan-fdz-hawa

@juan-fdz-hawa juan-fdz-hawa commented Jul 27, 2026

Copy link
Copy Markdown
Contributor

Resolves #45414

Checklist for submitter

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

  • Changes file added for user-visible changes in changes/, orbit/changes/ or ee/fleetd-chrome/changes.
    See Changes files for more information.

Testing

Summary by CodeRabbit

Summary

  • New Features

    • Added detection of Adobe CEP/UXP plugins to software inventory on macOS and Windows.
    • Plugins appear as “Plugin (Adobe)” with versions, host counts, install paths, and a dedicated icon.
  • Bug Fixes

    • Excluded Adobe plugins from vulnerability scanning to prevent inaccurate matches.
    • Improved plugin inventory ingestion and resilience.
  • Tests

    • Added coverage for Adobe plugin discovery, ingestion, formatting, and icon selection.

@codecov

codecov Bot commented Jul 28, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 12.90323% with 81 lines in your changes missing coverage. Please review.
✅ Project coverage is 68.25%. Comparing base (5e95589) to head (c166222).
⚠️ Report is 2 commits behind head on main.

Files with missing lines Patch % Lines
cmd/osquery-perf/agent.go 0.00% 80 Missing ⚠️
...ages/SoftwarePage/components/icons/AdobePlugin.tsx 50.00% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main   #50006      +/-   ##
==========================================
- Coverage   68.26%   68.25%   -0.02%     
==========================================
  Files        3949     3950       +1     
  Lines      252481   252648     +167     
  Branches    13291    13297       +6     
==========================================
+ Hits       172348   172434      +86     
- Misses      64698    64779      +81     
  Partials    15435    15435              
Flag Coverage Δ
backend 69.52% <4.76%> (-0.02%) ⬇️
frontend 61.43% <88.88%> (+<0.01%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

juan-fdz-hawa and others added 4 commits August 5, 2026 07:12
Relates to #49062 

Add `adobe_plugins` to `SOURCE_TYPE_CONVERSION` so the Type column
resolves "Plugin (Adobe)" everywhere `formatSoftwareType` is used:
software inventory, software versions, software title details, host
details, and device software.
Closes #49061

Adobe plugins are inventory-only: no vulnerability data source maps an
Adobe CEP or UXP extension to a CVE. Adobe files CVEs against the host
application (Photoshop, Acrobat, and so on) keyed to that app's version,
which Fleet already scans via the apps/programs sources, so any match on
an extension row would be a false positive pinned to the wrong version.

Added adobe_plugins to the excluded sources on the NVD/CPE software
iterator so they are excluded from vuln scanning.
Resolves #49060

Ingest fleetd's adobe_plugins table as a new `adobe_plugins` software
source, so Adobe Creative Cloud CEP and UXP extensions show up in
inventory on macOS and Windows hosts.

osquery-perf gets -common_adobe_plugins_software_count and
-software_adobe_plugins_query_fail_prob.
@juan-fdz-hawa juan-fdz-hawa linked an issue Aug 5, 2026 that may be closed by this pull request
35 tasks
getMatchedSoftwareIcon matches on name before source, and the name map holds
"adobe creative cloud", "adobe acrobat" and friends. A plugin named "Adobe
Creative Cloud Libraries" therefore resolved to the Creative Cloud
application icon and never reached the source map.

Add SOURCE_ICON_OVERRIDES_NAME, checked before the loose name match, letting
a source's icon win. Only adobe_plugins opts in, so a VSCode extension named
"Docker" still gets the Docker icon. Adds the first tests for
getMatchedSoftwareIcon, and repaints the icon's backing rect #fff to match
the other source icons.

Review follow-ups, no behavior change: parse the detail query's SELECT list
on commas so reformatting can't break the column-drift guard; rename the
"table doesn't exist" test case to say what it covers; note the query has no
ingest func; validate the adobe_plugins uninstall counts in osquery-perf.
@juan-fdz-hawa
juan-fdz-hawa force-pushed the 45414-software-inventory-vulnerabilities-add-adobe-plugins branch from d955acf to 9b99ca4 Compare August 5, 2026 11:45
@juan-fdz-hawa
juan-fdz-hawa marked this pull request as ready for review August 5, 2026 11:45
@juan-fdz-hawa
juan-fdz-hawa requested review from a team as code owners August 5, 2026 11:45
@coderabbitai

coderabbitai Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: e56068f7-fd94-48d8-9b43-5c1a5f2d319b

📥 Commits

Reviewing files that changed from the base of the PR and between c166222 and 4e455b7.

⛔ Files ignored due to path filters (1)
  • docs/Contributing/product-groups/orchestration/understanding-host-vitals.md is excluded by !**/*.md
📒 Files selected for processing (4)
  • cmd/osquery-perf/agent.go
  • server/service/osquery_test.go
  • server/service/osquery_utils/queries.go
  • server/service/osquery_utils/queries_test.go
🚧 Files skipped from review as they are similar to previous changes (4)
  • server/service/osquery_test.go
  • cmd/osquery-perf/agent.go
  • server/service/osquery_utils/queries_test.go
  • server/service/osquery_utils/queries.go

Walkthrough

Adds Adobe CEP and UXP plugin discovery to macOS and Windows software inventory. The server maps plugin metadata into software records and installed paths. osquery-perf simulates plugin results, failures, and uninstall behavior. The frontend formats plugins as Plugin (Adobe) and displays a dedicated icon. Adobe plugins are excluded from NVD CPE translation. Tests cover queries, ingestion, formatting, icons, platform availability, and exclusions.

Possibly related PRs

  • fleetdm/fleet#50039 — Implements related Adobe plugin inventory changes in the same query, preprocessing, test, and osquery-perf areas.
  • fleetdm/fleet#50568 — Modifies Adobe plugin vulnerability handling, including exclusion of adobe_plugins from NVD/CPE scanning.
🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 20.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Linked Issues check ❓ Inconclusive The changes address the linked issue, but the host vitals update cannot be verified because its Markdown file was excluded by the path filter. Review docs/Contributing/product-groups/orchestration/understanding-host-vitals.md, which was excluded by the !**/*.md path filter, and confirm the Adobe plugin reference was updated.
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely identifies the primary change: adding Adobe plugins to software inventory and vulnerability handling.
Description check ✅ Passed The description includes the linked issue, changes-file confirmation, automated testing, host-isolation testing, and manual QA confirmation.
Out of Scope Changes check ✅ Passed The changes remain within scope and support Adobe plugin inventory, presentation, testing, synthetic data, discovery, and vulnerability handling.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch 45414-software-inventory-vulnerabilities-add-adobe-plugins

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@cmd/osquery-perf/agent.go`:
- Around line 4119-4130: Add non-negative validation for
commonAdobePluginsSoftwareUninstallCount and
uniqueAdobePluginsSoftwareUninstallCount alongside the existing Adobe plugin
count checks, before agent creation. Use the same log.Fatalf validation pattern
and argument names, while preserving the existing upper-bound checks against
their corresponding install counts.

In `@frontend/pages/SoftwarePage/components/icons/AdobePlugin.tsx`:
- Around line 5-12: Update the root SVG element in AdobePlugin to include
viewBox="0 0 32 32", matching the 32×32 coordinate system used by its paths.
Preserve the existing props and SVG content.

In `@frontend/pages/SoftwarePage/components/icons/index.ts`:
- Around line 2407-2419: The icon resolution flow should apply source overrides
before strict name matching, so Adobe sources select AdobePlugin even when the
plugin name matches another icon such as Zoom. Update the surrounding resolver
logic before matchStrictNameSourceToIcon to prioritize
SOURCE_ICON_OVERRIDES_NAME and assign the result from
SOFTWARE_SOURCE_TO_ICON_MAP, then add a regression test covering name "zoom"
with source "adobe_plugins".
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 85a8f083-3bb4-4e51-bd08-c857118eae6f

📥 Commits

Reviewing files that changed from the base of the PR and between 192ac4e and 9b99ca4.

📒 Files selected for processing (13)
  • changes/45414-adobe-plugins
  • cmd/osquery-perf/agent.go
  • frontend/interfaces/software.tests.ts
  • frontend/interfaces/software.ts
  • frontend/pages/SoftwarePage/components/icons/AdobePlugin.tsx
  • frontend/pages/SoftwarePage/components/icons/index.tests.ts
  • frontend/pages/SoftwarePage/components/icons/index.ts
  • server/service/osquery.go
  • server/service/osquery_test.go
  • server/service/osquery_utils/queries.go
  • server/service/osquery_utils/queries_test.go
  • server/vulnerabilities/nvd/cpe.go
  • server/vulnerabilities/nvd/cpe_test.go

Comment thread cmd/osquery-perf/agent.go
Comment thread frontend/pages/SoftwarePage/components/icons/AdobePlugin.tsx
Comment thread frontend/pages/SoftwarePage/components/icons/index.ts Outdated
Document the software_adobe_plugins host vitals query
reference.

Also note in the vulnerability processing article that Fleet doesn't scan
Adobe plugins.
The software_adobe_plugins query mapped the table's host_application into
extension_for. That column lists the Adobe applications from the plugin's
manifest, so it changes when a plugin gains or drops support for one, while
the plugin keeps its bundle identifier.

extension_for is part of a software title's identity, so Fleet treats the
changed value as a new title. But software_titles also has a unique key on
(bundle_identifier, additional_identifier), which ignores extension_for and
is 0 for every source except ios_apps and ipados_apps. The second title
collides, its INSERT IGNORE is dropped silently, and the follow-up lookup
still keys on extension_for, so the software row is written with a NULL
title_id and logs "inserting software without title_id" on every check-in.
It never recovers, because the blocking title never goes away, and a row
with no title can't appear on the Software page.

Adobe plugins are the first source to combine a real bundle identifier with
a varying extension_for: the browser and IDE extension sources report no
bundle identifier, and every source that does report one hardcodes
extension_for to empty. Blanking it makes Adobe plugins behave like those
sources. Nothing is lost, because the Type column shows a flat
"Plugin (Adobe)" and never displays the host application. The underlying
schema/matcher disagreement is untouched and still affects any future source
that varies extension_for under a stable bundle identifier.

Also drop the frontend guard that suppressed the Type suffix for
adobe_plugins, now that the field is always empty, update the osquery-perf
generator and the ingestion fixtures to match, and regenerate the host
vitals reference.
Comment thread server/service/osquery_utils/queries.go Outdated
SELECT
name,
version,
bundle_id AS bundle_identifier,

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

software_adobe_plugins selects bundle_id AS bundle_identifier, putting plugin titles on the source-agnostic software_titles unique keys — so a plugin whose id collides with a macOS app's bundle id, or with an earlier NULL-bundle title created from the same extension dir on a host with an unreadable manifest, gets its title INSERT IGNORE'd and its software row stuck at title_id = NULL (invisible on the Software page, error logged every check-in).

We should select '' AS bundle_identifier like every other extension source (vscode_extensions, jetbrains_plugins) and let titles dedupe on (name, source, extension_for).

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done in 4e455b7

@sharon-fdm sharon-fdm left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I only reviewed :
docs/Contributing/product-groups/orchestration/understanding-host-vitals.md

Relying on Dante's approval for the rest of the files.

@juan-fdz-hawa
juan-fdz-hawa merged commit e29210e into main Aug 6, 2026
6 checks passed
@juan-fdz-hawa
juan-fdz-hawa deleted the 45414-software-inventory-vulnerabilities-add-adobe-plugins branch August 6, 2026 21:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Software inventory: Add Adobe plugins

3 participants