[Bug] Raise certifi >= 2026.10.19 and pip >= 26.2.2 to distrust the compromised eMudhra intermediates
Los mantenedores suelen responder en 1 día
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 72/100
Línea de trabajo
Empieza comprobando las versiones mínimas de certifi y pip en pyproject.toml y requirements.txt; después, sigue el proceso por el que las imágenes de Docker instalan estas dependencias. Eleva las versiones mínimas a las versiones corregidas indicadas en el issue y verifica que una instalación limpia resuelva certifi = 2026.10.19 y pip = 26.2.2; es necesario reconstruir las imágenes antiguas para incluir la corrección.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Description
AstrBot's declared minimum versions of certifi and pip are still vulnerable to the October 2026 eMudhra intermediate-CA compromise:
pyproject.toml/requirements.txt:certifi>=2025.4.26pyproject.toml/requirements.txt:pip>=25.1.1
certifi versions before 2026.10.19 bundle the emSign ECC Root CA - G3 root. Eight eMudhra intermediate CAs chaining to that root had trivially recoverable P-384 private keys (d < 256), were revoked on 2026-10-18, and are blocked by browsers through OneCRL/CRLSet. Any client that trusts the root and does not enforce revocation can be MITM'd with a forged leaf certificate for an arbitrary hostname.
AstrBot loads the certifi bundle into its outbound SSL contexts (for example, runtime_bootstrap.py patches aiohttp's verified SSL context to the certifi-backed context, and io.py, zip_updater.py, plugin_service.py use certifi.where()). Plugin dependencies are installed with the in-process pip (pip_installer.py), and pip always adds its vendored certifi to certificate verification. With the current floors, environments can still resolve certifi < 2026.10.19 and pip < 26.2.2 (pip 26.2.2 is the first release that vendors certifi 2026.10.19).
Impact: an on-path attacker holding a compromised intermediate key can impersonate provider APIs (API keys and chat content) and plugin/update endpoints. Core, dashboard, and plugin ZIPs are downloaded over that TLS and executed after extraction, so the issue can escalate to code execution. Docker images built before 2026-10-19 keep the vulnerable certifi/pip baked in until rebuilt.
Reproduction Steps
-
Install AstrBot v4.29.1 (or an older Docker image) in a clean environment.
-
Check the resolved trust-store tooling:
python -c "import certifi; print(certifi.__version__)" python -m pip --versionExpected (fixed):
certifi >= 2026.10.19andpip >= 26.2.2.
Affected environments report something likecertifi 2026.7.22andpip 26.2.1. -
Network-position check with the incident test host
curl https://dv-g3b-emudhra.we-have-a-problem.com/A client with a vulnerable trust store completes the handshake; a fixed client returns a certificate error.
AstrBot Version
v4.29.1
Operating System
Linux
Deployment Method
Any
Message Platform Adapter
N/A
Error Log
No error is raised: the vulnerable trust store still validates a chain it should reject. Example from an affected environment:
$ python -c "import certifi; print(certifi.__version__)"
2026.7.22
$ python -m pip --version
pip 26.2.1 ...
A fixed environment reports `certifi 2026.10.19` and `pip 26.2.2`.
Supplementary Information
No response
Checklist
- I have searched the Issue list for related issues and could not resolve the problem, or this issue has never been reported before.
- I have tried disabling all plugins to rule out issues caused by plugins.
- The issue I am reporting is related to AstrBot itself, not to a specific plugin.
- I have read and agree to the project's Code of Conduct.
- (Optional) I am willing to submit a PR to help fix this issue.
- Lenguaje dominante
- Python
- Estrellas
- 42.1k
- Forks
- 3.1k
- Merge medio
- 1 d 2 h
- PR fusionados (30 d)
- 146
Preparar el entorno
- Incluye un Dockerfile o un archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de AstrBotDevs/AstrBot
-
[Bug] Discord slash command sync aborts with KeyError when a plugin handler is defined in a submodulePosiblemente ocupada @yuexia5 la tomó hace 3 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 77/100
AstrBotDevs/AstrBot#10626 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
[Bug] QQ频道消息无法回复:markdown 回退顺序有误,误用主动消息导致 304049 限频Posiblemente ocupada @he-yufeng la tomó hace 14 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
AstrBotDevs/AstrBot#10420 · 4 comentarios ·
Los mantenedores suelen responder en 1 día
-
[Feature] 移除「切换到旧版知识库」入口Posiblemente ocupada @lingyun14beta la tomó hace 11 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
AstrBotDevs/AstrBot#10340 · 1 reacción ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
AstrBotDevs/AstrBot#10322 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
[Bug] WebChat 聊天偏好在刷新后重置:流式输出、显示思考内容及发送快捷键Posiblemente ocupada @C10H14N2O5 la tomó hace 20 días. Abiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
AstrBotDevs/AstrBot#10316 · 2 comentarios ·
Los mantenedores suelen responder en 1 día
Todos los issues de AstrBotDevs/AstrBot
Issues similares
-
[Bug]: Revit selector reads process ids 2000-2099 as years (flaky AgentClientTests.AYearOrAProcessIdSelectsTheHost)Posiblemente ocupada @Wurschdhaud la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 83/100
pyrevitlabs/pyRevit#3817 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 85/100
521xueweihan/HelloGitHub#4074 ·
-
follow-up
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
Los mantenedores suelen responder en 1 día
-
Helm chart: allow setting ingressClassName on the IngressPosiblemente ocupada @commarla la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
pgadmin-org/pgadmin4#10658 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100