fix(deps): update dependency werkzeug to v3 [security] #71
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:
==2.1.1->==3.1.4GitHub Vulnerability Alerts
CVE-2023-23934
Browsers may allow "nameless" cookies that look like
=valueinstead ofkey=value. A vulnerable browser may allow a compromised application on an adjacent subdomain to exploit this to set a cookie like=__Host-test=badfor another subdomain.Werkzeug <= 2.2.2 will parse the cookie
=__Host-test=badas__Host-test=bad. If a Werkzeug application is running next to a vulnerable or malicious subdomain which sets such a cookie using a vulnerable browser, the Werkzeug application will see the bad cookie value but the valid cookie key.CVE-2023-25577
Werkzeug's multipart form data parser will parse an unlimited number of parts, including file parts. Parts can be a small amount of bytes, but each requires CPU time to parse and may use more memory as Python data. If a request can be made to an endpoint that accesses
request.data,request.form,request.files, orrequest.get_data(parse_form_data=False), it can cause unexpectedly high resource usage.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. Unlimited file parts can use up memory and file handles. If many concurrent requests are sent continuously, this can exhaust or kill all available workers.
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-34069
The debugger in affected versions of Werkzeug can allow an attacker to execute code on a developer's machine under some circumstances. This requires the attacker to get the developer to interact with a domain and subdomain they control, and enter the debugger PIN, but if they are successful it allows access to the debugger even if it is only running on localhost. This also requires the attacker to guess a URL in the developer's application that will trigger the debugger.
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-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-2025-66221
Werkzeug's
safe_joinfunction allows path segments with Windows device names. On Windows, there are special device names such asCON,AUX, etc that are implicitly present and readable in every directory.send_from_directoryusessafe_jointo safely serve files at user-specified paths under a directory. If the application is running on Windows, and the requested path ends with a special device name, the file will be opened successfully, but reading will hang indefinitely.Release Notes
pallets/werkzeug (Werkzeug)
v3.1.4Compare Source
Released 2025-11-28
safe_joinon Windows does not allow special device names. This preventsreading from these when using
send_from_directory.secure_filenamealready prevented writing to these. :ghsa:
hgf8-39gv-g3f23020\r\nsequence at a chunk boundary.:issue:
30653054Request.jsonannotation is more accurate. :issue:3067source lines. :issue:
3044HTTPException.get_responseannotation and doc better conveys thedistinction between WSGI and sans-IO responses. :issue:
3056v3.1.3Compare Source
Released 2024-11-08
MultiDictand similar interfaces only acceptslist,tuple, orsetwhen passing multiple values. It had beenchanged to accept any
Collection, but this matched types that should betreated as single values, such as
bytes. :issue:2994Hostheader is not set andRequest.hostfalls back to theWSGI
SERVER_NAMEvalue, if that value is an IPv6 address it is wrappedin
[]to match theHostheader. :issue:2993v3.1.2Compare Source
Released 2024-11-04
TypeConversionDict.getto allow thetypeparameter to be a callable. :issue:
2988Headersdoes not inherit fromMutableMapping, as it is does notexactly match that interface. :issue:
2989v3.1.1Compare Source
Released 2024-11-01
str(Request.headers)to always appear empty.:issue:
2985v3.1.0Compare Source
Released 2024-10-31
Drop support for Python 3.8. :pr:
2966Remove previously deprecated code. :pr:
2967Request.max_form_memory_sizedefaults to 500kB instead of unlimited.Non-file form fields over this size will cause a
RequestEntityTooLargeerror. :issue:
2964OrderedMultiDictandImmutableOrderedMultiDictare deprecated.Use
MultiDictandImmutableMultiDictinstead. :issue:2968Behavior of properties on
request.cache_controlandresponse.cache_controlhas been significantly adjusted.str | None. Setting properties will convertthe value to a string. Setting a property to
Falseis equivalent tosetting it to
None. Getting typed properties will returnNoneifconversion raises
ValueError, rather than the string. :issue:2980max_ageisNoneif present without a value, rather than-1.:issue:
2980no_cacheis a boolean for requests, it isTrueinstead of"*"when present. It remains a string for responses. :issue:2980max_staleisTrueif present without a value, ratherthan
"*". :issue:2980no_transformis a boolean. Previously it was mistakenly alwaysNone. :issue:2881min_freshisNoneif present without a value, rather than"*". :issue:2881privateisTrueif present without a value, rather than"*".:issue:
2980must_understandproperty. :issue:2881stale_while_revalidate, andstale_if_errorproperties. :issue:
29482881Support Cookie CHIPS (Partitioned Cookies). :issue:
2797Add 421
MisdirectedRequestHTTP exception. :issue:2850Increase default work factor for PBKDF2 to 1,000,000 iterations.
:issue:
2969Inline annotations for
datastructures, removing stub files.:issue:
2970MultiDict.getlistcatchesTypeErrorin addition toValueErrorwhen doing type conversion. :issue:
2976Implement
|and|=operators forMultiDict,Headers, andCallbackDict, and disallow|=on immutable types. :issue:2977v3.0.6Compare Source
Released 2024-10-25
max_form_memory_sizeis applied when parsing large non-filefields. :ghsa:
q34m-jh98-gwm2safe_joincatches certain paths on Windows that were not caught byntpath.isabson Python < 3.11. :ghsa:f9vj-2wh5-fj8jv3.0.5Compare Source
Released 2024-10-24
294529522955SharedDataMiddleware. :issue:2958UID does not have an associated name. :issue:
2957v3.0.4Compare Source
Released 2024-08-21
multipart/x-www-form-urlencodeddata withinvalid UTF-8 bytes in the body results in no form data parsed rather than a
413 error. :issue:
2930parse_options_headerperformance when parsing unterminatedquoted string values. :issue:
2904failed entries. :issue:
2916SSLEOFErrordue to issue in Python < 3.13.:issue:
2926:issue:
2918v3.0.3Compare Source
Released 2024-05-05
localhost,.localhost,127.0.0.1, or the specifiedhostname when running the dev server, to make debugger requests. Additional
hosts can be added by using the debugger middleware directly. The debugger
UI makes requests using the full URL rather than only the path.
:ghsa:
2g68-c3qc-8985""is insys.path. :pr:2823adhocdev certs. :pr:2891itms-servicesURIs correctly, ratherthan using an overly-broad workaround in Werkzeug that caused some redirect
URIs to be passed on without encoding. :issue:
2828Rule.endpointand other uses ofendpointisAny. :issue:2836""is insys.path. :pr:2823v3.0.2Compare Source
Released 2024-04-01
merge_slashestoFalseresults inNotFoundforrepeated-slash requests against single slash routes. :issue:
2834TypeErrorinTypeConversionDict.get()to matchValueError. :issue:2843response_wrappertype check in test client. :issue:2831MultiPartParser.parsemore precise.:issue:
28402822v3.0.1Compare Source
Released 2023-10-24
v3.0.0Compare Source
Released 2023-09-30
2768__version__attribute. Use feature detection, orimportlib.metadata.version("werkzeug"), instead. :issue:2770generate_password_hashuses scrypt by default. :issue:2769"werkzeug.profiler"item to the WSGIenvirondictionarypassed to
ProfilerMiddleware'sfilename_formatfunction. It containsthe
elapsedandtimevalues for the profiled request. :issue:27752784v2.3.8Compare Source
Released 2023-11-08
attacks.
v2.3.7Compare Source
Released 2023-08-14
flit_coreinstead ofsetuptoolsas build backend.27342761273427402750Acceptqvalue can be a float without a decimal part. :issue:2751v2.3.6Compare Source
Released 2023-06-08
FileStorage.content_lengthdoes not fail if the form data did not provide avalue. :issue:
2726v2.3.5Compare Source
Released 2023-06-07
2704Authorization.from_header. :issue:27172719routing.Map, a long IDNAserver_namewith a port does not failencoding. :issue:
2700iri_to_urishows a deprecation warning instead of an error when passing bytes.:issue:
2708Content-Length, only ASCIIdigits are accepted rather than any format that Python's
intandfloataccept. :issue:
2716v2.3.4Compare Source
Released 2023-05-08
Authorization.from_headerandWWWAuthenticate.from_headerdetects tokensthat end with base64 padding (
=). :issue:2685warnings.catch_warnings. :issue:2690max_form_partsrestriction from standard form data parsing and only useif for multipart content. :pr:
2694Responsewill avoid converting theLocationheader in some cases to preserveinvalid URL schemes like
itms-services. :issue:2691v2.3.3Compare Source
Released 2023-05-01
parsing speed. :issue:
2658, 2675Pathattribute is set to/by default again, to prevent clientsfrom falling back to RFC 6265's
default-pathbehavior. :issue:2672, 2679v2.3.2Compare Source
Released 2023-04-28
Expiresattribute correctly in the test client. :issue:2669max_content_lengthcan only be enforced on streaming requests if the serversets
wsgi.input_terminated. :issue:2668v2.3.1Compare Source
Released 2023-04-27
26572659pyifiles fordatastructurestype annotations. :issue:2660AuthorizationandWWWAuthenticateobjects can be compared for equality.:issue:
2665v2.3.0Compare Source
Released 2023-04-25
Drop support for Python 3.7. :pr:
2648Remove previously deprecated code. :pr:
2592Passing bytes where strings are expected is deprecated, as well as the
charsetand
errorsparameters in many places. Anywhere that was annotated, documented,or tested to accept bytes shows a warning. Removing this artifact of the transition
from Python 2 to 3 removes a significant amount of overhead in instance checks and
encoding cycles. In general, always work with UTF-8, the modern HTML, URL, and HTTP
standards all strongly recommend this. :issue:
2602Deprecate the
werkzeug.urlsmodule, except for theuri_to_iriandiri_to_urifunctions. Use theurllib.parselibrary instead. :issue:2600Update which characters are considered safe when using percent encoding in URLs,
based on the WhatWG URL Standard. :issue:
2601Update which characters are considered safe when using percent encoding for Unicode
filenames in downloads. :issue:
2598Deprecate the
safe_conversionparameter ofiri_to_uri. TheLocationheader is converted to IRI using the same process as everywhere else. :issue:
2609Deprecate
werkzeug.wsgi.make_line_iterandmake_chunk_iter. :pr:2613Use modern packaging metadata with
pyproject.tomlinstead ofsetup.cfg.:pr:
2574Request.get_json()will raise a415 Unsupported Media Typeerror if theContent-Typeheader is notapplication/json, instead of a generic 400.:issue:
2550A URL converter's
part_isolatingdefaults toFalseif itsregexcontainsa
/. :issue:2582A custom converter's regex can have capturing groups without breaking the router.
:pr:
2596The reloader can pick up arguments to
pythonlike-X dev, and does notrequire heuristics to determine how to reload the command. Only available
on Python >= 3.10. :issue:
2589The Watchdog reloader ignores file opened events. Bump the minimum version of
Watchdog to 2.3.0. :issue:
2603When using a Unix socket for the development server, the path can start with a dot.
:issue:
2595Increase default work factor for PBKDF2 to 600,000 iterations. :issue:
2611parse_options_headeris 2-3 times faster. It conforms to :rfc:9110, someinvalid parts that were previously accepted are now ignored. :issue:
1628The
is_filenameparameter tounquote_header_valueis deprecated. :pr:2614Deprecate the
extra_charsparameter and passing bytes toquote_header_value,the
allow_tokenparameter todump_header, and theclsparameter andpassing bytes to
parse_dict_header. :pr:2618Improve
parse_accept_headerimplementation. Parse according to :rfc:9110.Discard items with invalid
qvalues. :issue:1623quote_header_valuequotes the empty string. :pr:2618dump_options_headerskipsNonevalues rather than using a bare key.:pr:
2618dump_headeranddump_options_headerwill not quote a value if the key endswith an asterisk
*.parse_dict_headerwill decode values with charsets. :pr:2618Refactor the
AuthorizationandWWWAuthenticateheader data structures.:issue:
1769, :pr:2619type,parameters, andtokenattributes. Thetokenattribute supports auth schemes that use a single opaque token ratherthan
key=valueparameters, such asBearer.dictanymore, although they still implement getting,setting, and deleting
auth[key]andauth.keysyntax, as well asauth.get(key)andkey in auth.from_headerclass method.parse_authorization_headerand
parse_www_authenticate_headerare deprecated.WWWAuthenticate.set_basicandset_digestare deprecated.Instead, an instance should be created and assigned to
response.www_authenticate.response.www_authenticateto setmultiple header values. However, accessing the property only returns the first
instance.
Refactor
parse_cookieanddump_cookie. :pr:2637parse_cookieis up to 40% faster,dump_cookieis up to 60% faster.parse_cookieanddump_cookieis deprecated. Thedump_cookiecharsetparameter is deprecated.dump_cookieallowsdomainvalues that do not include a dot., andstrips off a leading dot.
dump_cookiedoes not setpath="/"unnecessarily by default.Refactor the test client cookie implementation. :issue:
1060, 1680cookie_jarattribute is deprecated.http.cookiejaris no longer usedfor storage.
domainandpathparameters default tolocalhostand/.get_cookiemethod to inspect cookies.decoded_keyanddecoded_valueattributes to match what theapp sees rather than the encoded values a client would see.
server_nameparameter toset_cookieanddelete_cookieis deprecated. Use thedomainparameter instead.delete_cookiebesidesdomain,path, andvalueare deprecated.If
request.max_content_lengthis set, it is checked immediately when accessingthe stream, and while reading from the stream in general, rather than only during
form parsing. :issue:
1513The development server, which must not be used in production, will exhaust the
request stream up to 10GB or 1000 reads. This allows clients to see a 413 error if
max_content_lengthis exceeded, instead of a "connection reset" failure.:pr:
2620The development server discards header keys that contain underscores
_, as theyare ambiguous with dashes
-in WSGI. :pr:2622secure_filenamelooks for more Windows reserved file names. :pr:2623Update type annotation for
best_matchto makedefaultparameter clearer.:issue:
2625Multipart parser handles empty fields correctly. :issue:
2632The
Mapcharsetparameter andRequest.url_charsetproperty aredeprecated. Percent encoding in URLs must always represent UTF-8 bytes. Invalid
bytes are left percent encoded rather than replaced. :issue:
2602The
Request.charset,Request.encoding_errors,Response.charset, andClient.charsetattributes are deprecated. Request and response data must alwaysuse UTF-8. :issue:
2602Header values that have charset information only allow ASCII, UTF-8, and ISO-8859-1.
:pr:
2614, 2641Update type annotation for
ProfilerMiddlewarestreamparameter.:issue:
2642Use postponed evaluation of annotations. :pr:
2644The development server escapes ASCII control characters in decoded URLs before
logging the request to the terminal. :pr:
2652The
FormDataParserparse_functionsattribute andget_parse_funcmethod,and the invalid
application/x-url-encodedcontent type, are deprecated.:pr:
2653generate_password_hashsupports scrypt. Plain hash methods are deprecated, onlyscrypt and pbkdf2 are supported. :issue:
2654v2.2.3Compare Source
Released 2023-02-14
the trailing slash is missing. :issue:
2533get_jsonspecifies that return type is not optional whensilent=False. :issue:2508parse_content_range_headerreturnsNonefor a value likebytes */-1where the length is invalid, instead of raising an
AssertionError. :issue:2531ResourceWarningrelated to the socket used byrun_simple.Remove
prepare_socket, which now happens when creating the server. :issue:2421multipart/form-datarequests with the testclient. :issue:
2549:issue:
2529LimitedStream.readworks correctly when wrapping a stream that may not returnthe requested size in one
readcall. :issue:2558=is treated as an empty key and discarded,rather than stripping the leading
==.RequestEntityTooLargeexception is raised on parsing. This mitigates a DoSattack where a larger number of form/file parts would result in disproportionate
resource use.
v2.2.2Compare Source
Released 2022-08-08
strict_slashes == Falsebehaviourwhereby leaf-requests match branch rules and vice
versa. :pr:
2489and to correctly parse
/within converter arguments. :pr:2489werkzeug.routingto use theimport assyntax for explicitly re-exporting public attributes.:pr:
24932494production deployment is always shown. :issue:
2480LocalProxy.__wrapped__is always set to the wrapped object whenthe proxy is unbound, fixing an issue in doctest that would cause it
to fail. :issue:
2485ResourceWarningrelated to the socket used byrun_simple. :issue:2421v2.2.1Compare Source
Released 2022-07-27
/path/will match a rule/pathif strictslashes mode is disabled for the rule. :issue:
2467i.e.
/2dfdoes not match/<int>. :pr:2470before more complex ones. :issue:
2471ValidationErrorto be importable fromwerkzeug.routing. :issue:2465v2.2.0Compare Source
Released 2022-07-23
get_script_name,get_query_string,peek_path_info,pop_path_info, andextract_path_info. :pr:24612461rendering HTML. :issue:
2419werkzeug.debug.preserve_contextmechanism forrestoring context-local data for a request when running code in the
debug console. :pr:
2439end_linenoand
end_col_offsetare present on AST nodes. :issue:2425needs to match a
/it must set the class variablepart_isolating = False.:pr:
2433disabled. :issue:
1074matches :rfc:
6266that the case is not relevant. :issue:2442AnyConvertervalidates the value passed for it when buildingURLs. :issue:
23883.11. :issue:
2407is_resource_modifiedandparse_cookiefunctionsbased on WSGI versions. :issue:
2408get_content_lengthfunction. :pr:24152450FileStorageacceptsos.PathLike. :pr:2418v2.1.2Compare Source
Released 2022-04-28
Transfer-Encoding: chunkedfor 1xx, 204, 304, and HEAD responses. :issue:
2375<!doctype html>and<html lang=en>. :issue:2390cache_controlattributes toFalse.:issue:
2379keep-aliveconnections in the development server, whichare not supported sufficiently by Python's
http.server.:issue:
2397Configuration
📅 Schedule: Branch creation - "" (UTC), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.