Skip to content

fix: land TechVault on env-packs 6.2.1 (compat, detection, CVE gates, docs) - #1248

Merged
Brad-Edwards merged 9 commits into
devfrom
fix/techvault-env-packs-621-compat
Oct 8, 2026
Merged

Brad-Edwards merged 9 commits into
devfrom
fix/techvault-env-packs-621-compat

Conversation

@Brad-Edwards

@Brad-Edwards Brad-Edwards commented Oct 6, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Make TechVault run on raes-env-packs 6.2.1 (which carries the Suricata rule fix, env-packs #418), fix the detection end to end, clear the dependency/image CVE gates the 6.2.1 image rebuild surfaced, and document the pack+adapter install path. This consolidates the techvault fix, the repo-wide security fixes, and the docs into one green PR (previously split across #1249 and #1250, now closed).

TechVault 6.2.1 compatibility

  • Pin the aptl_techvault providers (capture, serving, startup, planning, verification) to the 6.2.1 pack set-digests (techvault 1229f94f…, techvault-participant-study 03baae36…). The 6.2.0 pins rejected admission with ScenarioCaptureProviderError: provider-missing.
  • Move raes-env-packs to 6.2.1; regenerate uv.lock and the hash-locked requirements/*.txt.
  • Stop excluding the built-in Suricata ruleset 0475-suricata_rules.xml in the Wazuh manager config. Rule 303020 chains off built-in rule 86601, so the built-in base must load for a web attack to surface as 303020.
  • Update the affected pack-digest and version assertions in tests.

Repo-wide security (image/dependency CVE gates)

  • proxy-addr → 2.0.8 in all nine MCP lockfiles (CVE-2026-90711, CRITICAL, transitive via express).
  • Drop the unused yarn and corepack from the generic-systemd-node22-base image. The base bundles them; their deps (e.g. postcss-selector-parser) failed the Trivy image gate for tooling this substrate never runs (it uses npm only).

Docs

Validation

On a clean GCE VM (plain Ubuntu, Docker-direct), base techvault on 6.2.1: aptl lab start reaches "Lab is ready", exit 0; 28/28 containers healthy; the suricata-wazuh-sqli native evidence passes; wazuh-logtest fires rule 303020 on a real eve alert. The golden image shifter-techvault-20261006 was baked from this.

env-packs 6.2.1 changed the TechVault pack set-digest and made the authored
Suricata rule 303020 chain off the built-in Wazuh rule 86601 (env-packs #418).
Two lilrae-side changes are needed so 6.2.1 boots and the web-attack detection
works.

- Pin the aptl_techvault providers (capture, serving, startup, planning,
  verification) to the 6.2.1 pack set-digests: techvault
  sha256:1229f94f... and techvault-participant-study sha256:03baae36...
- Move the raes-env-packs requirement and the hash-locked requirement
  exports to 6.2.1; regenerate uv.lock.
- Stop excluding the built-in Suricata ruleset 0475-suricata_rules.xml in
  the Wazuh manager config. Rule 303020 chains off built-in rule 86601, so
  the built-in base must load for a network web attack to surface as 303020.
- Update the pack-digest assertions in the affected tests.

Validated on a clean GCE VM: base techvault boots to ready with 28 healthy
containers, and the SQLi -> Suricata -> Wazuh 303020 native evidence passes.
Three contract tests still asserted version("raes-env-packs") == "6.2.0"; the pack now resolves 6.2.1. Update the assertions and two version-specific source comments.
proxy-addr 2.0.7 has CRITICAL CVE-2026-90711 (IP spoofing via IPv4-mapped IPv6 trust subnet), pulled transitively through express in all nine MCP packages. Bump the resolved version to 2.0.8 in each package lockfile. npm audit (high+) is clean afterward. This clears the dependency-audit and Trivy critical that currently fails every CI run, including on dev.
The node:22-trixie-slim base bundles yarn and corepack. This substrate uses npm only (and already replaces npm with 11.x). Their bundled dependencies (e.g. postcss-selector-parser) fail the Trivy image gate for tooling we never run. Remove them in the npm-replacement layer.
Document how LilRAE consumes a scenario as two installed parts: the content
pack (resolved from raes-env-packs by identity) and its adapter (the aptl.*
entry points keyed by the pack id). Cover selecting the pack in aptl.json,
verifying with aptl lab scenarios, and troubleshooting unknown-id,
missing-pack, and missing-adapter errors. Add it to the Lab Guide nav.
Add the three changelog fragments and the install-scenario-packs guide to tracked-file-inventory.tsv, and list the guide in the scenario-pack terminology inventory, so the rename-boundary and terminology contract tests stay green.
@Brad-Edwards Brad-Edwards changed the title fix: realize TechVault against env-packs 6.2.1 and fire rule 303020 fix: land TechVault on env-packs 6.2.1 (compat, detection, CVE gates, docs) Oct 6, 2026
The proxy-addr 2.0.8 bump changed the mcp-red/indexer/wazuh package-lock.json bytes. Update their pinned sha256 in asset-lock.json, and the asset-lock sha256 in profile.json, so the participant-profile reference-digest chain verifies.
The Trivy image gate flagged postcss-selector-parser 7.1.4 (CVE-2026-104844, fixed 7.1.6) at usr/local/lib/node_modules/npm/node_modules/. It is bundled in npm itself; no npm release (through 12.2.0) has adopted 7.1.6, so a version bump cannot fix it. npm's install/ci path does not use it, so remove it in the npm-replacement layer. Also keep dropping the unused yarn/corepack tooling. The removal precedes the MCP npm ci build, which would fail if npm needed it.
The node22 base image failed the Trivy image scan because npm bundles
postcss-selector-parser 7.1.4, which carries CVE-2026-104844 (fixed in
7.1.6). The earlier attempt to delete the bundled module broke `npm ci`,
because npm requires the module at install time.

Upgrade the bundled copy in place to 7.1.6. The fixed release keeps the
same runtime dependencies (cssesc, util-deprecate), which npm already
bundles. Verify the download against its published sha512 integrity and
assert the installed version.
@Brad-Edwards
Brad-Edwards merged commit a5833df into dev Oct 8, 2026
45 checks passed
Brad-Edwards added a commit that referenced this pull request Oct 11, 2026
…ed pebble (#1270)

* fix(deps): bump @modelcontextprotocol/sdk to 1.31.0 in the MCP packages

The MCP TypeScript SDK from 1.12.0 up to 1.31.0 (exclusive) has
GHSA-6qxp-vccf-f47h / CVE-2026-104850 (high): its OAuth client could send
stored credentials to an authorization server chosen by the MCP server. All
nine MCP packages locked 1.26.0 or 1.29.0, which fails `npm audit --omit=dev
--audit-level=high` in the Dependency vulnerability scan and the Trivy
filesystem scan on dev.

Raise each package's range to ^1.31.0 and lock 1.31.0, the first fixed
release. The fix only touches the SDK's OAuth code (client auth and the
server proxy auth provider), which these servers do not use: they use the
low-level Server, StdioServerTransport and the tools/list and tools/call
request schemas, so no code change is needed. One change between 1.26.0 and
1.31.0 reaches that path: since 1.30.0 a single stdio message over 10 MB
closes the transport.

The new mcp-red, mcp-indexer and mcp-wazuh lockfile bytes change their
pinned sha256 in the guided-purple asset lock, which changes the asset-lock
sha256 in profile.json. Update both so the participant-profile digest chain
verifies.

* fix(deps): bump dompurify to 3.4.16 in web

DOMPurify up to 3.4.15 has GHSA-p98j-92pf-mc4p and GHSA-6688-9rhm-gjv2
(both low, fixed in 3.4.16). npm audit reports them in web on dev; they sit
below --audit-level=high, so they do not fail the Dependency vulnerability
scan. Both need the IN_PLACE option, which web/src/lib/markdown.ts does not
use (it calls DOMPurify.sanitize on a string).

Raise the range to ^3.4.16 and lock 3.4.16 so the audit reports no web
finding at any level.

* fix(containers): apply published Alpine fixes in the alpine-based images

The Trivy image gate fails the appliance-egress-proxy,
network-boundary-helper and web images on zlib CVE-2026-85091 (medium):
they ship zlib 1.3.2-r0 and the fix is 1.3.2-r1. No newer base image
carries it yet: alpine:3.24 (3.24.2, sha256:294b683c) and alpine:3.23
(3.23.6), which caddy:2-alpine builds on, were last pushed 2026-09-18,
while zlib 1.3.2-r1 reached the v3.24 and v3.23 main repositories on
2026-10-06.

Run `apk upgrade --no-cache` before adding the pinned packages, the same
step operator-access-proxy already takes (#1203), so each image takes the
published Alpine fixes its pinned base predates.

* fix(containers): remove the unused pebble binary from the Ubuntu 26.04 images

The ubuntu:26.04 rootfs ships /usr/bin/pebble (canonical/pebble
v1.32.3-0.20260908071357-f1688182910f, built with go1.26.7). Trivy reports
Go stdlib CVE-2026-78667 and CVE-2026-97031 (high) and CVE-2026-94439 and
CVE-2026-97032 (medium) in it, fixed in Go 1.26.9 and 1.27.2 (released
2026-10-08). No dpkg package owns the file, so `apt-get upgrade` cannot
replace it, and the newest ubuntu:26.04 image (resolute-20260927) is the
digest already pinned. This fails the base-ubuntu, reverse,
generic-samba-ad-base and generic-samba-ad-wazuh-agent-base image scans.

Nothing runs pebble. base-ubuntu and reverse boot systemd
(/usr/sbin/init), generic-samba-ad-base runs tini and then samba, and
generic-samba-ad-wazuh-agent-base builds on it. No file in the repository
or in the installed raes and raes-env-packs 6.2.1 packages refers to it.
Delete it in each image's existing apt layer, as #1248 deleted the unused
yarn and corepack from the node22 base. generic-samba-ad-wazuh-agent-base
inherits the removal from its parent.

* docs(containers): say the Alpine upgrade step applies every pending update

The `apk upgrade --no-cache` step from fcd5d74 applies every pending
Alpine update, not only zlib. In run 38035974153 it upgraded libcrypto3
and libssl3 (3.5.8-r0 to 3.5.9-r0) and zlib (1.3.2-r0 to 1.3.2-r1) in
appliance-egress-proxy, network-boundary-helper and web, but the comments
named only zlib. Say that the step takes every update the pinned base
predates, list the current ones, and keep zlib's CVE-2026-85091 as the
reason the scan needs it.

* fix(web): build Caddy with patched Go and x/net

The upstream caddy:2-alpine binary uses Go 1.26.8 and golang.org/x/net
0.59.0. Trivy reports CVE-2026-78667 and CVE-2026-78669 for them. No
newer upstream image has the fixes.

- Build Caddy v2.11.7 from source with Go 1.26.9 and x/net 0.60.0.
- Replace the upstream binary in the runtime stage.
- Add a gomod Dependabot entry for the new module.
- Add the new files to the tracked-file ledger.

---------

Co-authored-by: Brad Edwards <j.bradley.edwards@gmail.com>
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.

1 participant