Repository navigation
v0.2.0
A security release: it fixes the findings of a review of meles itself
(permissions, admission, network paths, dependencies). It has incompatible
changes; read Upgrade before you update.
Upgrade
-
Apply the CRDs first. Helm installs CRDs but never updates them:
helm pull oci://ghcr.io/movray/charts/meles --version 0.2.0 --untar kubectl apply --server-side --force-conflicts -f meles/crds/
-
Scan results moved from
.reportto.statusof each
MalwareReport (a status subresource). Results from 0.1.0 are dropped on
the upgrade, and the operator scans every image in the cluster once
more (it pulls each image again; about 45 minutes for 100 images in our
test cluster). Meanwhile reports have no result yet; reports of
CronJobs get one at their next run. Scripts,kubectlJSONPath and
dashboards that read.reporthave to read.status. -
Images from registries on private addresses (10/8, 172.16/12,
192.168/16, 100.64/10, fc00::/7) are refused by the server, the operator
and the Harbor adapter unless the registry is a configured mirror or
proxy, the Harbor that called the adapter, or listed in
scan.allowPrivateRegistries(--allow-private-registry). Loopback and
link-local addresses are always refused, plain HTTP only with
--insecure-registry. The CLI is unchanged. -
Scan gate (only with
operator.gate.enabled): the new
operator.gate.protectis on by default. In gated namespaces:-
meles.io/gate: skipneeds the namespace label
meles.io/gate-skip=allowed; without it, the pod is refused:kubectl label namespace <namespace> meles.io/gate-skip=allowed
-
new pods with
spec.nodeNameare refused (except from the kubelet), -
the image of a pod can no longer be changed in place; change the
workload instead.
To see first what it would refuse, set
operator.gate.protect.validationActions: [Warn];
operator.gate.protect.enabled: falsekeeps the behaviour of 0.1.0. -
Security
- Forged scan results. The result of a MalwareReport could be written
by anyone withpatchon MalwareReports, including the server for its
rescan button, and the operator trusted existing reports, for reuse also
those of other namespaces. Results are now in the status subresource,
which only the operator may write. - Scan gate bypass by namespace members. Anyone who could create or
update pods in a gated namespace could let an image run unscanned: opt
out, bind the pod to a node, remove the scheduling gate, switch to audit
mode or change the image after the release. A ValidatingAdmissionPolicy
(operator.gate.protect) refuses all of these. A pod created with the
gate andmeles.io/gate-mode: auditwas held in audit mode in an
enforcenamespace; the webhook now always sets the mode of the
namespace. - Server-side request forgery. Image references from pods and UI runs
could make meles connect to internal services or the cloud metadata
endpoint and put the answer into reports and events. Every connection is
now checked after the DNS lookup (redirects and token realms included),
and error bodies are cut short. - Open redirect. The back link of the ignore form accepted a tab
(/\t/evil.example), which browsers turn into a link to another host. - HTTP/2 vulnerabilities in
golang.org/x/netreachable from the
server and the registry client (GO-2026-6603, GO-2026-6610,
GO-2026-6611, GO-2026-6612, GO-2026-6617): updated to v0.62.0.
Other changes
- The history views bound the number of days they allocate for.
- CI runs
govulncheckon every push, weekly and before every release; a
known vulnerability in a code path meles reaches stops the release.
Changelog
Features
Fixes
- ee7af97: fix(api)!: keep the scan result in the status subresource (@movray)
- db3cb57: fix(deps): golang.org/x/net v0.62.0 (@movray)
- f7eb4cf: fix(operator): take the gate mode from the namespace for gated pods (@movray)
- 1cc2f4b: fix(server): refuse control characters in the back link (@movray)
- 5e720ea: fix(source): refuse internal addresses for references from others (@movray)
- c03da90: fix(store): bound the days of Daily and ClusterDaily (@movray)
Other changes
Image: ghcr.io/movray/meles:0.2.0 (linux/amd64, linux/arm64)
Helm chart: helm install meles oci://ghcr.io/movray/charts/meles --version 0.2.0
Binaries, image and chart carry build provenance; verify with gh attestation verify
(see the README, section Install).