| title | Grafana Plugin Unsigned | |||||
|---|---|---|---|---|---|---|
| slug | grafana-plugin-unsigned | |||||
| technologies |
|
|||||
| severity | medium | |||||
| tags |
|
|||||
| related |
|
|||||
| last_reviewed | 2026-06-27 |
t=2026-06-24T08:14:09+0000 lvl=warn msg="Skipping loading plugin due to problem with signature" logger=plugin.signature.validator pluginID=acme-custompanel status=unsigned
Plugin error: signature check failed: unsigned plugin
plugin "acme-custompanel" is unsigned and was not loaded
Since Grafana 7, plugins must be cryptographically signed by Grafana. On startup,
the plugin.signature.validator checks each installed plugin; any plugin with no
valid signature (status=unsigned), an invalid signature, or one whose files
have been modified (modified) is not loaded unless explicitly allowed. The
plugin then disappears from the UI and any data source/panel that depends on it
breaks. This is a security control, not a bug β it prevents loading tampered or
untrusted code.
- grafana (plugin signature validator / plugin loader)
medium β only dashboards/data sources using the unsigned plugin are affected; the rest of Grafana runs normally. It is higher if the unsigned plugin is a core data source for many dashboards.
- A community/internal plugin was installed manually (copied into the plugins dir) and was never signed.
- The plugin is genuinely unsigned/private (in-house panel or data source).
status=modifiedβ files in a signed plugin were edited, invalidating the signature.status=invalidβ wrong signature type for the install location (e.g. aprivatesign for a different root URL).- Plugin version mismatch after a partial upgrade.
At boot, Grafana reads each plugin's MANIFEST.txt and verifies it against
Grafana's signing key, then checks that the plugin files match the manifest
hashes. If verification fails or the manifest is absent, the validator marks the
plugin (unsigned/invalid/modified) and the loader skips it. Skipped plugins
do not register their panels or data sources, so anything referencing them errors
or vanishes. The status field is the key: unsigned (no manifest) is handled
differently from modified (tampered) or invalid (wrong sign).
# Startup signature warnings/errors per plugin
journalctl -u grafana-server --since "20 min ago" | grep -i "signature\|plugin.*unsigned\|skipping loading plugin"
# List installed plugins and signature state via API (admin, read-only)
curl -s -H "Authorization: Bearer $GRAFANA_TOKEN" \
http://localhost:3000/api/plugins | jq '.[] | {id, signature, signatureType, enabled}'
# List installed plugins on disk
grafana-cli plugins ls
# Current allow-list and plugins dir (read-only)
grep -Ei "allow_loading_unsigned_plugins|^\s*plugins\s*=" /etc/grafana/grafana.ini{
"id": "acme-custompanel",
"signature": "unsigned",
"signatureType": "",
"enabled": false
}
signature: unsigned confirms the plugin was skipped for lack of a signature.
modified means files were changed; valid is the healthy state.
-
Preferred: install a properly signed build of the plugin from the Grafana catalog:
grafana-cli plugins install acme-custompanel sudo systemctl restart grafana-server
-
For a genuinely private/in-house plugin, sign it with the Grafana plugin signing toolkit (
@grafana/sign-plugin) for your root URL. -
Only as a deliberate, audited exception, allow specific unsigned plugins:
[plugins] allow_loading_unsigned_plugins = acme-custompanel
Restart Grafana. Risk: this disables a security control β scope it to exact plugin IDs and never use it for plugins you do not control.
-
For
status=modified, reinstall the plugin cleanly to restore original files.
# Plugin now reports a valid signature and is enabled
curl -s -H "Authorization: Bearer $GRAFANA_TOKEN" \
http://localhost:3000/api/plugins/acme-custompanel/settings \
| jq '{signature, enabled}' # Expect: signature "valid"/"internal", enabled true- Install plugins from the official catalog so they arrive signed.
- Sign in-house plugins as part of CI and pin versions.
- Treat
allow_loading_unsigned_pluginsas a break-glass setting, reviewed in code review.
grafana Β· plugin Β· signature Β· security Β· production