ci(release): pin and verify the mcp-publisher download
The publish-mcp-registry job fetched mcp-publisher from the `latest` release and piped curl directly into tar. Whatever upstream published at that moment therefore executed inside the job that holds the MCP Registry publish credential, with no opportunity to verify it first. Pin the release to v1.8.1, download to a file, verify its SHA-256 against the checksum published in registry_1.8.1_checksums.txt for that same release, and only extract once the hash matches. The job runs on ubuntu-latest, so the linux/amd64 asset replaces the uname-derived selection. Reported by Andrew Hundt in #1245. Verified: fetched the pinned asset (7,339,841 bytes, matching the release asset size), confirmed its SHA-256 against upstream's checksums file, and extracted a valid statically linked x86-64 ELF. Co-Authored-By: Andrew Hundt <ATHundt@gmail.com> Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
This commit is contained in:
@@ -459,9 +459,22 @@ jobs:
|
||||
scripts/ci/gen-mcpb-registry-entries.sh server.json checksums.txt "$RELEASE_VERSION"
|
||||
cat server.json
|
||||
|
||||
# Pinned by version AND content hash: `latest` would let an upstream
|
||||
# release (or a compromised one) change what runs in the job that holds
|
||||
# the registry publish credential, and piping curl straight into tar
|
||||
# executes the payload before anything can verify it. The job is
|
||||
# ubuntu-latest, so the linux/amd64 asset is the only one needed.
|
||||
# Checksum from registry_1.8.1_checksums.txt of the same release.
|
||||
- name: Install mcp-publisher
|
||||
env:
|
||||
MCP_PUBLISHER_VERSION: v1.8.1
|
||||
MCP_PUBLISHER_SHA256: a06c9096dcb9727c13555b6be26c7effa707b01f06a4c561ba7a3635443cf2cc
|
||||
run: |
|
||||
curl -fsSL "https://github.com/modelcontextprotocol/registry/releases/latest/download/mcp-publisher_$(uname -s | tr '[:upper:]' '[:lower:]')_$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/').tar.gz" | tar xz mcp-publisher
|
||||
asset="mcp-publisher_linux_amd64.tar.gz"
|
||||
curl -fsSLo "$asset" \
|
||||
"https://github.com/modelcontextprotocol/registry/releases/download/$MCP_PUBLISHER_VERSION/$asset"
|
||||
echo "$MCP_PUBLISHER_SHA256 $asset" | sha256sum -c -
|
||||
tar xzf "$asset" mcp-publisher
|
||||
|
||||
- name: Authenticate to MCP Registry (GitHub OIDC)
|
||||
run: ./mcp-publisher login github-oidc
|
||||
|
||||
Reference in New Issue
Block a user