chore(deps): update security vulnerabilities [security] #7095
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
==0.14.3->==1.6.5~=3.0.6->~=6.0.0==2.2.3->==3.0.614.2.26->14.2.32==2.31.0->==2.32.4==1.26.16->==2.5.0GitHub Vulnerability Alerts
CVE-2025-59420
Summary
Authlib’s JWS verification accepts tokens that declare unknown critical header parameters (
crit), violating RFC 7515 “must‑understand” semantics. An attacker can craft a signed token with a critical header (for example,borkorcnf) that strict verifiers reject but Authlib accepts. In mixed‑language fleets, this enables split‑brain verification and can lead to policy bypass, replay, or privilege escalation.Affected Component and Versions
authlib.jose.JsonWebSignature.deserialize_compact(...)critDetails
RFC 7515 (JWS) §4.1.11 defines
critas a “must‑understand” list: recipients MUST understand and enforce every header parameter listed incrit, otherwise they MUST reject the token. Security‑sensitive semantics such as token binding (e.g.,cnffrom RFC 7800) are often conveyed viacrit.Observed behavior with Authlib 1.6.3:
crit: ["cnf"]and acnfobject, orcrit: ["bork"]with an unknown parameter, Authlib verifies the signature and returns the payload without rejecting the token or enforcing semantics of the critical parameter.josev5 both reject such tokens by default whencritlists unknown names.Impact in heterogeneous fleets:
critcarries binding or policy information.Proof of Concept (PoC)
This repository provides a multi‑runtime PoC demonstrating the issue across Python (Authlib), Node (
josev5), and Java (Nimbus).Prerequisites
Setup
Enter the directory authlib-crit-bypass-poc & run following commands.
Tokens minted
tokens/unknown_crit.jwtwith protected header:{ "alg": "HS256", "crit": ["bork"], "bork": "x" }tokens/cnf_header.jwtwith protected header:{ "alg": "HS256", "crit": ["cnf"], "cnf": {"jkt": "thumb-42"} }Reproduction
Run the cross‑runtime demo:
Expected output for each token (strict verifiers reject; Authlib accepts):
For
tokens/unknown_crit.jwt:For
tokens/cnf_header.jwt:Environment notes:
1.6.3(from PyPI)joseversion:^59.37.x0123456789abcdef0123456789abcdefImpact
crit“must‑understand” semantics; specification non‑compliance leading to authentication/authorization policy bypass.critto carry mandatory security semantics (e.g., token binding viacnf) or operates in a heterogeneous fleet with strict verifiers elsewhere.References
critcnf)CVE-2025-61920
Summary
Authlib’s JOSE implementation accepts unbounded JWS/JWT header and signature segments. A remote attacker can craft a token whose base64url‑encoded header or signature spans hundreds of megabytes. During verification, Authlib decodes and parses the full input before it is rejected, driving CPU and memory consumption to hostile levels and enabling denial of service.
Impact
Attack vector: unauthenticated network attacker submits a malicious JWS/JWT.
Effect: base64 decode + JSON/crypto processing of huge buffers pegs CPU and allocates large amounts of RAM; a single request can exhaust service capacity.
Observed behaviour: on a test host, the legacy code verified a 500 MB header, consuming ~4 GB RSS and ~9 s CPU before failing.
Severity: High. CVSS v3.1: AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H (7.5).
Affected Versions
Authlib ≤ 1.6.3 (and earlier) when verifying JWS/JWT tokens. Later snapshots with 256 KB header/signature limits are not affected.
Proof of concept
Local demo (do not run against third-party systems):
Download jws_segment_dos_demo.py the PoC in direcotry authlib/
Run following Command
Environment: Python 3.13.6, Authlib 1.6.4, Linux x86_64, CPUs=8

Sample output: Refined
The compilation script prints separate “[ATTACKER]” (token construction) and “[SERVER]” (Authlib verification) RSS deltas so defenders can distinguish client-side preparation from server-side amplification. Regression tests authlib/tests/dos/test_jose_dos.py further capture the issue; the saved original_util.py/original_jws.py reproductions still accept the malicious payload.
Remediation
Apply the upstream patch that introduces decoded size limits:
MAX_HEADER_SEGMENT_BYTES = 256 KB
MAX_SIGNATURE_SEGMENT_BYTES = 256 KB
Enforce Limits in authlib/jose/util.extract_segment and _extract_signature.
Deploy the patched release immediately.
For additional defence in depth, reject JWS/JWT inputs above a few kilobytes at the proxy or WAF layer, and rate-limit verification endpoints.
Workarounds (temporary)
Enforce input size limits before handing tokens to Authlib.
Use application-level throttling to reduce amplification risk.
Resources
Demo script: jws_segment_dos_demo.py
Tests: authlib/tests/dos/test_jose_dos.py
OWASP JWT Cheat Sheet (DoS guidance)
CVE-2025-62706
Summary
Authlib’s JWE
zip=DEFpath performs unbounded DEFLATE decompression. A very small ciphertext can expand into tens or hundreds of megabytes on decrypt, allowing an attacker who can supply decryptable tokens to exhaust memory and CPU and cause denial of service.Details
zip=DEF(DEFLATE) support.authlib/authlib/jose/rfc7518/jwe_zips.py,DeflateZipAlgorithm.decompresscallszlib.decompress(s, -zlib.MAX_WBITS)without a maximum output limit. This permits unbounded expansion of compressed payloads.authlib/authlib/jose/rfc7516/jwe.py), when the protected header contains"zip": "DEF", the library routes the decrypted ciphertext into thedecompressmethod and assigns the fully decompressed bytes to the plaintext field before returning it. No streaming limit or quota is applied.zip=DEFciphertext that inflates to a very large plaintext during decrypt, spiking RSS and CPU. Repeated requests can starve the process or host.Code references (from this repository version):
authlib/authlib/jose/rfc7518/jwe_zips.py–DeflateZipAlgorithm.decompressuses unboundedzlib.decompress.authlib/authlib/jose/rfc7516/jwe.py– JWE decode path applieszip_.decompress(msg)whenzip=DEFis present in the header.Contrast: The
joserfcproject guardszip=DEFdecompression with a fixed maximum (256 KB) and raisesExceededSizeErrorif output would exceed this limit, preventing the bomb. Authlib lacks such a guard in this codebase snapshot.PoC
Environment: Python 3.10+ inside a venv; Authlib installed editable from this repository so source changes are visible. The PoC script demonstrates both a benign and a compressible-bomb payload and prints wall/CPU time, RSS, and size ratios.
Set current directory to /authlib
Download jwe_deflate_dos_demo.py in /authlib
Sample output (abridged):
The second case shows the decompression spike: a few KB of ciphertext forces allocation and processing of ~50 MB during decrypt. Repeated requests can quickly exhaust available memory and CPU.
Reproduction notes:
alg=dir,enc=A256GCM, header includes{ "zip": "DEF" }."A" * N).--sizeto stress memory; the--max-rss-mbflag helps avoid destabilizing the host during testing.Impact
zip=DEFtokens.zip=DEFand where an attacker can submit tokens that will be successfully decrypted (e.g., shareddirkey, token reflection, or compromised/abused issuers).Severity (CVSS v3.1)
Base vector (typical shared‑secret scenario where the attacker must produce a decryptable token):
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H→ 6.5 (MEDIUM)Rationale:
alg=dirand shared keys across services.If arbitrary unprivileged parties can submit JWEs that will be decrypted (PR:N), the base vector becomes:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H→ 7.5 (HIGH)Mitigations / Workarounds
zip=DEFfor inbound JWEs at the application boundary until a fix is available.zlib.decompress(..., max_length)viadecompressobj().decompress(data, MAX_SIZE)), returning an error when output exceeds a safe limit.Remediation Guidance (for maintainers)
joserfc’s approach: add a conservative maximum output size (e.g., 256 KB by default) and raise a specific error when exceeded; document a controlled way to raise this ceiling for trusted environments.References
authlib/authlib/jose/rfc7518/jwe_zips.py,authlib/authlib/jose/rfc7516/jwe.pyCVE-2024-1681
corydolphin/flask-cors is vulnerable to log injection when the log level is set to debug. An attacker can inject fake log entries into the log file by sending a specially crafted GET request containing a CRLF sequence in the request path. This vulnerability allows attackers to corrupt log files, potentially covering tracks of other attacks, confusing log post-processing tools, and forging log entries. The issue is due to improper output neutralization for logs.
CVE-2024-6844
A vulnerability in corydolphin/flask-cors version 5.0.1 allows for inconsistent CORS matching due to the handling of the '+' character in URL paths. The request.path is passed through the unquote_plus function, which converts the '+' character to a space ' '. This behavior leads to incorrect path normalization, causing potential mismatches in CORS configuration. As a result, endpoints may not be matched correctly to their CORS settings, leading to unexpected CORS policy application. This can cause unauthorized cross-origin access or block valid requests, creating security vulnerabilities and usability issues.
CVE-2024-6866
corydolphin/flask-cors version 5.0.1 contains a vulnerability where the request path matching is case-insensitive due to the use of the
try_matchfunction, which is originally intended for matching hosts. This results in a mismatch because paths in URLs are case-sensitive, but the regex matching treats them as case-insensitive. This misconfiguration can lead to significant security vulnerabilities, allowing unauthorized origins to access paths meant to be restricted, resulting in data exposure and potential data leaks.CVE-2024-6839
corydolphin/flask-cors version 5.0.1 contains an improper regex path matching vulnerability. The plugin prioritizes longer regex patterns over more specific ones when matching paths, which can lead to less restrictive CORS policies being applied to sensitive endpoints. This mismatch in regex pattern priority allows unauthorized cross-origin access to sensitive data or functionality, potentially exposing confidential information and increasing the risk of unauthorized actions by malicious actors.
CVE-2023-46136
Werkzeug multipart data parser needs to find a boundary that may be between consecutive chunks. That's why parsing is based on looking for newline characters. Unfortunately, code looking for partial boundary in the buffer is written inefficiently, so if we upload a file that starts with CR or LF and then is followed by megabytes of data without these characters: all of these bytes are appended chunk by chunk into internal bytearray and lookup for boundary is performed on growing buffer.
This allows an attacker to cause a denial of service by sending crafted multipart data to an endpoint that will parse it. The amount of CPU time required can block worker processes from handling legitimate requests. The amount of RAM required can trigger an out of memory kill of the process. If many concurrent requests are sent continuously, this can exhaust or kill all available workers.
CVE-2024-49767
Applications using Werkzeug to parse
multipart/form-datarequests are vulnerable to resource exhaustion. A specially crafted form body can bypass theRequest.max_form_memory_sizesetting.The
Request.max_content_lengthsetting, as well as resource limits provided by deployment software and platforms, are also available to limit the resources used during a request. This vulnerability does not affect those settings. All three types of limits should be considered and set appropriately when deploying an application.CVE-2024-49766
On Python < 3.11 on Windows,
os.path.isabs()does not catch UNC paths like//server/share. Werkzeug'ssafe_join()relies on this check, and so can produce a path that is not safe, potentially allowing unintended access to data. Applications using Python >= 3.11, or not using Windows, are not vulnerable.CVE-2025-48068
Summary
A low-severity vulnerability in Next.js has been fixed in version 15.2.2. This issue may have allowed limited source code exposure when the dev server was running with the App Router enabled. The vulnerability only affects local development environments and requires the user to visit a malicious webpage while
npm run devis active.Because the mitigation is potentially a breaking change for some development setups, to opt-in to the fix, you must configure
allowedDevOriginsin your next config after upgrading to a patched version. Learn more.Learn more: https://vercel.com/changelog/cve-2025-48068
Credit
Thanks to sapphi-red and Radman Siddiki for responsibly disclosing this issue.
CVE-2025-57752
A vulnerability in Next.js Image Optimization has been fixed in v15.4.5 and v14.2.31. When images returned from API routes vary based on request headers (such as
CookieorAuthorization), these responses could be incorrectly cached and served to unauthorized users due to a cache key confusion bug.All users are encouraged to upgrade if they use API routes to serve images that depend on request headers and have image optimization enabled.
More details at Vercel Changelog
CVE-2025-57822
A vulnerability in Next.js Middleware has been fixed in v14.2.32 and v15.4.7. The issue occurred when request headers were directly passed into
NextResponse.next(). In self-hosted applications, this could allow Server-Side Request Forgery (SSRF) if certain sensitive headers from the incoming request were reflected back into the response.All users implementing custom middleware logic in self-hosted environments are strongly encouraged to upgrade and verify correct usage of the
next()function.More details at Vercel Changelog
CVE-2025-55173
A vulnerability in Next.js Image Optimization has been fixed in v15.4.5 and v14.2.31. The issue allowed attacker-controlled external image sources to trigger file downloads with arbitrary content and filenames under specific configurations. This behavior could be abused for phishing or malicious file delivery.
All users relying on
images.domainsorimages.remotePatternsare encouraged to upgrade and verify that external image sources are strictly validated.More details at Vercel Changelog
CVE-2024-35195
When making requests through a Requests
Session, if the first request is made withverify=Falseto disable cert verification, all subsequent requests to the same origin will continue to ignore cert verification regardless of changes to the value ofverify. This behavior will continue for the lifecycle of the connection in the connection pool.Remediation
Any of these options can be used to remediate the current issue, we highly recommend upgrading as the preferred mitigation.
requests>=2.32.0.requests<2.32.0, avoid settingverify=Falsefor the first request to a host while using a Requests Session.requests<2.32.0, callclose()onSessionobjects to clear existing connections ifverify=Falseis used.Related Links
CVE-2024-47081
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=Falseon your Requests Session (docs).References
https://github.com/psf/requests/pull/6965
https://seclists.org/fulldisclosure/2025/Jun/2
CVE-2023-43804
urllib3 doesn't treat the
CookieHTTP header special or provide any helpers for managing cookies over HTTP, that is the responsibility of the user. However, it is possible for a user to specify aCookieheader and unknowingly leak information via HTTP redirects to a different origin if that user doesn't disable redirects explicitly.Users must handle redirects themselves instead of relying on urllib3's automatic redirects to achieve safe processing of the
Cookieheader, thus we decided to strip the header by default in order to further protect users who aren't using the correct approach.Affected usages
We believe the number of usages affected by this advisory is low. It requires all of the following to be true to be exploited:
Cookieheader on requests, which is mostly typical for impersonating a browser.Remediation
redirects=Falsewhen sending requests.Cookieheader.CVE-2023-45803
urllib3 previously wouldn't remove the HTTP request body when an HTTP redirect response using status 303 "See Other" after the request had its method changed from one that could accept a request body (like
POST) toGETas is required by HTTP RFCs. Although the behavior of removing the request body is not specified in the section for redirects, it can be inferred by piecing together information from different sections and we have observed the behavior in other major HTTP client implementations like curl and web browsers.From RFC 9110 Section 9.3.1:
Affected usages
Because the vulnerability requires a previously trusted service to become compromised in order to have an impact on confidentiality we believe the exploitability of this vulnerability is low. Additionally, many users aren't putting sensitive data in HTTP request bodies, if this is the case then this vulnerability isn't exploitable.
Both of the following conditions must be true to be affected by this vulnerability:
Remediation
You can remediate this vulnerability with any of the following steps:
redirects=False.redirects=Falseand handle 303 redirects manually by stripping the HTTP request body.CVE-2024-37891
When using urllib3's proxy support with
ProxyManager, theProxy-Authorizationheader is only sent to the configured proxy, as expected.However, when sending HTTP requests without using urllib3's proxy support, it's possible to accidentally configure the
Proxy-Authorizationheader even though it won't have any effect as the request is not using a forwarding proxy or a tunneling proxy. In those cases, urllib3 doesn't treat theProxy-AuthorizationHTTP header as one carrying authentication material and thus doesn't strip the header on cross-origin redirects.Because this is a highly unlikely scenario, we believe the severity of this vulnerability is low for almost all users. Out of an abundance of caution urllib3 will automatically strip the
Proxy-Authorizationheader during cross-origin redirects to avoid the small chance that users are doing this on accident.Users should use urllib3's proxy support or disable automatic redirects to achieve safe processing of the
Proxy-Authorizationheader, but we still decided to strip the header by default in order to further protect users who aren't using the correct approach.Affected usages
We believe the number of usages affected by this advisory is low. It requires all of the following to be true to be exploited:
Proxy-Authorizationheader without using urllib3's built-in proxy support.Remediation
Proxy-Authorizationheader with urllib3'sProxyManager.redirects=Falsewhen sending requests.Proxy-Authorizationheader.CVE-2025-50181
urllib3 handles redirects and retries using the same mechanism, which is controlled by the
Retryobject. The most common way to disable redirects is at the request level, as follows:However, it is also possible to disable redirects, for all requests, by instantiating a
PoolManagerand specifyingretriesin a way that disable redirects:However, the
retriesparameter is currently ignored, which means all the above examples don't disable redirects.Affected usages
Passing
retriesonPoolManagerinstantiation 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:
request()level instead of thePoolManager()level.Release Notes
authlib/authlib (Authlib)
v1.6.5Compare Source
What's Changed
requestparam to RFC7591generate_client_infoandgenerate_client_secretmethods by @azmeuk in #825New Contributors
Full Changelog: authlib/authlib@v1.6.4...v1.6.5
v1.6.4Compare Source
What's Changed
InsecureTransportErrorraising by @azmeuk in #810New Contributors
Full Changelog: authlib/authlib@v1.6.3...v1.6.4
v1.6.3: Version 1.6.3Compare Source
What's Changed
id_token_signed_response_algclient metadata by @azmeuk in #802Full Changelog: authlib/authlib@v1.6.2...v1.6.3
v1.6.2: Version 1.6.2Compare Source
What's Changed
Full Changelog: authlib/authlib@v1.6.1...v1.6.2
v1.6.1: Version 1.6.1Compare Source
v1.6.0: Version 1.6.0Compare Source
v1.5.2: Version 1.5.2Compare Source
Released on Apr 1, 2025
claims_clsparameter for client's parse_id_token method. #725v1.5.1: Version 1.5.1Compare Source
Released on Feb 28, 2025
v1.5.0: Version 1.5.0Compare Source
v1.4.1: Version 1.4.1Compare Source
v1.4.0: Version 1.4.0Compare Source
Bugfixes
Breaking changes
v1.3.2: Version 1.3.2Compare Source
quoteclient id and secret.unquotebasic auth header for authorization server.v1.3.1: Version 1.3.1Compare Source
Prevent
OctKeyto import ssh and PEM strings.v1.3.0: Version 1.3.0Compare Source
Bug fixes
Breaking changes
v1.2.1: Version 1.2.1Compare Source
ClientSecretJWT.signmethod, via #552authorize_redirectfor Starlette v0.26.0, via #533has_client_secretmethod and documentation, via #513request_invalidandtoken_revokedremaining occurencesand documentation. #514
grant_typesandresponse_typesdefault values, via #509v1.2.0: Version 1.2.0Compare Source
request.bodytoResourceProtector, #485.flask.ginstead of_app_ctx_stack, #482.headersparameter back toClientSecretJWT, #457.realmparameter in OAuth 1 clients, #339.default_timeoutfor requestsOAuth2SessionandAssertionSession.jwk.loadsandjwk.dumpsv1.1.0: Version 1.1.0Compare Source
This release contains breaking changes and security fixes.
claims_optionsto Framework OpenID Connect clients, via #446 by @Galaxy102.streamwith context for HTTPX OAuth clients, via #465 by @bjoernmeierBreaking changes:
InvalidGrantErrorfor invalid code, redirect_uri and no user errors in OAuth 2.0 server.authlib.jose.jwtwould only work with JSON Web Signature algorithms, if you would like to use JWT with JWE algorithms, please pass the algorithms parameter:Security fixes for JOSE module
v1.0.1: Version 1.0.1Compare Source
authenticate_nonemethod, via #438.missing_tokenfor Flask OAuth client, via #448.openidin any place of the scope, via #449.v1.0.0: Version 1.0.0Compare Source
We have dropped support for Python 2 in this release. We have removed
built-in SQLAlchemy integration.
OAuth Client Changes:
The whole framework client integrations have been restructured, if you are
using the client properly, e.g.
oauth.register(...), it would work asbefore.
OAuth Provider Changes:
In Flask OAuth 2.0 provider, we have removed the deprecated
OAUTH2_JWT_XXXconfiguration, instead, developers should define.get_jwt_configon OpenID extensions and grant types.SQLAlchemy integrations has been removed from Authlib. Developers
should define the database by themselves.
JOSE Changes
JWShas been renamed toJsonWebSignatureJWEhas been renamed toJsonWebEncryptionJWKhas been renamed toJsonWebKeyJWThas been renamed toJsonWebTokenThe "Key" model has been re-designed, checkout the JSON Web Key for updates.
Added
ES256Kalgorithm for JWS and JWT.Breaking Changes: find how to solve the deprecate issues via https://git.io/JkY4f
v0.15.6Compare Source
v0.15.5: Version 0.15.5Compare Source
algvaluev0.15.4: Version 0.15.4Compare Source
Security fix when JWT claims is None.
For example, JWT payload has
iss=None:But we need to decode it with claims:
It didn't raise an error before this fix.
v0.15.3: Version 0.15.3Compare Source
Fixed
.authorize_access_tokenfor OAuth 1.0 services, via lepture#308v0.15.2: Version 0.15.2Compare Source
Fixed httpx authentication bug via #283
v0.15.1: Version 0.15.1Compare Source
Backward compitable fix for using JWKs in JWT, via #280.
v0.15: Version 0.15Compare Source
This is the last release before v1.0. In this release, we added more RFCs
implementations and did some refactors for JOSE:
We also fixed bugs for integrations:
Breaking Change:
algorithmsinJsonWebSignatureandJsonWebEncryptionare changed. Usually you don't have to care about it since you won't use it directly.
corydolphin/flask-cors (Flask-Cors)
v6.0.0Compare Source
Breaking
Path specificity ordering has changed to improve specificity. This may break users who expected the previous incorrect ordering.
What's Changed
Full Changelog: corydolphin/flask-cors@5.0.1...6.0.0
v5.0.1Compare Source
What's Changed
This primarily changes packaging to use uv and a new release pipeline, along with some small documentation improvements
New Contributors
Full Changelog: corydolphin/flask-cors@5.0.0...5.0.01
v5.0.0Compare Source
What's Changed
This effectively resolves GHSA-hxwh-jpp2-84pm https://osv.dev/vulnerability/PYSEC-2024-71
Full Changelog: corydolphin/flask-cors@4.0.2...5.0.0
v4.0.2Compare Source
What's Changed
New Contributors
Full Changelog: corydolphin/flask-cors@4.0.1...4.0.2
v4.0.1Compare Source
Security
Configuration
📅 Schedule: Branch creation - "" in timezone UTC, Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.
This PR was generated by Mend Renovate. View the repository job log.