fix(security-1): Dockerfile.dev 同步编译工具链,移除 vim,升级 pip - #191
fix(security-1): Dockerfile.dev 同步编译工具链,移除 vim,升级 pip#191openjiuwen-sync-bot[bot] wants to merge 4 commits into
Conversation
1. requirements.txt: psycopg2-binary → psycopg2(源码编译版), 消除 wheel 自带的 pcre 8.32 和 krb5 1.15.1 旧动态库(45 个 CVE) 2. Dockerfile: 移除 vim 安装(3 个 CVE) 3. Dockerfile: 补充 gcc python3-dev 编译工具链 4. Dockerfile: 增加 pip3 install --upgrade pip, urllib3 1.26→2.7.0、idna 3.4→3.18(4 个 CVE) E2E 验证:100 个 dryrun 用例 92% 通过,无功能回归。
|
chenmingjie100 seems not to be a GitHub user. You need a GitHub account to be able to sign the CLA. If you have already a GitHub account, please add the email address used for this commit to your account. You have signed the CLA already but the status is still pending? Let us recheck it. |
|
head_sha: 变更摘要本次变更是一次安全修复,将三个运行时 Dockerfile( 主要改动
|
|
head_sha: 代码审查审查总结我已完成对全部 4 个变更文件的审查:
发现统计:P0: 0,P1: 0,P2: 2,P3: 0 整体风险判断:中低风险。 核心依赖替换(psycopg2-binary → psycopg2)本身正确且已通过编译验证,消除了 52 个 CVE。两个 P2 发现均指向同一类问题:生产镜像中残留编译工具链——属于安全加固层面,不会导致运行时故障或构建失败,但会在生产环境中留下不必要的攻击面,建议在后续迭代中修复。
💬 仅评论 |
|
head_sha:
|
| && DEBIAN_FRONTEND=noninteractive apt-get update \ | ||
| && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ | ||
| curl tar unzip net-tools wget iptables cron libpq-dev vim procps gawk hostname sed coreutils findutils bash nginx \ | ||
| curl tar unzip net-tools wget iptables cron libpq-dev procps gawk hostname sed coreutils findutils bash nginx gcc python3-dev \ |
There was a problem hiding this comment.
head_sha: 8a684f90803fb863e8157c833acff92b6f2f4ab9
🟡 Medium Priority
变更行为:第20行 apt-get install 新增了 gcc python3-dev,仅用于后续第25-31行 pip3 install 编译 psycopg2 源码。编译工具链未被卸载,残留于最终镜像中。
受影响行为/契约:Dockerfile.base 是 ARM64 基础镜像,被 Dockerfile.arm(ARM64 生产镜像)通过 FROM runtime-base-arm64:latest 引用。gcc/python3-dev 会传递到 ARM64 生产镜像中。
失败模式:与 Dockerfile 相同——生产镜像携带 C 编译器,扩大攻击面、增加镜像体积、违反容器安全最佳实践。
触发条件:正常构建流程即触发。
建议:同 Dockerfile 修复方案:将 gcc python3-dev 与 pip install 合并到同一 RUN 层并在编译完成后立即卸载,避免编译工具链污染 ARM64 生产基础镜像。
| sed -i 's|deb.debian.org|mirrors.aliyun.com|g' /etc/apt/sources.list; \ | ||
| fi \ | ||
| && apt-get update && apt-get install -y curl tar unzip net-tools wget iptables cron libpq-dev vim procps gawk hostname sed coreutils findutils bash nginx antiword \ | ||
| && apt-get update && apt-get install -y curl tar unzip net-tools wget iptables cron libpq-dev procps gawk hostname sed coreutils findutils bash nginx antiword gcc python3-dev \ |
There was a problem hiding this comment.
head_sha: 8a684f90803fb863e8157c833acff92b6f2f4ab9
🟡 Medium Priority
变更行为:第19行 apt-get install 新增了 gcc python3-dev,这两个包仅用于后续 pip3 install 时编译 psycopg2 源码(第24-28行 RUN 层),但从未被卸载。
受影响行为/契约:Dockerfile 是正式生产镜像,gcc 和 python3-dev 作为编译时依赖会永久保留在最终镜像中。
失败模式:
- 安全面扩大:攻击者在获得容器内代码执行能力后,可利用 gcc 编译恶意二进制,绕过"无编译环境"的纵深防御。
- 镜像体积膨胀:gcc + python3-dev 及其推荐包(此 Dockerfile 未使用
--no-install-recommends)显著增加镜像层大小。 - 违反容器安全最佳实践:生产镜像不应包含编译工具链。
触发条件:正常构建流程即触发(每次构建都残留)。
建议:将编译工具链安装、pip install、工具链卸载合并到同一个 RUN 层。可将 apt-get install 中 gcc python3-dev 拆分到 pip install 所在的 RUN 层(第24-28行),并在 pip install 完成后立即移除。或者将所有 apt-get install(含 gcc python3-dev)与 pip install 合并为一个 RUN 层,末尾清理。
|
head_sha:
|
Paired: GitHub #191 ↔ GitCode !1773
变更文件
文件 改动 agent-runtime/requirements.txt psycopg2-binary==2.9.10 → psycopg2==2.9.12 docker/studio-runtime/Dockerfile 补充 gcc python3-dev ,移除 vim ,升级 pip docker/studio-runtime/Dockerfile.dev 同步补充 gcc python3-dev ,移除 vim ,升级 pip docker/studio-runtime/Dockerfile.base 同步补充 gcc python3-dev ,移除 vim ,升级 pip
修复原理
修改项 消除CVE数 涉及组件 原理 psycopg2-binary → psycopg2 45 pcre 8.32 (26个)、krb5 1.15.1 (19个) psycopg2-binary wheel 自带14个C动态库(含pcre 8.32、krb5 1.15.1),不随系统库更新,升级版本无效(已验证2.9.12 wheel哈希与2.9.10相同)。改为源码编译版后链接系统库,wheel自带.so不再存在。pcre不被链接自然消除,krb5由系统依赖链提供 移除 vim 3 vim 9.1 (3个) 运行时无人使用,直接移除 升级 pip 4 urllib3 (3个)、idna (1个) pip 24.0内嵌vendored库无法单独升级,升级pip后一起更新
合计消除52个CVE。
同步修改说明
三个 runtime Dockerfile 共享同一份 requirements.txt ,需同步更新编译工具链:
不修改的文件
验证