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

Этот репозиторий упаковывает CLI-утилиту dasel (v3.3.1) как APK-пакет с помощью Melange, собирает минимальный образ контейнера с помощью apko и применяет исправление для CVE-2026-33320, оставаясь на кодовой базе v3.3.1 (патч, а не обновление версии).

Результат — образ размером ~4 МБ, содержащий только статический бинарник dasel — без оболочки, без менеджера пакетов, без libc — который запускается от непривилегированного пользователя.

Структура репозитория

root@kitploit:~
melange/
  dasel.yaml              # рецепт melange: загрузка v3.3.1, применение патча, сборка .apk
apko/
  dasel.yaml              # рецепт apko: сборка минимального образа из локального .apk
patches/
  cve-2026-33320.patch    # исправление CVE (минимальный бэкпорт коммита 282943b на v3.3.1)
  NOTES.md                # описание CVE, серьёзность и принцип работы исправления
tests/
  test.sh                 # запускает собранный ОБРАЗ и проверяет реальное поведение + исправление CVE
README.md

Предварительные требования

  • Linux или WSL2 Ubuntu (разрабатывалось на WSL2 под Windows 10).
  • Docker — используется как среда сборки Melange и для загрузки/запуска финального образа.
  • melange и apko в PATH.

Версии, использованные при разработке:

ИнструментВерсия
melange0.50.8
apko1.2.14
Docker29.5.2

Все команды ниже выполняются из корня репозитория.

Сборка и тестирование — точные команды

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; и что YAML-бомба "billion laughs" отклоняется защитой от расширения (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 устанавливает именно тот APK dasel, который melange build записал в packages/x86_64/, проверяя его нашим собственным ключом подписи, а не предварительно собранный пакет из внешнего источника. (Запускайте 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 — это отказ в обслуживании (CWE-674, неконтролируемая рекурсия) в YAML-читателе dasel: атака "billion laughs" через неограниченное раскрытие алиасов YAML. dasel реализовал собственный UnmarshalYAML и разрешал узлы-алиасы рекурсивно без ограничений, обходя встроенную защиту нижележащей библиотеки.

Мы переносим только исправление из основной ветки (коммит 282943b, выпущенный в v3.3.2) на исходный код v3.3.1 в виде patches/cve-2026-33320.patch. Оно ограничивает раскрытие лимитом глубины (32) и общим бюджетом (1000), возвращая ошибку вместо бесконечного раскрытия. Мы намеренно исключили несвязанные исправления ошибок, которые также были в v3.3.2, чтобы изменение было минимальным и проверяемым. Подробности см. в patches/NOTES.md.

Проектные решения

  • Фиксированный исходный код. git-checkout закрепляет expected-commit за SHA-коммитом v3.3.1, поэтому сборка завершится ошибкой, если тег когда-либо будет перенаправлен на другой код (безопасность цепочки поставок).
  • Минимальный патч. Применяется только исправление CVE — ничего больше — для проверяемости.
  • Статический бинарник. Собран с CGO_ENABLED=0 (установлено в среде сборки рецепта), поэтому бинарник не имеет cgo и зависимостей от разделяемых библиотек — что позволяет образу поставляться без libc/оболочки/менеджера пакетов.
  • Минимальный образ. Список packages: в apko содержит только dasel; образ устанавливает только наш локально собранный пакет (проверенный нашим melange.rsa.pub).
  • Непривилегированный пользователь. Образ работает от uid 65532 (nonroot) для эшелонированной защиты.
  • Подпись. И пакет, и индекс пакетов подписаны; apko проверяет подписи.

Допущения

  • Сборка только для x86_64 (архитектура машины разработки).
  • Использование docker в качестве исполнителя Melange (bubblewrap также подойдёт на нативном Linux).
  • Образ не содержит пакета base-layout (следовательно, нет /etc/os-release); ничто в образе не требует его. Это намеренный выбор минимальности, легко обратимый добавлением wolfi-baselayout.
  • Сборка использует роллинг-версии go и busybox из Wolfi, а не фиксированные снимки, поэтому предполагается, что Wolfi продолжает предоставлять Go ≥ 1.25 (требование go.mod dasel). Исходный код dasel закреплён коммитом; фиксация инструментария сборки также сделала бы сборку полностью герметичной (см. ниже).

Что можно улучшить при наличии времени

  • Перенести точные модульные тесты границ из основной ветки (глубина 32 vs 33, бюджет 1000 vs 1001, сброс бюджета для многодокументных файлов) для более детального покрытия, чем наши тесты чёрного ящика с бюджетом/глубиной.
  • Зафиксировать инструментарий сборки (конкретные снимки go/busybox из Wolfi) и фиксированную дату сборки для полностью герметичной, побитово воспроизводимой сборки (исходный код уже закреплён коммитом).
  • Мультиархитектурная сборка (aarch64) для ARM-машин.
  • Подписание образа с помощью cosign и верификация подписей бинарников релизов melange/apko.
  • CI-процесс (GitHub Actions) для пересборки и запуска обоих наборов тестов при каждом пуше.

Примечания к отправке

  • Все команды выше выполнялись и проходят на WSL2 Ubuntu с Docker Desktop.
  • melange build + melange test: пакет собирается, патч применяется чисто (все 7 блоков — 1 в parsing/yaml/yaml.go, 6 в parsing/yaml/yaml_reader.go), все тесты пакета зелёные, включая тест CVE-бомбы.
  • apko build + tests/test.sh: образ собирается (~4 МБ содержимого), все 5 тестов образа зелёные.
  • Раздел "Что можно улучшить" выше перечисляет следующие шаги, которые я предпринял бы при наличии времени.
Скачать инструмент