Skip to content

fix(security-1): Dockerfile.dev 同步编译工具链,移除 vim,升级 pip - #191

Open
openjiuwen-sync-bot[bot] wants to merge 4 commits into
openJiuwen-ai:studio-2.0-devfrom
openjiuwenai:sync/pr-1773
Open

fix(security-1): Dockerfile.dev 同步编译工具链,移除 vim,升级 pip#191
openjiuwen-sync-bot[bot] wants to merge 4 commits into
openJiuwen-ai:studio-2.0-devfrom
openjiuwenai:sync/pr-1773

Conversation

@openjiuwen-sync-bot

@openjiuwen-sync-bot openjiuwen-sync-bot Bot commented Aug 4, 2026

Copy link
Copy Markdown

Paired: GitHub #191GitCode !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 ,需同步更新编译工具链:

  • Dockerfile — 正式生产镜像(x86_64),已验证通过
  • Dockerfile.dev — CI/开发镜像,openjiuwen从源码安装,与正式版编译环境一致
  • Dockerfile.base — ARM64基础镜像,被 Dockerfile.arm 引用,缺少编译工具链会导致ARM64平台无预编译wheel时pip源码编译失败

不修改的文件

  • agent-runtime/pyproject.toml — 仅本地开发和CI单元测试使用,客户镜像构建不走此文件。修改后会导致CI单元测试环境(无gcc)源码编译失败,保持原样 psycopg2-binary
  • docker/studio-runtime/Dockerfile.arm — 不安装Python依赖,复用Dockerfile.base镜像,无需修改

验证

  • 镜像构建成功,psycopg2源码编译通过
  • 容器runtime健康检查200

chenmingjie100 added 3 commits August 3, 2026 20:54
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% 通过,无功能回归。
@CLAassistant

Copy link
Copy Markdown

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.


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.

@openjiuwen-collaboration-bot

openjiuwen-collaboration-bot Bot commented Aug 4, 2026

Copy link
Copy Markdown

head_sha: 8a684f90803fb863e8157c833acff92b6f2f4ab9

变更摘要

本次变更是一次安全修复,将三个运行时 Dockerfile(DockerfileDockerfile.devDockerfile.base)同步补充 gccpython3-dev 编译工具链,移除 vim,升级 pip,并将 requirements.txt 中的 psycopg2-binary 替换为 psycopg2 源码编译版。通过这些修改合计消除 52 个 CVE,涵盖 pcre、krb5、vim、urllib3、idna 等组件。

主要改动

  • psycopg2-binarypsycopg2 替换requirements.txt 中将 psycopg2-binary==2.9.10 改为 psycopg2==2.9.12,消除 wheel 自带的 14 个 C 动态库(含 pcre 8.32 26 个 CVE、krb5 1.15.1 19 个 CVE),改为源码编译后链接系统库。
  • 补充编译工具链 gccpython3-dev:三个 Dockerfile 的 apt-get install 命令中均新增 gcc python3-dev,为 psycopg2 源码编译提供必要的编译器与 Python 头文件。
  • 移除 vim:三个 Dockerfile 的 apt-get install 命令中均移除 vim 包,消除 vim 9.1 相关的 3 个 CVE,且运行时无人使用。
  • 升级 pip:三个 Dockerfile 中均在 pip3 install -r 之前新增 pip3 install --upgrade pip,升级 pip 内嵌的 vendored 库(urllib3、idna),消除 4 个 CVE。

@openjiuwen-collaboration-bot

openjiuwen-collaboration-bot Bot commented Aug 4, 2026

Copy link
Copy Markdown

head_sha: 8a684f90803fb863e8157c833acff92b6f2f4ab9

代码审查


审查总结

我已完成对全部 4 个变更文件的审查:

文件 审查结果
agent-runtime/requirements.txt ✅ 无问题。psycopg2-binary==2.9.10psycopg2==2.9.12 变更正确,应用代码中统一 import psycopg2,两个包提供相同模块名,兼容无差异。版本 2.9.12 有效,PR 已验证编译通过。
docker/studio-runtime/Dockerfile ⚠️ 1 个 P2 发现:gccpython3-dev 编译工具链安装后未移除,残留于生产镜像中。
docker/studio-runtime/Dockerfile.base ⚠️ 1 个 P2 发现:同上,ARM64 基础镜像残留编译工具链,会传递到 Dockerfile.arm 生产镜像。
docker/studio-runtime/Dockerfile.dev ✅ 无问题。CI/开发镜像保留编译工具链属于合理设计;vim 移除、pip 升级均正确。

发现统计:P0: 0,P1: 0,P2: 2,P3: 0

整体风险判断:中低风险。 核心依赖替换(psycopg2-binary → psycopg2)本身正确且已通过编译验证,消除了 52 个 CVE。两个 P2 发现均指向同一类问题:生产镜像中残留编译工具链——属于安全加固层面,不会导致运行时故障或构建失败,但会在生产环境中留下不必要的攻击面,建议在后续迭代中修复。

类型 数量
🔴 阻塞 0
🟡 建议 2

💬 仅评论

@openjiuwen-collaboration-bot

Copy link
Copy Markdown

head_sha: 8a684f90803fb863e8157c833acff92b6f2f4ab9

TASK STATUS DETAILS
CodeCheck ✅SUCCESS Click here
AntiPoison ✅SUCCESS Click here
Software Composition Analysis ✅SUCCESS Click here
Npm Build ✅SUCCESS See CHECK tab
Ruff Check ✅SUCCESS See CHECK tab
UT测试 ✅SUCCESS 点此跳转

Comment thread docker/studio-runtime/Dockerfile.base Outdated
&& 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 \

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 生产基础镜像。

Comment thread docker/studio-runtime/Dockerfile Outdated
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 \

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

head_sha: 8a684f90803fb863e8157c833acff92b6f2f4ab9

🟡 Medium Priority

变更行为:第19行 apt-get install 新增了 gcc python3-dev,这两个包仅用于后续 pip3 install 时编译 psycopg2 源码(第24-28行 RUN 层),但从未被卸载。

受影响行为/契约:Dockerfile 是正式生产镜像,gccpython3-dev 作为编译时依赖会永久保留在最终镜像中。

失败模式:

  1. 安全面扩大:攻击者在获得容器内代码执行能力后,可利用 gcc 编译恶意二进制,绕过"无编译环境"的纵深防御。
  2. 镜像体积膨胀:gcc + python3-dev 及其推荐包(此 Dockerfile 未使用 --no-install-recommends)显著增加镜像层大小。
  3. 违反容器安全最佳实践:生产镜像不应包含编译工具链。

触发条件:正常构建流程即触发(每次构建都残留)。

建议:将编译工具链安装、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 层,末尾清理。

@openjiuwen-collaboration-bot

Copy link
Copy Markdown

head_sha: ad94f0b7591921d108d3c1acee7a916b6f0e27e7

TASK STATUS DETAILS
CodeCheck ✅SUCCESS Click here
AntiPoison ✅SUCCESS Click here
Software Composition Analysis ✅SUCCESS Click here
Npm Build ✅SUCCESS See CHECK tab
Ruff Check ✅SUCCESS See CHECK tab
UT测试 ✅SUCCESS 点此跳转

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant