Skip to content

Take the site's dependencies past the four high advisories in its audit - #115

Closed
jmrplens wants to merge 1 commit into
mainfrom
chore/site-deps-audit
Closed

jmrplens wants to merge 1 commit into
mainfrom
chore/site-deps-audit

Conversation

@jmrplens

@jmrplens jmrplens commented Oct 14, 2026 •

Copy link
Copy Markdown
Owner

What this changes

pnpm audit --audit-level=high in site/ (the "Site dependency audit" job) fails on every branch with four high advisories that arrived in the advisory database, not in a commit. This takes each one to a patched version with the smallest change that reaches it:

  • sharp 0.35.4 to 0.35.5, librsvg CVE-2026-96889 (GHSA-wq5f-xc86-pv6w): a direct dependency, so package.json now asks for ^0.35.5.
  • http-cache-semantics 4.2.0 to 4.3.0 (GHSA-ch52-4w7c-c8xp) and source-map-js 1.2.1 to 1.2.2 (GHSA-68fv-2mgg-jv7q): every consumer's range already admits the fixed release (Astro asks for ^4.2.0), so pnpm update resolves them again and the lockfile changes nothing else.
  • basic-ftp 5.3.1 to 6.2.3 (GHSA-c475-qrg2-pj4r): fixed in 6.2.1 and in no 5.x release, and the one consumer, get-uri, asks for ^5.3.1 up to its latest release (8.0.1), so no parent update reaches a fix. It is an override in site/pnpm-workspace.yaml, written beside the existing ones with its reason. Forcing the major is safe here, unlike brace-expansion's: 6.0.0's only breaking change is that a client refuses a separate transfer host by default, and get-uri calls only Client, access, lastMod, list, downloadTo and close, whose declarations are identical in 5.3.1 and 6.2.3. 6.2.3 also carries the fixes for GHSA-5rfr-xx34-2xxv and GHSA-r4jh-29pc-gfqr, which the project published after 6.2.1. The path is dev-only: pa11y-ci > puppeteer > @puppeteer/browsers > proxy-agent > pac-proxy-agent > get-uri.

The low and moderate findings that remain (dompurify, katex, smol-toml, postcss-selector-parser) are below the level the job fails on and are left alone. Dependabot's #111 also bumps sharp to 0.35.5, among six other minor and patch updates; it fixes none of the other three, so this does not duplicate it, and Dependabot will rebase it after either lands.

This does not make CI green on its own. The two end-to-end tests that fail on main are fixed separately, in the test-only #116, and govulncheck (GO-2026-6617, net/http in Go 1.27.1) stays red: it is out of scope by the author's decision, and nothing here touches the Go toolchain.

How it was checked

  • pnpm install --frozen-lockfile then pnpm audit --audit-level=high in site/: before, 4 high (plus the 2 ignored extract-zip ones); after, exit 0 with "3 low | 2 moderate, 2 ignored: 2 high".
  • cd site && pnpm run build (93 pages) and every check the CI and docs workflows run on it: check, contrast:check, i18n:check, cards:check, stats:check, figures:check, docs:check, eslint, format:check, html-validate, htmlhint, a11y:check, schema:check, directives:check, twins:check, llms:check, tables:check: all exit 0. pnpm run pa11y: 30/30 URLs passed.
  • get-uri and proxy-agent load against basic-ftp 6.2.3 (require of both, and of get-uri's dist/ftp.js).
  • go test -count=1 ./internal/render/...: ok (no MDX changed).
  • make build vet test-race, make golangci-lint, make check-*: not applicable, no Go change.

What it owes

  • No em dash or en dash, and nothing in the repository is in Spanish outside site/src/content/docs/es/.

pnpm audit --audit-level=high in site/ fails on every branch with four
high advisories, none of them brought in by a commit:

- sharp <0.35.5, librsvg CVE-2026-96889 (GHSA-wq5f-xc86-pv6w): a direct
  dependency, now ^0.35.5.
- http-cache-semantics <=4.2.0 (GHSA-ch52-4w7c-c8xp) and source-map-js
  <1.2.2 (GHSA-68fv-2mgg-jv7q): every consumer's range already admits
  4.3.0 and 1.2.2, so the lockfile resolves them again and nothing else
  moves.
- basic-ftp <=6.2.0 (GHSA-c475-qrg2-pj4r): fixed in 6.2.1 with no 5.x
  release, behind get-uri, whose latest release still asks for ^5.3.1.
  Pinned to 6.2.3 with an override, beside the reason it is safe: 6.0.0's
  only breaking change is the default refusal of a separate transfer
  host, and get-uri calls nothing whose signature changed. The path is
  dev-only, through pa11y-ci.

The low and moderate findings left (dompurify, katex, smol-toml,
postcss-selector-parser) are below the level the job fails on and are
not touched here.
@coderabbitai

coderabbitai Bot commented Oct 14, 2026

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration
  • Configuration used: Repository: jmrplens/ghchronicle/.coderabbit.yaml
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 6a455f28-4af1-4bdc-8be8-55319a9bfa2e
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey - I've found 1 issue

Fixed security issues:

  • http-cache-semantics (link)
  • sharp (link)
  • source-map-js (link)
Prompt for AI Agents
Please address the comments from this code review:

## Individual Comments

### Comment 1
<location path="site/pnpm-workspace.yaml" line_range="41" />
<code_context>
+  # list, downloadTo and close, which kept their signatures. 6.2.3 also carries
+  # the fixes for GHSA-5rfr-xx34-2xxv (6.2.2) and GHSA-r4jh-29pc-gfqr (6.2.3).
+  # Lift this once get-uri depends on a fixed basic-ftp itself.
+  "basic-ftp@<6.2.3": 6.2.3
   # 7.3.1 added a pass that moves a <style> element's text into a `set:html`
   # property, and runs it before the pass that collapses static MDX subtrees
</code_context>
<issue_to_address>
**FTP proxy configuration fails**

When an FTP fetch uses a server whose PASV response advertises a transfer host different from its control host, `get-uri` uses `basic-ftp` 6.2.3 without opting in to separate transfer hosts, so the client rejects the advertised host and the FTP fetch fails; PAC loading or proxy resolution fails.

Update the FTP fetch path to opt in to separate transfer hosts.
</issue_to_address>

Sourcery assessment

Approval pending. 1 finding to address first.

Blocking findings: site/pnpm-workspace.yaml:41


Sourcery is free for open source - if you like our reviews please consider sharing them ✨

Comment thread site/pnpm-workspace.yaml
# list, downloadTo and close, which kept their signatures. 6.2.3 also carries
# the fixes for GHSA-5rfr-xx34-2xxv (6.2.2) and GHSA-r4jh-29pc-gfqr (6.2.3).
# Lift this once get-uri depends on a fixed basic-ftp itself.
"basic-ftp@<6.2.3": 6.2.3

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Medium · FTP proxy configuration fails

When an FTP fetch uses a server whose PASV response advertises a transfer host different from its control host, get-uri uses basic-ftp 6.2.3 without opting in to separate transfer hosts, so the client rejects the advertised host and the FTP fetch fails; PAC loading or proxy resolution fails.

Update the FTP fetch path to opt in to separate transfer hosts.

Prompt for AI agents
In `site/pnpm-workspace.yaml` at line 41:

**FTP proxy configuration fails**

When an FTP fetch uses a server whose PASV response advertises a transfer host different from its control host, `get-uri` uses `basic-ftp` 6.2.3 without opting in to separate transfer hosts, so the client rejects the advertised host and the FTP fetch fails; PAC loading or proxy resolution fails.

Update the FTP fetch path to opt in to separate transfer hosts.

@sonarqubecloud

Copy link
Copy Markdown

jmrplens added a commit that referenced this pull request Oct 14, 2026
…117)

## What this changes

govulncheck, part of the required CI check, fails on main and so on
every branch: Go 1.27.1's standard library carries ten advisories that
code here reaches, all fixed in Go 1.27.2. One is GO-2026-6617, an
HTTP/2 server crash from a race in net/http's HPACK encoder, which
govulncheck reaches through the Prometheus exporter's `http.Server`
(that server is plain HTTP and enables no unencrypted HTTP/2, so in
practice it speaks HTTP/1.1, but the job gates on reachability). The
other nine are GO-2026-6603, GO-2026-6604 (Windows only), GO-2026-6605,
GO-2026-6607, GO-2026-6608, GO-2026-6610, GO-2026-6611, GO-2026-6612 and
GO-2026-6613. The first commit moves go.mod from `go 1.27.1` to `go
1.27.2`, which every setup-go step (CI, e2e, race, CodeQL, release) and
the Makefile's `GOTOOLCHAIN` read; the Dockerfile's build stage to
`golang:1.27.2-alpine3.24` at its multi-arch index digest
`sha256:f92b6ef800e499660581efdabdf25d9d817a9d124eaf900924f0504e7e27e12d`,
read from the registry; the minimum stated on the three install pages in
both languages, with `docs/running.md` regenerated by `make docs`; and
the comment above the govulncheck job. golang.org/x/net, where the same
fix shipped as v0.60.0, is not in the module graph, so go.mod and go.sum
move nothing else.

The second commit moves golangci-lint from v2.13.1 to v2.14.0, because
the pinned release cannot read what Go 1.27.2 compiles. Go 1.27.2 writes
export data version 5 and v2.13.1 reads up to version 4
(golang.org/x/tools v0.49.0): on this branch its release binary stops at
every package with "export data version 5 is greater than maximum
supported version 4", so the golangci-lint job would fail with no defect
in the tree. The same binary passes on main with Go 1.27.1, and v2.13.2
fails the same way. v2.14.0 (2026-09-24, x/tools v0.50.0) reads it, and
it is the release jmrplens/gitlab-mcp-server#1265 moved to with that
repository's own Go 1.27.2 change, so the two repositories run one
linter release again, as the Makefile says they should.

v2.14.0 meets this tree 20 times, all in checks already enabled. gosec
v2.29.0 no longer takes `filepath.Clean` or `filepath.Abs` for a
path-traversal sanitizer, so G703 now reports 17 reads and writes in
`cmd/check_postgres`, `cmd/check_prometheus` and the `gen_` commands;
each path is that development command's own argument or flag, alone or
joined to a file name the command declares, and each now carries a
`//#nosec G703 -- <which>` line, the form gitlab-mcp-server uses for its
own. modernize's stringscut now asks for `strings.CutLast` (new in Go
1.27) in place of `strings.LastIndex` and `LastIndexByte`; the five, all
in tests, are rewritten, and a 20 s fuzz of the old and new forms of the
two Prometheus helpers and of the before-and-after cut the three SQL
helpers share, over 2.9 million inputs, found no difference. The header
of `.golangci.yml` now names the one setting gitlab-mcp-server added
with v2.14.0 that this file does not carry, its exclusion of the "`%s`"
form of gocritic's sprintfQuotedString: no line here meets that form.

Left as they are: the 1.27.1 mentions that are measurements, examples or
fixtures (the ETag comment in `internal/ghapi/client.go`, the build-info
fixtures in `cmd/ghchronicle/main_test.go`, the cache-key example on the
Graphite page, `test/e2e/testdata/actions_caches.json`) and the
CHANGELOG's history. VERSION is untouched and nothing is tagged.

## How it was checked

All with `go version go1.27.2 linux/amd64` unless said otherwise.

- [x] `go build ./...`, `go vet ./...`, `go vet` for linux/arm64,
windows/amd64 and darwin/arm64, and `go test -tags dockere2e -c` of the
containerised suite: pass.
- [x] `make govulncheck`: "No vulnerabilities found", and none at module
or package level under `-show verbose` either. On main with Go 1.27.1 it
fails naming the ten advisories above.
- [x] `go test -count=1 ./...` and `make test-race`: every package
passes except `test/e2e`, where
`TestTheServiceReadsTheHistoryBackBeforeItsFirstSweep` and
`TestMigrateYesClearsOnlyTheMeasurementItNames` fail at the same
assertions (`migrate_e2e_test.go:513`, `:540` and `:723`) on unmodified
main with Go 1.27.1, so not from this change. No data race reported.
- [x] `make golangci-lint` with the v2.14.0 release binary: passes. With
v2.13.1 on this branch it fails on export data, as above.
- [x] `make check-dashboards check-gallery check-layouts
check-config-options check-compose check-config-cases`: pass.
- [x] `make check-docs mdlint check-doc-links`, and `cd site && pnpm run
build && pnpm run lint`: pass.
- [x] hadolint on the Dockerfile, and `docker build .` on the new base
digest: pass.

## What it owes

- [x] No em dash or en dash, and nothing in the repository is in Spanish
outside `site/src/content/docs/es/`.

**Also carries #115 and #116.** #115 takes the site's dependencies past
the four high advisories in its audit, and #116 stamps the fake
InfluxDB's set-aside copy with the moment of the delete, which fixes the
two end-to-end tests failing on main since 2026-10-04. Each of the three
fixed one part of the required CI check and failed on the others, and
this repository only allows squash merges, so they land together; #115
and #116 are closed in favour of this PR.
@jmrplens

Copy link
Copy Markdown
Owner Author

Landed as part of #117, together with #116 and the Go 1.27.2 update: each fixed one part of the required CI check and failed on the others, and this repository only allows squash merges.

@jmrplens jmrplens closed this Oct 14, 2026
@jmrplens
jmrplens deleted the chore/site-deps-audit branch October 14, 2026 14:11
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