GonSarrabia/Minimus-Junior-Backend-Exercise

GitHub: GonSarrabia/Minimus-Junior-Backend-Exercise

一个初级后端练习项目,使用 Melonge 和 Apko 将 dasel CLI 打包为 APK 并构建最小化容器镜像,同时修复一个 YAML 别名展开相关的 CVE 漏洞。

Stars: 0 | Forks: 0

# 初级后端练习 — dasel v3.3.1 使用 Melange 打包 `dasel` v3.3.1,使用 apko 构建容器镜像,并修复 CVE-2026-33320。 **前置条件:** Docker。所有构建步骤都在容器内运行 —— 无需在本地安装 melange/apko。在 linux/amd64(或带有 linux/amd64 模拟的 Docker Desktop)上从仓库根目录运行所有命令。 ## 构建与测试 **第 0 步 — 生成签名密钥(一次性)** ``` docker run --rm -v "/${PWD}":/work cgr.dev/chainguard/melange keygen ``` **第 1 步 — 构建包** ``` docker run --privileged --rm -v "/${PWD}":/work cgr.dev/chainguard/melange build melange/dasel.yaml --arch amd64 --signing-key melange.rsa ``` 输出:`packages/x86_64/dasel-3.3.1-r1.apk` **第 2 步 — 测试包** ``` docker run --privileged --rm -v "/${PWD}":/work cgr.dev/chainguard/melange test melange/dasel.yaml --arch amd64 --repository-append //work/packages --keyring-append //work/melange.rsa.pub ``` **第 3 步 — 构建镜像** ``` docker run --rm -v "/${PWD}":/work cgr.dev/chainguard/apko build apko/dasel.yaml dasel-image:latest dasel-image.tar --arch amd64 -k melange.rsa.pub ``` 输出:`dasel-image.tar`。`apko/dasel.yaml` 中的 `@local ./packages` 仓库会让 apko 安装你在第 1 步中构建的 APK。`-k` 让 apko 信任 Melange 签名密钥。apko 会将架构附加到标签后,因此加载的镜像为 `dasel-image:latest-amd64`。 **第 4 步 — 加载镜像** ``` docker load --input dasel-image.tar ``` **第 5 步 — 运行镜像测试** ``` bash tests/test.sh ``` 十项测试:二进制文件存在且可运行、JSON 扁平键查询、架构为 amd64、CVE 预算限制拒绝 YAML 别名爆炸、正常的 YAML 绿色路径读取、嵌套 JSON 路径、数组索引访问、TOML 格式、CVE 深度限制拒绝 33 层别名链、拒绝格式错误的 JSON。 ## CVE-2026-33320 `melange/CVE-2026-33320.patch` 在 `parsing/yaml/yaml_reader.go` 中添加了两个防护措施: - `maxExpansionDepth = 32` — 拒绝超过 32 层的别名链 - `maxExpansionBudget = 100` — 拒绝总别名解析超过 100 次的文档 两者在失败时都会返回包含 `yaml expansion` 提示信息的非零退出码。`tests/test.sh` 中的测试 4 会对此进行验证。 ## 提交说明 运行命令:`melange keygen` → `melange build` → `melange test` → `apko build` → `docker load` → `tests/test.sh` 所有步骤均在 linux/amd64 上通过。 **如果有更多时间,我会改进的地方:** - 在 `test.sh` 中参数化镜像标签和 tar 包名称
标签:Chainguard, Cutter, NIDS, 后端开发, 容器化, 日志审计, 请求拦截