Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
dasel-melange-apko — dasel v3.3.1 は Melange でパッケージ化され、最小限の apko イメージとして配布され、CVE-2026-33320 にパッチが適用されています。 | Kitploit
ツール/GitHubGitHub/rotavori/dasel-melange-apko
汎用ユーティリティコンテナセキュリティ脆弱性分析スクリプトと自動化DevSecOpsサプライチェーンセキュリティ
GitHubrotavori/dasel-melange-apko

dasel-melange-apko

dasel v3.3.1 は Melange でパッケージ化され、最小限の apko イメージとして配布され、CVE-2026-33320 にパッチが適用されています。

リポジトリを見る
43ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

dasel v3.3.1 — Melange + apko ビルド、CVE-2026-33320 パッチ適用版

このリポジトリは、dasel CLI(v3.3.1)を Melange で APK としてパッケージ化し、apko で最小限のコンテナイメージを構築し、CVE-2026-33320 の修正を v3.3.1 コードベースに適用したものです(バージョンアップではなくパッチ適用)。

結果として得られるのは、静的 dasel バイナリのみを含む約 4 MB のイメージで、シェルもパッケージマネージャも libc も含まず、非 root ユーザーで実行されます。

リポジトリ構成

root@kitploit:~
melange/
  dasel.yaml              # melange レシピ: v3.3.1 を取得し、パッチを適用し、.apk をビルド
apko/
  dasel.yaml              # apko レシピ: ローカルの .apk から最小限のイメージを組み立てる
patches/
  cve-2026-33320.patch    # CVE 修正(upstream 282943b の v3.3.1 への最小バックポート)
  NOTES.md                # CVE の内容、重大度、修正の仕組み
tests/
  test.sh                 # ビルドした IMAGE を実行し、実際の動作と CVE 修正を検証
README.md

前提条件

  • Linux または WSL2 Ubuntu(Windows 10 上の WSL2 で開発)。
  • Docker — Melange のビルドサンドボックスランナーとして使用し、最終イメージのロードと実行にも使用。
  • PATH に melange と apko が存在すること。

開発時に使用したバージョン:

ToolVersion
melange0.50.8
apko1.2.14
Docker29.5.2

以下のコマンドはすべてリポジトリのルートから実行します。

ビルドとテスト — 正確なコマンド

1. 署名鍵の生成(1回だけ)

root@kitploit:~
melange keygen

melange.rsa(秘密鍵)と melange.rsa.pub(公開鍵)が生成されます。どちらも gitignore されており、鍵はビルドを再現する人が再生成するもので、決してコミットされません。

2. パッケージのビルド

root@kitploit:~
melange build melange/dasel.yaml \
  --source-dir patches \
  --signing-key melange.rsa \
  --arch x86_64 \
  --runner docker

--source-dir patches により、patches/cve-2026-33320.patch がビルドサンドボックス内で利用可能になり、レシピの patch ステップがそれを適用します。出力: packages/x86_64/dasel-3.3.1-r0.apk(署名付き)と packages/x86_64/APKINDEX.tar.gz。

3. パッケージのテスト

melange test は、ビルドしたばかりの .apk をクリーンな環境にインストールし、レシピの test: ブロックを実行します。Wolfi リポジトリ(busybox 用)とローカルの packages/ リポジトリ(dasel 用)が必要で、それぞれ署名鍵も必要です:

root@kitploit:~
melange test melange/dasel.yaml dasel \
  --arch x86_64 --runner docker \
  --repository-append https://packages.wolfi.dev/os \
  --keyring-append https://packages.wolfi.dev/os/wolfi-signing.rsa.pub \
  --repository-append "$(pwd)/packages" \
  --keyring-append melange.rsa.pub

検証内容: dasel version が 3.3.1 を報告すること、実際の JSON クエリ、JSON→YAML 変換、そして billion-laughs YAML 爆弾が展開ガードによって拒否されること(CVE-2026-33320 修正済み)。

4. イメージのビルド

root@kitploit:~
apko build apko/dasel.yaml dasel:test dasel.tar --arch x86_64
docker load < dasel.tar

出力: dasel.tar(ロード可能な OCI イメージ)と SBOM(SPDX JSON)。apko はタグにアーキテクチャを追加するため、ロードされるイメージは dasel:test-amd64 になります。

イメージがローカルビルドされたパッケージをどのように使用するか(重要な制約)。 apko/dasel.yaml は ./packages をリポジトリとして、./melange.rsa.pub をキーリングとして指定しています。つまり apko は、melange build が packages/x86_64/ に書き込んだまさにその dasel APK を、自分の署名鍵で検証してインストールし、プリビルドされた upstream パッケージではないものを使用します。(相対パスが解決されるよう、リポジトリルートから apko build を実行してください。)これがパッケージビルドとイメージビルドを結びつける仕組みです。

5. イメージテストの実行

root@kitploit:~
./tests/test.sh

docker run でイメージを実行し、検証します(5項目): dasel が存在し v3.3.1 を報告すること、ネストした JSON クエリ、JSON→YAML 変換、配列インデックスクエリ、YAML 爆弾が拒否されること。スクリプトはいずれかのチェックが失敗すると非ゼロで終了します(CI のゲートにできます)。タグは IMAGE=<tag> ./tests/test.sh で上書きできます。

CVE-2026-33320 修正

CVE-2026-33320 は、dasel の YAML リーダーにおけるサービス拒否(CWE-674、制御不能な再帰)です。無制限の YAML エイリアス展開による "billion laughs" 攻撃です。dasel は独自の UnmarshalYAML を実装しており、エイリアスノードを制限なしに再帰的に解決していたため、基盤となるライブラリの組み込み保護を回避していました。

私たちは、v3.3.1 ソースに対して upstream の修正(コミット 282943b、v3.3.2 でリリース)のみを patches/cve-2026-33320.patch としてバックポートしています。これは展開を**深さ制限(32)と共有予算(1000)**で制限し、無制限に展開する代わりにエラーを返します。v3.3.2 で同時にリリースされた無関係なバグ修正は意図的に除外し、変更を最小限で監査可能なものにしています。詳細は patches/NOTES.md を参照してください。

設計上の決定

  • 固定ソース。 git-checkout は expected-commit を v3.3.1 コミット SHA に固定しているため、タグが別のコードを指すように変更された場合、ビルドは失敗します(サプライチェーン安全性)。
  • 最小パッチ。 CVE 修正のみが適用され、他は何も適用されません — 監査可能性のため。
  • 静的バイナリ。 CGO_ENABLED=0(レシピのビルド環境で設定)でビルドされるため、バイナリには cgo も共有ライブラリ依存もありません — これにより、イメージに libc/シェル/パッケージマネージャを含めないことが可能になります。
  • 最小イメージ。 apko の packages: リストは dasel のみで、イメージはローカルビルドされたパッケージだけをインストールします(melange.rsa.pub で検証)。
  • 非 root。 イメージは uid 65532(nonroot)で実行され、多層防御を実現します。
  • 署名付き。 パッケージとパッケージインデックスの両方が署名され、apko が署名を検証します。

前提

  • x86_64 のみを対象にビルド(開発マシンのアーキテクチャ)。
  • Melange のランナーとして docker を使用(ネイティブ Linux では bubblewrap も動作します)。
  • イメージには base-layout パッケージは含まれません(したがって /etc/os-release もありません); イメージ内の何もそれを必要としません。これは意図的な最小性の選択であり、wolfi-baselayout を追加すれば簡単に元に戻せます。
  • ビルドは Wolfi のローリングリリースの go と busybox を固定スナップショットではなく取得するため、Wolfi が Go ≥ 1.25(dasel の go.mod 要件)を提供し続けることを前提としています。dasel のソースはコミットで固定されていますが、ビルドツールチェーンも固定すれば、ビルドは完全にハーメチックになります(下記参照)。

時間があれば改善したい点

  • 境界値を確認する upstream の正確なユニットテスト(深さ 32 vs 33、予算 1000 vs 1001、マルチドキュメントでの予算リセット)を移植し、ブラックボックスの予算/深さ爆弾テストよりも細かいカバレッジを得る。
  • ビルドツールチェーン(特定の Wolfi go/busybox スナップショット)と固定ビルド日時を固定し、完全にハーメチックでビット単位で再現可能なビルドにする(ソースはすでにコミット固定済み)。
  • ARM マシン向けのマルチアーキテクチャビルド(aarch64)。
  • cosign によるイメージ署名と、melange/apko リリースバイナリの署名検証。
  • CI ワークフロー(GitHub Actions)で、プッシュのたびに再ビルドして両方のテストスイートを実行する。

提出メモ

  • 上記のコマンドはすべて WSL2 Ubuntu + Docker Desktop で実行され、成功しています。
  • melange build + melange test: パッケージはビルドされ、パッチはきれいに適用されます(全 7 ハンク — parsing/yaml/yaml.go に 1、parsing/yaml/yaml_reader.go に 6)、CVE 爆弾テストを含むすべてのパッケージテストが成功。
  • apko build + tests/test.sh: イメージはビルドされ(約 4 MB のコンテンツ)、5 つのイメージテストすべてが成功。
  • 上記の「改善したい点」セクションに、時間があれば次に取るであろうステップをリストアップしています。
ツールをダウンロード