Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

fix(ci): stop running markdownlint from an unverified npx cache

オープン 初心者向け
#8,405 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
2/5
見積もり時間
1〜3時間
初心者へのやさしさ
75/100
issue の種類
バグ
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
github-actions, shell
領域
ci-cd, security

調査の方向性

.github/workflows/pr-require-checks.ymlの862~884行付近を読み、markdownlint compositeがnpxをどのように呼び出すかを追ってください。markdownlintのダウンロードキャッシュを復元および保存するステップを削除し、各実行で固定されたパッケージをレジストリから取得するようにしてください。workflowがそのキャッシュを復元も保存もしなくなったことを確認してください。

索引モデルが issue の本文から書いたものです。

説明

needs-human

Refs: #8294

Problem

lint-repo in .github/workflows/pr-require-checks.yml (lines 862-869) restores ~/.npm/_npx and ~/.npm/_cacache under a static key, npx-markdownlint-cli2-${{ runner.os }}-<composite sha>, before the markdownlint composite runs npx --yes markdownlint-cli2@<pin>. Lines 877-884 save the cache only from refs/heads/main.

GitHub's dependency caching docs say: "Cache contents are not signed or verified, and any workflow run that can read a cache may extract its contents. Extracted caches may modify files that are subsequently executed in a workflow run, leading to malicious code execution."

npx does not appear to re-verify a matching tree it finds in _npx (UNVERIFIED by the filer: from a reading of npm/cli workspaces/libnpmexec/lib/index.js, where a tree whose node.pkgid equals the requested spec skips fetch and reify and its bin runs as found).

  • Attacker precondition: a write to main's cache scope under that exact key while it is absent (a pin bump or an eviction; the repo sits near the 10 GB cap). Jobs on trusted triggers such as workflow_dispatch on main get a write-mode cache token by default, and the lane workflows dispatched that way run PR-head code with a model holding Bash (#8294). Whether that Bash can reach a cache-write path is unproven: the runtime token is set only for node and container action steps, and CLAUDE_CODE_SUBPROCESS_ENV_SCRUB isolates the PID namespace. Tampering with files a later node step in the same job executes has not been probed.
  • Impact: code runs in lint-repo on every PR, merge group and scheduled run. That job holds contents: read, checks: read and no secrets, so it cannot steal credentials. It can forge the markdownlint, typos, zizmor and actionlint results that feed ci-status.
  • Contrast: the shfmt cache checks its binary with sha256sum -c before use.

Fix

Delete the "Restore the markdownlint download" and "Save the markdownlint download" steps so npx fetches from the registry each run. Keying on a lockfile hash would not help, because npx ignores lockfiles. Writer-side hardening (cache-mode: read on the jobs that call the lanes) stays in #8294.

Priority

Low: no secret exposure, and it needs a write-capable main-scope run executing untrusted code first.

主要言語
Shell
スター
22
フォーク
2
平均マージ
7時間 57分
マージ済み PR(30日)
938

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

melodic-software/claude-code-plugins のほかの issue

melodic-software/claude-code-plugins の issue をすべて見る

似ている issue

Shell/Bash の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。