Skip to content

Conversation

@pre-commit-ci
Copy link
Contributor

@pre-commit-ci pre-commit-ci bot commented Oct 6, 2025

@pre-commit-ci pre-commit-ci bot requested a review from jkreileder as a code owner October 6, 2025 21:20
@github-actions
Copy link

github-actions bot commented Oct 6, 2025

🔍 Vulnerabilities of jkreileder/cf-ips-to-hcloud-fw:pr-914

📦 Image Reference jkreileder/cf-ips-to-hcloud-fw:pr-914
digestsha256:5535952a1b5bb55eef9fbdf9ec420500ef80d5492d26214ec09797f7d43f6bf1
vulnerabilitiescritical: 2 high: 1 medium: 6 low: 2
platformlinux/amd64
size26 MB
packages60
📦 Base Image python:3-alpine
also known as
  • 3-alpine3.22
  • 3.13-alpine
  • 3.13-alpine3.22
  • 3.13.7-alpine
  • 3.13.7-alpine3.22
  • alpine
  • alpine3.22
digestsha256:527c28b29498575b851ad88e7522ac7201bbd9e920d2c11b00ff2b39b315f5f8
vulnerabilitiescritical: 0 high: 1 medium: 3 low: 2
critical: 2 high: 0 medium: 0 low: 0 h11 0.14.0 (pypi)

pkg:pypi/[email protected]

critical 9.1: GHSA--vqfr--h8mv--ghfj OWASP Top Ten 2017 Category A9 - Using Components with Known Vulnerabilities

Affected range<0.16.0
Fixed version0.16.0
CVSS Score9.1
CVSS VectorCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
Description

A leniency in h11's parsing of line terminators in chunked-coding message bodies can lead to request smuggling vulnerabilities under certain conditions.

critical 9.1: CVE--2025--43859 Inconsistent Interpretation of HTTP Requests ('HTTP Request/Response Smuggling')

Affected range<0.16.0
Fixed version0.16.0
CVSS Score9.1
CVSS VectorCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
EPSS Score0.047%
EPSS Percentile14th percentile
Description

Impact

A leniency in h11's parsing of line terminators in chunked-coding message bodies can lead to request smuggling vulnerabilities under certain conditions.

Details

HTTP/1.1 Chunked-Encoding bodies are formatted as a sequence of "chunks", each of which consists of:

  • chunk length
  • \r\n
  • length bytes of content
  • \r\n

In versions of h11 up to 0.14.0, h11 instead parsed them as:

  • chunk length
  • \r\n
  • length bytes of content
  • any two bytes

i.e. it did not validate that the trailing \r\n bytes were correct, and if you put 2 bytes of garbage there it would be accepted, instead of correctly rejecting the body as malformed.

By itself this is harmless. However, suppose you have a proxy or reverse-proxy that tries to analyze HTTP requests, and your proxy has a different bug in parsing Chunked-Encoding, acting as if the format is:

  • chunk length
  • \r\n
  • length bytes of content
  • more bytes of content, as many as it takes until you find a \r\n

For example, pound had this bug -- it can happen if an implementer uses a generic "read until end of line" helper to consumes the trailing \r\n.

In this case, h11 and your proxy may both accept the same stream of bytes, but interpret them differently. For example, consider the following HTTP request(s) (assume all line breaks are \r\n):

GET /one HTTP/1.1
Host: localhost
Transfer-Encoding: chunked

5
AAAAAXX2
45
0

GET /two HTTP/1.1
Host: localhost
Transfer-Encoding: chunked

0

Here h11 will interpret it as two requests, one with body AAAAA45 and one with an empty body, while our hypothetical buggy proxy will interpret it as a single request, with body AAAAXX20\r\n\r\nGET /two .... And any time two HTTP processors both accept the same string of bytes but interpret them differently, you have the conditions for a "request smuggling" attack. For example, if /two is a dangerous endpoint and the job of the reverse proxy is to stop requests from getting there, then an attacker could use a bytestream like the above to circumvent this protection.

Even worse, if our buggy reverse proxy receives two requests from different users:

GET /one HTTP/1.1
Host: localhost
Transfer-Encoding: chunked

5
AAAAAXX999
0
GET /two HTTP/1.1
Host: localhost
Cookie: SESSION_KEY=abcdef...

...it will consider the first request to be complete and valid, and send both on to the h11-based web server over the same socket. The server will then see the two concatenated requests, and interpret them as one request to /one whose body includes /two's session key, potentially allowing one user to steal another's credentials.

Patches

Fixed in h11 0.15.0.

Workarounds

Since exploitation requires the combination of buggy h11 with a buggy (reverse) proxy, fixing either component is sufficient to mitigate this issue.

Credits

Reported by Jeppe Bonde Weikop on 2025-01-09.

critical: 0 high: 1 medium: 2 low: 0 openssl 3.5.1-r0 (apk)

pkg:apk/alpine/[email protected]?os_name=alpine&os_version=3.22

high : CVE--2025--9230

Affected range<3.5.4-r0
Fixed version3.5.4-r0
EPSS Score0.026%
EPSS Percentile6th percentile
Description

medium : CVE--2025--9231

Affected range<3.5.4-r0
Fixed version3.5.4-r0
EPSS Score0.013%
EPSS Percentile1st percentile
Description

medium : CVE--2025--9232

Affected range<3.5.4-r0
Fixed version3.5.4-r0
EPSS Score0.023%
EPSS Percentile5th percentile
Description
critical: 0 high: 0 medium: 2 low: 0 urllib3 2.3.0 (pypi)

pkg:pypi/[email protected]

medium 5.3: CVE--2025--50182 URL Redirection to Untrusted Site ('Open Redirect')

Affected range>=2.2.0
<2.5.0
Fixed version2.5.0
CVSS Score5.3
CVSS VectorCVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:N/A:N
EPSS Score0.013%
EPSS Percentile2nd percentile
Description

urllib3 supports being used in a Pyodide runtime utilizing the JavaScript Fetch API or falling back on XMLHttpRequest. This means you can use Python libraries to make HTTP requests from your browser or Node.js. Additionally, urllib3 provides a mechanism to control redirects.

However, the retries and redirect parameters are ignored with Pyodide; the runtime itself determines redirect behavior.

Affected usages

Any code which relies on urllib3 to control the number of redirects for an HTTP request in a Pyodide runtime.

Impact

Redirects are often used to exploit SSRF vulnerabilities. An application attempting to mitigate SSRF or open redirect vulnerabilities by disabling redirects may remain vulnerable if a Pyodide runtime redirect mechanism is unsuitable.

Remediation

If you use urllib3 in Node.js, upgrade to a patched version of urllib3.

Unfortunately, browsers provide no suitable way which urllib3 can use: XMLHttpRequest provides no control over redirects, the Fetch API returns opaqueredirect responses lacking data when redirects are controlled manually. Expect default browser behavior for redirects.

medium 5.3: CVE--2025--50181 URL Redirection to Untrusted Site ('Open Redirect')

Affected range<2.5.0
Fixed version2.5.0
CVSS Score5.3
CVSS VectorCVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:N/A:N
EPSS Score0.019%
EPSS Percentile4th percentile
Description

urllib3 handles redirects and retries using the same mechanism, which is controlled by the Retry object. The most common way to disable redirects is at the request level, as follows:

resp = urllib3.request("GET", "https://httpbin.org/redirect/1", redirect=False)
print(resp.status)
# 302

However, it is also possible to disable redirects, for all requests, by instantiating a PoolManager and specifying retries in a way that disable redirects:

import urllib3

http = urllib3.PoolManager(retries=0)  # should raise MaxRetryError on redirect
http = urllib3.PoolManager(retries=urllib3.Retry(redirect=0))  # equivalent to the above
http = urllib3.PoolManager(retries=False)  # should return the first response

resp = http.request("GET", "https://httpbin.org/redirect/1")

However, the retries parameter is currently ignored, which means all the above examples don't disable redirects.

Affected usages

Passing retries on PoolManager instantiation to disable redirects or restrict their number.

By default, requests and botocore users are not affected.

Impact

Redirects are often used to exploit SSRF vulnerabilities. An application attempting to mitigate SSRF or open redirect vulnerabilities by disabling redirects at the PoolManager level will remain vulnerable.

Remediation

You can remediate this vulnerability with the following steps:

  • Upgrade to a patched version of urllib3. If your organization would benefit from the continued support of urllib3 1.x, please contact [email protected] to discuss sponsorship or contribution opportunities.
  • Disable redirects at the request() level instead of the PoolManager() level.
critical: 0 high: 0 medium: 1 low: 0 requests 2.32.3 (pypi)

pkg:pypi/[email protected]

medium 5.3: CVE--2024--47081 Insufficiently Protected Credentials

Affected range<2.32.4
Fixed version2.32.4
CVSS Score5.3
CVSS VectorCVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:N/A:N
EPSS Score0.104%
EPSS Percentile29th percentile
Description

Impact

Due to a URL parsing issue, Requests releases prior to 2.32.4 may leak .netrc credentials to third parties for specific maliciously-crafted URLs.

Workarounds

For older versions of Requests, use of the .netrc file can be disabled with trust_env=False on your Requests Session (docs).

References

psf/requests#6965
https://seclists.org/fulldisclosure/2025/Jun/2

critical: 0 high: 0 medium: 1 low: 0 pip 25.2 (pypi)

pkg:pypi/[email protected]

medium 5.9: CVE--2025--8869 Improper Link Resolution Before File Access ('Link Following')

Affected range<=25.2
Fixed versionNot Fixed
CVSS Score5.9
CVSS VectorCVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:A/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N
EPSS Score0.018%
EPSS Percentile3rd percentile
Description

Summary

In the fallback extraction path for source distributions, pip used Python’s tarfile module without verifying that symbolic/hard link targets resolve inside the intended extraction directory. A malicious sdist can include links that escape the target directory and overwrite arbitrary files on the invoking host during pip install.

Impact

Successful exploitation enables arbitrary file overwrite outside the build/extraction directory on the machine running pip. This can be leveraged to tamper with configuration or startup files and may lead to further code execution depending on the environment, but the direct, guaranteed impact is integrity compromise on the vulnerable system.

Conditions

The issue is triggered when installing an attacker-controlled sdist (e.g., from an index or URL) and the fallback extraction code path is used. No special privileges are required beyond running pip install; active user action is necessary.

Remediation

The fix, while available as a patch that can be manually applied, has not yet been put into a numbered version but is planned for 25.3. Using a Python interpreter that implements the safe-extraction behavior described by PEP 706 provides additional defense in depth for other tarfile issues but is not a substitute for upgrading pip for this specific flaw.

critical: 0 high: 0 medium: 0 low: 2 busybox 1.37.0-r18 (apk)

pkg:apk/alpine/[email protected]?os_name=alpine&os_version=3.22

low : CVE--2025--46394

Affected range<=1.37.0-r19
Fixed versionNot Fixed
EPSS Score0.015%
EPSS Percentile2nd percentile
Description

low : CVE--2024--58251

Affected range<=1.37.0-r19
Fixed versionNot Fixed
EPSS Score0.017%
EPSS Percentile3rd percentile
Description

@github-actions
Copy link

github-actions bot commented Oct 6, 2025

Recommended fixes for image jkreileder/cf-ips-to-hcloud-fw:pr-914

Base image is python:3-alpine

Name3.13.7-alpine3.22
Digestsha256:527c28b29498575b851ad88e7522ac7201bbd9e920d2c11b00ff2b39b315f5f8
Vulnerabilitiescritical: 0 high: 1 medium: 3 low: 2
Pushed2 months ago
Size17 MB
Packages39
Flavoralpine
OS3.22
Runtime3.13.7
The base image is also available under the supported tag(s): 3-alpine3.22, 3.13-alpine, 3.13-alpine3.22, alpine, alpine3.22

Refresh base image

Rebuild the image using a newer base image version. Updating this may result in breaking changes.
TagDetailsPushedVulnerabilities
3-alpine
Newer image for same tag
Also known as:
  • alpine
  • alpine3.22
  • 3.14.0-alpine
  • 3.14.0-alpine3.22
  • 3.14-alpine
  • 3.14-alpine3.22
  • 3-alpine3.22
Benefits:
  • Same OS detected
  • Minor runtime version update
  • Newer image for same tag
  • Tag is preferred tag
  • Tag was pushed more recently
  • Image has similar size
  • Image introduces no new vulnerability but removes 3
  • Image contains similar number of packages
  • 3-alpine was pulled 51K times last month
Image details:
  • Size: 18 MB
  • Flavor: alpine
  • OS: 3.22
  • Runtime: 3.14.0
1 week ago



Change base image

TagDetailsPushedVulnerabilities
3.13-alpine
Minor runtime version update
Also known as:
  • 3.13.9-alpine
  • 3.13.9-alpine3.22
  • 3.13-alpine3.22
Benefits:
  • Same OS detected
  • Minor runtime version update
  • Tag was pushed more recently
  • Image has similar size
  • Image introduces no new vulnerability but removes 3
  • Image contains equal number of packages
Image details:
  • Size: 17 MB
  • Flavor: alpine
  • OS: 3.22
  • Runtime: 3.13.9
6 days ago



@codecov
Copy link

codecov bot commented Oct 6, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (d56a105) to head (9e65239).
⚠️ Report is 1 commits behind head on main.
✅ All tests successful. No failed tests found.

Additional details and impacted files
@@            Coverage Diff            @@
##              main      #914   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files            8         8           
  Lines          151       151           
  Branches        11        11           
=========================================
  Hits           151       151           
Flag Coverage Δ
python-3.10 100.00% <ø> (ø)
python-3.11 100.00% <ø> (ø)
python-3.12 100.00% <ø> (ø)
python-3.13 100.00% <ø> (ø)
python-3.9 100.00% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@github-actions
Copy link

github-actions bot commented Oct 6, 2025

Overview

Image reference jkreileder/cf-ips-to-hcloud-fw:1 quay.io/jkreileder/cf-ips-to-hcloud-fw:pr-914
- digest a013f898285a 5535952a1b5b
- tag 1 pr-914
- provenance 90ebdb0 13800f1
- vulnerabilities critical: 2 high: 2 medium: 7 low: 2 critical: 2 high: 1 medium: 6 low: 2
- platform linux/amd64 linux/amd64
- size 23 MB 26 MB (+3.4 MB)
- packages 60 60
Base Image python:3-alpine
also known as:
3-alpine3.22
3.13-alpine
3.13-alpine3.22
alpine
alpine3.22
python:3-alpine
also known as:
3-alpine3.22
3.13-alpine
3.13-alpine3.22
alpine
alpine3.22
- vulnerabilities critical: 0 high: 2 medium: 4 low: 2 critical: 0 high: 1 medium: 3 low: 2
Environment Variables (2 changes)
  • ± 2 changed
  • 4 unchanged
 GPG_KEY=7169605F62C751356D054A26A821E680E5FA6305
 PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
 PYTHONDONTWRITEBYTECODE=1
 PYTHONFAULTHANDLER=1
-PYTHON_SHA256=93e583f243454e6e9e4588ca2c2662206ad961659863277afcdb96801647d640
+PYTHON_SHA256=5462f9099dfd30e238def83c71d91897d8caa5ff6ebc7a50f14d4802cdaaa79a
-PYTHON_VERSION=3.13.5
+PYTHON_VERSION=3.13.7
Labels (3 changes)
  • ± 3 changed
  • 5 unchanged
-org.opencontainers.image.created=2025-06-20T11:12:42.735Z
+org.opencontainers.image.created=2025-10-20T22:29:00.129Z
 org.opencontainers.image.description=Update Hetzner Cloud firewall rules with current Cloudflare IP ranges
 org.opencontainers.image.licenses=MIT
-org.opencontainers.image.revision=90ebdb0cde09868906e19bfb8b149a1abd09824b
+org.opencontainers.image.revision=13800f1082b560aa403ae61519211fa408e41ac1
 org.opencontainers.image.source=https://github.com/jkreileder/cf-ips-to-hcloud-fw
 org.opencontainers.image.title=cf-ips-to-hcloud-fw
 org.opencontainers.image.url=https://github.com/jkreileder/cf-ips-to-hcloud-fw
-org.opencontainers.image.version=1.0.17
+org.opencontainers.image.version=pr-914
Policies (0 improved, 2 worsened, 2 missing data)
Policy Name jkreileder/cf-ips-to-hcloud-fw:1 quay.io/jkreileder/cf-ips-to-hcloud-fw:pr-914 Change Standing
Default non-root user No Change
No AGPL v3 licenses No Change
No fixable critical or high vulnerabilities ⚠️ 2 ⚠️ 3 +1 Worsened
No high-profile vulnerabilities No Change
No outdated base images ❓ No data
No unapproved base images ❓ No data
Supply chain attestations ⚠️ 2 +2 Worsened
Packages and Vulnerabilities (13 package changes and 2 vulnerability changes)
  • ♾️ 13 packages changed
  • 47 packages unchanged
  • ✔️ 2 vulnerabilities removed
Changes for packages of type apk (10 changes)
Package Version
jkreileder/cf-ips-to-hcloud-fw:1
Version
quay.io/jkreileder/cf-ips-to-hcloud-fw:pr-914
♾️ .python-rundeps 20250619.205442 20250819.144338
♾️ alpine-base 3.22.0-r0 3.22.1-r0
♾️ alpine-release 3.22.0-r0 3.22.1-r0
♾️ ca-certificates 20241121-r2 20250619-r0
♾️ ca-certificates-bundle 20241121-r2 20250619-r0
♾️ libcrypto3 3.5.0-r0 3.5.1-r0
♾️ libssl3 3.5.0-r0 3.5.1-r0
♾️ openssl 3.5.0-r0 3.5.1-r0
critical: 0 high: 1 medium: 3 low: 0 critical: 0 high: 1 medium: 2 low: 0
Removed vulnerabilities (1):
  • medium : CVE--2025--4575
♾️ sqlite 3.49.2-r0 3.49.2-r1
critical: 0 high: 1 medium: 0 low: 0
Removed vulnerabilities (1):
  • high : CVE--2025--6965
♾️ sqlite-libs 3.49.2-r0 3.49.2-r1
Changes for packages of type generic (1 changes)
Package Version
jkreileder/cf-ips-to-hcloud-fw:1
Version
quay.io/jkreileder/cf-ips-to-hcloud-fw:pr-914
♾️ python 3.13.5 3.13.7
Changes for packages of type pypi (2 changes)
Package Version
jkreileder/cf-ips-to-hcloud-fw:1
Version
quay.io/jkreileder/cf-ips-to-hcloud-fw:pr-914
♾️ cf-ips-to-hcloud-fw 1.0.17 1.0.18.dev0
♾️ pip 25.1.1 25.2
critical: 0 high: 0 medium: 1 low: 0 critical: 0 high: 0 medium: 1 low: 0

@github-actions
Copy link

github-actions bot commented Oct 6, 2025

Test Results

  5 files  ±0    5 suites  ±0   6s ⏱️ -1s
 36 tests ±0   36 ✅ ±0  0 💤 ±0  0 ❌ ±0 
180 runs  ±0  180 ✅ ±0  0 💤 ±0  0 ❌ ±0 

Results for commit 9e65239. ± Comparison against base commit d56a105.

♻️ This comment has been updated with latest results.

@pre-commit-ci pre-commit-ci bot force-pushed the pre-commit-ci-update-config branch from 883fc3a to 43656b9 Compare October 13, 2025 20:34
updates:
- [github.com/astral-sh/ruff-pre-commit: f298305809c552671cc47e0fec0ba43e96c146a2 → 3b4bc031619cde2e0a9f3c4441ac7cc8227245a4](astral-sh/ruff-pre-commit@f298305...3b4bc03)
@pre-commit-ci pre-commit-ci bot force-pushed the pre-commit-ci-update-config branch from 43656b9 to 9e65239 Compare October 20, 2025 22:27
@jkreileder jkreileder closed this Oct 25, 2025
@jkreileder jkreileder deleted the pre-commit-ci-update-config branch October 25, 2025 23:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants