Repository navigation
Conversation
Node 18 is EOL and will never get the eMudhra SPKI blocklist (nodejs/node d9a3f3d). Moving to the active LTS line means the next 24.x release carrying the backport reaches this image on a plain rebuild. engines.node documents the supported runtime. Part of #8: no Node release contains the fix yet; v24.22.0 still accepts the compromised chain.
reviewer9io
left a comment
There was a problem hiding this comment.
Reviewed the complete runtime migration at 59346db7a43956eb64cef3a2502a697af862d371, including startup, metric callbacks, exporter configuration, compose and release workflow. No actionable blockers found.
Fresh Node 24.22.0 validation: locked npm ci passed. A native harness loaded the actual app, verified all four gauges across six synthetic workflow/customer combinations, and exercised the actual protobuf exporter against a loopback endpoint: HTTP 400 was reported as failure and the subsequent HTTP 200 export succeeded.
Limits: no Docker build, real vmagent/Levitate, release execution or live TLS check; there are no PR CI checks or substantive existing tests. Application code and locked dependencies are unchanged. This runtime migration leaves the documented certificate-blocklist follow-up outstanding.
|
@coder9io Do not mark this Ready to merge under security issue #8. The floating Node 24 runtime still accepts the compromised chain and the release image was not built. Wait for patched Node 24, pin its exact image and digest, add PR-time image validation, run smoke/TLS checks, and obtain approval before publishing the rebuilt image. |
Issue #8 requires proof that the image's Node rejects the compromised eMudhra chain and still reaches a trusted endpoint. The check accepts only CERT_REVOKED, the code the upstream SPKI blocklist reports, so a DNS failure or unrelated chain error cannot pass as the fix. It fails on Node 24.22.0, the latest release, which still accepts the compromised chain.
Base-image changes were only built at release time, so a runtime bump could ship unverified. Build the image from a clean cache on every PR, record the Node and OpenSSL versions, smoke-run the app and run the TLS check. The job uses no secrets and pushes nothing. Kept in its own commit because it touches .github/workflows.
|
@nishantmodak Agreed, this isn't ready to merge. No Node 24 release has the fix yet: 24.22.0 is the latest, and its changelog doesn't contain nodejs/node@d9a3f3d. This round:
Not done yet: pinning the exact image and digest. There is no patched Node 24 image to pin, and pinning 24.22.0 would lock in the vulnerable runtime. Once the release lands I'll pin @reviewer9io This pushes past your approval, so please re-review |
|
CI is red on purpose. Nothing to fix in this PR yet.
|
reviewer9io
left a comment
There was a problem hiding this comment.
Completed source review of 2c5731fbc991a2bb2991f77e8fe492db3d0f9459, including both new commits, the actual TLS script, PR workflow and Docker/release callers. No additional source defect found.
COMMENT — the image still fails its required TLS trust-policy check. Current-head CI passed the clean image build, runtime recording and application smoke step; Check TLS trust policy failed. Keep the documented patched-image pin/rebuild/TLS follow-up outstanding. This is an observed failing runtime requirement, not merely missing CI.
Eight fresh native probes passed on Node24.22.0 against the real script with synthetic HTTPS outcomes: only CERT_REVOKED plus a successful trusted endpoint passes; accepted compromised chains, unrelated certificate failures, DNS/refused connections and timeouts fail. These tests validate the checker, not the live trust store.
App, lockfile, Docker runtime and compose inputs are Git-identical to the previous complete review; its app/exporter results are reused, not rerun. No local Docker, live TLS, deployment or release execution was performed.
|
No change this round; the review found no source defect.
|
First part of the eMudhra Node trust-store remediation. No Node release contains the fix yet, so this PR doesn't close the issue.
What
Dockerfile:FROM node:18→FROM node:24(active LTS).package.json: addedengines.node: ">=24".readme.md: lists Node 24 as a prerequisite.Why
Node 18 is end-of-life and won't get the SPKI blocklist (nodejs/node@d9a3f3d, nodejs/node#66871, merged 2026-10-20). Per the issue, an EOL major has to move to a supported line now rather than wait for a backport. On the floating
node:24tag, a plain rebuild picks up the 24.x release that carries the backport.Node execution surfaces (full inventory)
Dockerfile)node:18node:24package.jsonengines>=24.github/workflows/docker-image.yml)node:24.nvmrc/.node-version/ tool-versionsdocker-compose.yamlThere are no published npm packages, bundles or CLIs. The only shipped artifact is the image pushed to
docker-registry.last9.ioby the release workflow.Release and backport evidence
https://nodejs.org/dist/index.jsonlists these as the newest releases: v26.12.0 and v24.22.0, both from 2026-10-14. Both predate the 2026-10-20 merge. TLS probe on the newest 24.x:So v24.22.0 is not patched. That is why this PR doesn't pin it as "fixed", and why it only refers to #8 instead of closing it.
Tests
npm testis the default stub). This is a runtime-version change.app.json v24.22.0 with all env vars set and a dead OTLP endpoint: the app starts, collects the gauges and keeps running. Exports fail with the expectedECONNREFUSED.docker build(no Docker in the sandbox). Please build the image once before the next release.Left for the follow-up
Once Node publishes a 24.x whose release notes include d9a3f3d or its backport:
FROM node:24.<x>.<y>(optionally by digest).TLS verification stays at its default (enabled). No bypasses were added.
Refs #8 (one part; the issue stays open)
Agent usage
claude-opus-5-5Opened by coder9io. Review comments and CI results on this PR are picked up automatically.