Kush's Wiki
サプライチェーン攻撃
#
Security
ソフトウェアの依存・ビルド・配布といった信頼された経路を侵害し、正規の配布物を通じて下流の利用者へ到達する攻撃
標的に直接侵入せず「信頼の連鎖」を悪用する点が特徴で、上流を 1 つ侵害するだけで多数の下流へ伝播する
攻撃者は正規の配布物に紛れ込むため、利用者側の通常の検証では気づきにくい
防御は信頼の検証可能化が軸: 構成要素の固定(pinning)、最小権限、由来の
署名検証
、依存構成の可視化(SBOM)
zizmor
#Security #Continuous Integration GitHub Actionsワークフローの静的解析を行うSASTツール。サプライチェーン攻撃や認証情報窃取につながる workflow 設定の不備を検出する Rust製。.github/workflows/ 配下の YAML を解析し、命名された audit ID 単位で検出 / ignore を行える 主な audit カテゴリ: dangerous-triggers template-injection unpinned-uses excessive-permissions overprovisioned-secrets https://zizmor.sh/ https://github.com/zizmorcore/zizmor
Nix/
Flakes
Nix のコードを共有するための entrypoint flake.nix を中心とした仕組み。inputs(依存の宣言)と outputs(提供する成果物)から成る nix コマンド実行時に flake.lock が生成され、inputs を exact version に pin する(依存側の inputs も再帰的に lock)。同一バージョンでの再現を容易にし、サプライチェーン攻撃 の pinning 軸に効く default で pure mode(host 環境から隔離)で評価され再現性を促す。ただし pure mode でも再現性が保証されるわけではない 実験的機能(Nix 2.4 以降)。experimental-features = [ "nix-command" "flakes" ] 等で有効化する https://nix.dev/concepts/flakes
Sigstore
#Security release file / container image / binary / SBOM 等の software artifact を署名・検証し、ソフトウェアサプライチェーンの安全性向上を目的とする OSS プロジェクト 鍵ではなく OIDC identity(email / service account / CI workflow 等)に署名を紐付ける identity-based / keyless 方式が核。長命な署名鍵なしに 署名検証 を成立させ、サプライチェーン攻撃 の由来検証軸を担う 署名は ephemeral key 生成 → Fulcio(CA)が identity に紐付く短命証明書を発行 → 署名イベントを Rekor(append-only な透明性ログ)に記録し、検証はログ経由で行う OpenSSF(Linux Foundation)が主導 https://docs.sigstore.dev/about/overview/
Renovate/
minimumReleaseAge
#Security Renovate の設定オプション。パッケージのリリースが公開されてから指定期間(例: "3 days" / "1 week")経過するまで、そのバージョンへの更新 PR を作らず待機させる(旧名 stabilityDays) security 文脈 公開直後の悪意あるバージョンを取り込むのを避けるサプライチェーン攻撃の緩和策。コミュニティが侵害パッケージを検知・撤回するまでの猶予を置いてから更新する automerge と併用すると、自動マージ前のクールダウン期間として機能する 設定例 renovate.json で全更新に 3 日のクールダウンを課す。 { "minimumReleaseAge": "3 days" } https://docs.renovatebot.com/configuration-options/#minimumreleaseage
Bitwarden ソフトウェアサプライチェーン攻撃の概要と対応指針
#Security npmパッケージ@bitwarden/cli@2026.4.0がマルウェア混入により侵害されたサプライチェーン攻撃事例 多段ペイロード構成 Stage1: bw_setup.jsがBunランタイムをDL Stage2: 難読化された9.7MBのbw1.jsが認証情報を窃取 Stage3-4: audit[.]checkmarx.cxへ暗号化送信、GitHubへフォールバック 発火点: npm install時のpreinstallフック、およびbwコマンド実行時 窃取対象: SSH鍵 / GitHub PAT / npmトークン / クラウド資格情報 / ~/.claude.json等のAI設定 / .env 対策: 2026.4.1へ更新、資格情報ローテーション、npm ci --ignore-scripts、min-release-ageの設定 https://blog.flatt.tech/entry/bitwarden_compromise ブログ
CVE-2025-30066
#Security changed-files action (≤ v45.0.7) が侵害されたサプライチェーン攻撃の脆弱性。全タグが malicious commit に retroactively 付け替えられ、汚染された action が GitHub Actions runner の secrets を workflow ログへ dump した (embedded malicious code)。 CWE-506 (Embedded Malicious Code) CVSS 3.1: 8.6 HIGH (AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N) 影響: tj-actions/changed-files ≤ v45.0.7、v46 で解消 https://www.cve.org/CVERecord?id=CVE-2025-30066 https://nvd.nist.gov/vuln/detail/CVE-2025-30066
pnpm/
v11
#Security pnpm v11.0.0 リリース。サプライチェーン攻撃 対策が大幅に強化された major update サプライチェーン緩和 minimumReleaseAge デフォルト 1 日(1440 分)— 新着 24h 以内のパッケージを resolve しない blockExoticSubdeps デフォルト true — exotic な subdep をブロック strictDepBuilds デフォルト true、allowBuilds で install scripts を明示的に allowlist 管理 pnpm sbom を新コマンドとして追加(SBOM 生成) その他の breaking changes Node.js 22+ 必須、pnpm 本体が pure ESM 化 .npmrc は auth/registry のみ。他設定は pnpm-workspace.yaml / 新 config.yaml へ移管 グローバルパッケージはパッケージごとに隔離ディレクトリで管理 https://github.com/pnpm/pnpm/releases/tag/v11.0.0
Aikido Security/
safe-chain
#Security npm / pip など各種パッケージマネージャの download をローカルプロキシで intercept し、マルウェアを含むパッケージのインストールを未然にブロックする OSS 対応 PM: npm, npx, yarn, pnpm, pnpx, rush, rushx, bun, bunx, pip, pip3, uv, poetry, uvx, pipx, pdm 特徴 リアルタイムスキャンに Aikido Intel (Open Source Threat Intelligence) を利用 公開から 48 時間未満のパッケージをデフォルトでブロック(サプライチェーン攻撃 緩和) Tokenless / no build data shared — credentials も telemetry も不要 Bash / Zsh / Fish / PowerShell の shell integration、CI/CD 用 shim、private registry 対応 https://github.com/AikidoSec/safe-chain
tj-actions changed-files の compromise
#Security GitHub Actionsの人気 action changed-files が侵害されたサプライチェーン攻撃事例 CVE-2025-30066 発覚: 2025-03-14 09:00 PT (16:00 UTC)、StepSecurity が Harden-Runner の挙動監視で検知 侵害手法: @tj-actions-bot の PAT が奪取(取得経路は不明) リポジトリ外で作成した malicious commit (0e58ed86...) に全タグを retroactively 付け替え(tag 移動による action 汚染の典型) ペイロード: Python script が /proc/[pid]/mem 経由で GitHub Actions runner プロセスのメモリから secrets を dump、log に double base64 で出力 影響: 23,000+ リポジトリ。compromise 窓は約 37 時間 (2025-03-14 16:00 UTC 〜 2025-03-15 22:00 UTC)。public repo の log は誰でも読めるため secrets 漏洩 復旧: 2025-03-15 22:00 UTC に GitHub がリポジトリを復旧、その後 v46.0.1 リリース 対処: step-security/changed-files@v45 等への切替、または SHA pin 化、漏洩可能性ある secrets を rotate https://www.stepsecurity.io/blog/harden-runner-detection-tj-actions-changed-files-action-is-compromised ブログ
DevGuard
#Security OWASP Incubating Project の開発者向け統合セキュリティプラットフォーム。AGPL-3.0、Go + PostgreSQL 実装 シークレットスキャン / SAST / SCA / IaC / コンテナスキャン / ライセンスチェックを単一 CLI に統合し、サプライチェーン攻撃 対策まで含めて開発ワークフローに組み込む 主な機能 標準準拠スキャナ(Trivy / Grype / Semgrep)の出力を取り込み CVSS + EPSS + component depth に基づくリスク優先順位付け SBOM / VEX のライブ管理、依存パッケージの Dependency Firewall(npm / Go / Python) OPA/Rego によるポリシー強制、GitHub / GitLab / Jira との双方向同期 オープン標準(SBOM / VEX / SARIF / SLSA / in-toto)を中核に据える https://devguard.org/ https://github.com/l3montree-dev/devguard
mise/
Lockfile
mise の tool を exact version と checksum で固定する lockfile(mise.lock) mise.toml の [tools] はバージョン指定のままで、mise.lock が検証データを持つという役割分離 OS-arch ペア(linux-x64, macos-arm64 等)ごとに exact version / SHA256 または Blake3 hash / file size / 取得元 URL を記録する 有効化は [settings] の lockfile = true。自動生成はされず mise lock で生成する backend が対応すれば checksum で整合性を検証でき、commit すればチーム/CI で同一バージョンを再現(reproducible builds)できる。exact version を pin する点で サプライチェーン攻撃 の pinning 軸に対応する https://mise.jdx.dev/dev-tools/mise-lock.html
mise/
minimum_release_age
#Security mise の設定。tool のリリースが公開されてから指定期間が経つまで、その新バージョンを install 対象から除外する 値は相対指定(7d / 90d / 6m / 1y)または絶対日付(2024-06-01 等) 公開直後の侵害バージョンの取り込みを避け、コミュニティが検知・撤回する猶予を置く サプライチェーン攻撃 の timing 緩和策 https://mise.jdx.dev/configuration/settings.html#minimum_release_age