diff --git a/Dockerfile b/Dockerfile index 23a5e2464..762804815 100644 --- a/Dockerfile +++ b/Dockerfile @@ -82,6 +82,9 @@ RUN apt-get update \ && pip3 install --no-cache-dir --upgrade pip \ && apt-get install -y --no-install-recommends git openssh-client curl fonts-dejavu-core apt-transport-https \ && apt-get install -y --no-install-recommends libexpat1 libc6 libc-bin libcap2 \ + # Upgrade openssl to 3.5.7 (trixie-security) for CVE-2026-14456, CVE-2026-14457, + # CVE-2026-18798, CVE-2026-54874, CVE-2026-63072, CVE-2026-63075, CVE-2026-63076 (High) + && apt-get install -y --no-install-recommends libssl3t64 openssl openssl-provider-legacy \ && rm -rf /var/lib/apt/lists/* RUN echo 'deb http://deb.debian.org/debian forky main' > /etc/apt/sources.list.d/forky.list \ @@ -100,7 +103,8 @@ RUN rm -rf /usr/local/lib/python3.11/site-packages/setuptools-65.5.1.dist-info # Patching CVE-2026-24049 (High): wheel path traversal vulnerability # Patching CVE-2026-23949 (High): jaraco.context path traversal vulnerability (vendored in setuptools) -RUN pip3 install --no-cache-dir "wheel>=0.46.2" "setuptools>=80.10.1" \ +# Patching CVE-2026-59890 (Medium): setuptools MANIFEST.in exclusion bypass in sdist +RUN pip3 install --no-cache-dir "wheel>=0.46.2" "setuptools>=83.0.0" \ && rm -rf /usr/local/lib/python3.11/site-packages/setuptools/_vendor/wheel-0.45.1.dist-info COPY --from=builder /app/venv /venv diff --git a/playbooks/pyproject.toml b/playbooks/pyproject.toml index 7aa615778..bc3e0e05e 100644 --- a/playbooks/pyproject.toml +++ b/playbooks/pyproject.toml @@ -14,8 +14,11 @@ multi_line_output = 3 include_trailing_comma = true [tool.poetry.dependencies] -python = "^3.7.1" -Flask = "^2.0.2" +python = ">=3.9" +# Keep in sync with the main pyproject.toml Flask pin (CVE-2023-30861, CVE-2026-27205). +# An older cap here made pip downgrade Flask inside the Docker image after Poetry +# had already installed the patched version. +Flask = "^3.1.3" prometheus-api-client = "^0.5.4" pygal = "^3.0.0" tinycss = "^0.4" diff --git a/poetry.lock b/poetry.lock index 6263c2891..aad1aa119 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1008,17 +1008,17 @@ files = [ [[package]] name = "h2" -version = "4.3.0" +version = "4.4.1" description = "Pure-Python HTTP/2 protocol implementation" optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" files = [ - {file = "h2-4.3.0-py3-none-any.whl", hash = "sha256:c438f029a25f7945c69e0ccf0fb951dc3f73a5f6412981daee861431b70e2bdd"}, - {file = "h2-4.3.0.tar.gz", hash = "sha256:6c59efe4323fa18b47a632221a1888bd7fde6249819beda254aeca909f221bf1"}, + {file = "h2-4.4.1-py3-none-any.whl", hash = "sha256:0e25f1462b23c9cb82d9eb02e28bc706dac2a68cb457c6a0d74d63c8a2a5d0e6"}, + {file = "h2-4.4.1.tar.gz", hash = "sha256:4e866ffb1a869ae14dd9b5e6beb5c24a13da0495ad72b65925ded182521c1516"}, ] [package.dependencies] -hpack = ">=4.1,<5" +hpack = ">=4.2,<5" hyperframe = ">=6.1,<7" [[package]] @@ -1051,13 +1051,13 @@ kubernetes = ">=26.1.0" [[package]] name = "hpack" -version = "4.1.0" +version = "4.2.0" description = "Pure-Python HPACK header encoding" optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" files = [ - {file = "hpack-4.1.0-py3-none-any.whl", hash = "sha256:157ac792668d995c657d93111f46b4535ed114f0c9c8d672271bbec7eae1b496"}, - {file = "hpack-4.1.0.tar.gz", hash = "sha256:ec5eca154f7056aa06f196a557655c5b009b382873ac8d1e66e79e87535f1dca"}, + {file = "hpack-4.2.0-py3-none-any.whl", hash = "sha256:858ac0b02280fa582b5080d68db0899c62a80375e0e5413a74970c5e518b6986"}, + {file = "hpack-4.2.0.tar.gz", hash = "sha256:0895cfa3b5531fc65fe439c05eb65144f123bf7a394fcaa56aa423548d8e45c0"}, ] [[package]] @@ -3096,23 +3096,23 @@ unleash = ["UnleashClient (>=6.0.1)"] [[package]] name = "setuptools" -version = "80.10.2" -description = "Easily download, build, install, upgrade, and uninstall Python packages" +version = "84.0.0" +description = "Most extensible Python build backend with support for C/C++ extension modules" optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" files = [ - {file = "setuptools-80.10.2-py3-none-any.whl", hash = "sha256:95b30ddfb717250edb492926c92b5221f7ef3fbcc2b07579bcd4a27da21d0173"}, - {file = "setuptools-80.10.2.tar.gz", hash = "sha256:8b0e9d10c784bf7d262c4e5ec5d4ec94127ce206e8738f29a437945fbc219b70"}, + {file = "setuptools-84.0.0-py3-none-any.whl", hash = "sha256:51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670"}, + {file = "setuptools-84.0.0.tar.gz", hash = "sha256:f4695c21257f0d9b537ec2692c941d02ee143b7cc1276941349a546573b2ef73"}, ] [package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.8.0)"] -core = ["importlib_metadata (>=6)", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] +check = ["pytest-checkdocs (>=2.14)", "pytest-ruff (>=0.2.1)", "ruff (>=0.13.0)"] +core = ["importlib_metadata (>=6)", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging (>=24.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] -enabler = ["pytest-enabler (>=2.2)"] +enabler = ["pytest-enabler (>=3.4)"] test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.7.2)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] -type = ["importlib_metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (==1.14.*)", "pytest-mypy"] +type = ["importlib_metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (==1.18.*)", "pytest-mypy (>=1.0.1)"] [[package]] name = "six" @@ -4023,4 +4023,4 @@ all = ["Flask", "better-exceptions", "datadog-api-client", "grafana-api", "kafka [metadata] lock-version = "2.0" python-versions = ">=3.10, <3.12" -content-hash = "a1a66cd35b7f5736be14c5e72822cb1121abfb821dfc8e593b2ad6f6220ab8e8" +content-hash = "8255ceae1a75a681af4eac7a265adde2d1264d7e27f5181d21172da0421b8c1a" diff --git a/pyproject.toml b/pyproject.toml index 28e5c4e29..ead721f25 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,7 +18,8 @@ include_trailing_comma = true [tool.poetry.dependencies] python = ">=3.10, <3.12" -setuptools = "^80.9.0" +# Bump to fix CVE-2026-59890 (Medium): MANIFEST.in exclusion bypass in sdist +setuptools = ">=83.0.0" colorlog = "^5.0.1" python-json-logger = "^3.0.0" pydantic = "^1.8.1"