Written by Andrew Lilley Brinker
Posted on December 11, 2024
Introducing Hipcheck 3.8.0, with stable support for third-party plugins, a suite of initial plugins, and a lot of polish for the plugin user experience.
In Hipcheck 3.6.2, we introduced experimental support for plugins, which add support for new data sources and analyses to Hipcheck. The goals of the plugin system are to enable anyone to expand Hipcheck's analysis capabilities themselves and to ensure it's the best tool for users to express and enforce their own policies for third-party dependencies.
Plugins in Hipcheck work by submitting queries to each other; when a plugin is specified in a user's policy file, Hipcheck runs that plugin's "default query," sending information about the target source repository and any package the user is analyzing. Those plugins can then make queries back to Hipcheck, which Hipcheck dispatches out to the appropriate plugin. For every query, Hipcheck also caches the result and can reuse it for any other plugins that need it. Even better, plugins expose JSON schemas for all queries which Hipcheck validates, and which dependent plugins can use to ensure compatibility.
Since 3.6.2, we've been working on testing and improving the plugin system,
and on transitioning Hipcheck's existing data sources and analyses out from
the hc
program itself and into plugins.
This transition, to make all data sources and analyses run as plugins, ensures we gain firsthand experience with the plugin system and with our Rust plugin SDK. During this transition we identified bugs and deficiencies in the plugin system which have been fixed or have spurred the creation of RFDs proposing enhancements, including:
We expect to implement these RFDs in future versions of Hipcheck.
The following table lists all of the plugins added, and links to the documentation for each plugin:
The plugins listed as being "top-level" can be used directly in a policy file, because they support a default query accepting a Hipcheck "target" to analyze.
The "download manifest locations" specify the files Hipcheck uses to determine
what artifacts to download for a plugin based on your desired version and
current architecture. You specify a plugin
in a plugins
block in your
policy file, like so:
plugins {
plugin "mitre/activity" version="0.1.0" \
manifest="https://hipcheck.mitre.org/dl/plugin/mitre/activity.kdl"
}
This release also includes improvements for the Hipcheck Rust SDK, including:
New Features
Bugfixes
Hipcheck is an open source project, and we'd love to get more contributors
involved in building it. This doesn't just mean contributing to hc
itself
or building plugins, but also contributing to the website, improving the
documentation, asking questions and sharing ideas in the issue tracker
and discussions forum, and writing about your own experiences and lessons
with Hipcheck for others to read.
We have big plans for version 3.9.0 and beyond, including:
hc ready
commandsalsa
, the Rust package we use internally for query caching, to
the latest major versionYou can the full roadmap on GitHub.
I want to say a big "Thank you!" to everyone who supports the project here at MITRE, to CISA for sponsoring our current work on it, to our prior government sponsors who have helped advance Hipcheck, and to everyone who has contributed, given feedback, or encouraged us in building it.
Thank you especially to the contributors for this release: