Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Security] Bump waitress from 0.8.10 to 1.4.1 #55

Closed
wants to merge 1 commit into from

Conversation

dependabot-preview[bot]
Copy link

Bumps waitress from 0.8.10 to 1.4.1. This update includes security fixes.

Vulnerabilities fixed

Sourced from The GitHub Security Advisory Database.

High severity vulnerability that affects waitress

Impact

If a proxy server is used in front of waitress, an invalid request may be sent by an attacker that bypasses the front-end and is parsed differently by waitress leading to a potential for HTTP request smuggling.

Content-Length: 10
Transfer-Encoding: [\x0b]chunked

For clarity:

0x0b == vertical tab

Would get parsed by Waitress as being a chunked request, but a front-end server would use the Content-Length instead as the Transfer-Encoding header is considered invalid due to containing invalid characters.

If a front-end server does HTTP pipelining to a backend Waitress server this could lead to HTTP request splitting which may lead to potential cache poisoning or unexpected information disclosure.

Patches

... (truncated)

Affected versions: < 1.4.1

Sourced from The GitHub Security Advisory Database.

Critical severity vulnerability that affects waitress

Impact

Waitress would header fold a double Content-Length header and due to being unable to cast the now comma separated value to an integer would set the Content-Length to 0 internally.

So a request with:

Content-Length: 10
Content-Length: 10

would get transformed to:

Content-Length: 10, 10

Which would Waitress would then internally set to Content-Lenght: 0.

Waitress would then treat the request as having no body, thereby treating the body of the request as a new request in HTTP pipelining.

... (truncated)

Affected versions: < 1.3.1

Sourced from The GitHub Security Advisory Database.

Critical severity vulnerability that affects waitress

Impact

Waitress implemented a "MAY" part of the RFC7230 (https://tools.ietf.org/html/rfc7230#section-3.5) which states:

  Although the line terminator for the start-line and header fields is
  the sequence CRLF, a recipient MAY recognize a single LF as a line
  terminator and ignore any preceding CR.

Unfortunately if a front-end server does not parse header fields with an LF the same way as it does those with a CRLF it can lead to the front-end and the back-end server parsing the same HTTP message in two different ways. This can lead to a potential for HTTP request smuggling/splitting whereby Waitress may see two requests while the front-end server only sees a single HTTP message.

Example:

Content-Length: 100[CRLF]
X-Header: x[LF]Content-Length: 0[CRLF]

Would get treated by Waitress as if it were:

</tr></table> ... (truncated)

Affected versions: <= 1.3.1

Sourced from The GitHub Security Advisory Database.

Critical severity vulnerability that affects waitress

Impact

Waitress would parse the Transfer-Encoding header and only look for a single string value, if that value was not chunked it would fall through and use the Content-Length header instead.

According to the HTTP standard Transfer-Encoding should be a comma separated list, with the inner-most encoding first, followed by any further transfer codings, ending with chunked.

Requests sent with:

Transfer-Encoding: gzip, chunked

Would incorrectly get ignored, and the request would use a Content-Length header instead to determine the body size of the HTTP message.

This could allow for Waitress to treat a single request as multiple requests in the case of HTTP pipelining.

Patches

This issue is fixed in Waitress 1.4.0. This brings a range of changes to harden Waitress against potential HTTP request confusions, and may change the behaviour of Waitress behind non-conformist proxies.

... (truncated)

Affected versions: <= 1.3.1

Release notes

Sourced from waitress's releases.

v1.4.1

No release notes provided.

v1.4.0

No release notes provided.

v1.3.1

No release notes provided.

v1.3.0

No release notes provided.

v1.3.0b0

No release notes provided.

v1.2.1

No release notes provided.

v1.2.0

No release notes provided.

v1.1.0

https://pypi.org/project/waitress/1.1.0/

v1.0.2

No release notes provided.

v1.0.1

No release notes provided.

v1.0.0

No release notes provided.

v1.0a2

No release notes provided.

v1.0a1

No release notes provided.

v0.9.0

No release notes provided.

v0.9.0b1

No release notes provided.

0.9.0b0

No release notes provided.

0.8.11b0

No release notes provided.

... (truncated)
Changelog

Sourced from waitress's changelog.

1.4.1 (2019-12-24)

Security Fixes


- Waitress did not properly validate that the HTTP headers it received were
  properly formed, thereby potentially allowing a front-end server to treat a
  request different from Waitress. This could lead to HTTP request
  smuggling/splitting.

Please see the security advisory for more information: https://github.com/Pylons/waitress/security/advisories/GHSA-m5ff-3wj3-8ph4

1.4.0 (2019-12-20)

Bugfixes


- Waitress used to slam the door shut on HTTP pipelined requests without
  setting the ``Connection: close`` header as appropriate in the response. This
  is of course not very friendly. Waitress now explicitly sets the header when
  responding with an internally generated error such as 400 Bad Request or 500
  Internal Server Error to notify the remote client that it will be closing the
  connection after the response is sent.
  • Waitress no longer allows any spaces to exist between the header field-name
    and the colon. While waitress did not strip the space and thereby was not
    vulnerable to any potential header field-name confusion, it should have sent
    back a 400 Bad Request. See https://github.com/Pylons/waitress/issues/273

Security Fixes
</code></pre>
<ul>
<li>
<p>Waitress implemented a &quot;MAY&quot; part of the RFC7230
(<a href="https://tools.ietf.org/html/rfc7230#section-3.5&quot;&gt;https://tools.ietf.org/html/rfc7230#section-3.5&lt;/a>) which states:</p>
<pre><code>Although the line terminator for the start-line and header fields is
the sequence CRLF, a recipient MAY recognize a single LF as a line
terminator and ignore any preceding CR.
</code></pre>
<p>Unfortunately if a front-end server does not parse header fields with an LF
the same way as it does those with a CRLF it can lead to the front-end and
the back-end server parsing the same HTTP message in two different ways. This
can lead to a potential for HTTP request smuggling/splitting whereby Waitress
may see two requests while the front-end server only sees a single HTTP
message.</p>
<p>For more information I can highly recommend the blog post by ZeddYu Lu</p>
</li>
</ul>
</tr></table> ... (truncated)
</blockquote>
</details>
<details>
<summary>Commits</summary>

<ul>
<li><a href="https://github.com/Pylons/waitress/commit/cd8359864400592ba0db5d74e650a8fac4763d0d&quot;&gt;&lt;code&gt;cd83598&lt;/code&gt;&lt;/a> Prep v1.4.1</li>
<li><a href="https://github.com/Pylons/waitress/commit/11d9e138125ad46e951027184b13242a3c1de017&quot;&gt;&lt;code&gt;11d9e13&lt;/code&gt;&lt;/a> Merge pull request from GHSA-m5ff-3wj3-8ph4</li>
<li><a href="https://github.com/Pylons/waitress/commit/a046a7667c8a7afa0237c668e6ff33f7c10894f7&quot;&gt;&lt;code&gt;a046a76&lt;/code&gt;&lt;/a> Add links to advisories for previous security issues</li>
<li><a href="https://github.com/Pylons/waitress/commit/3c58e397cc17e51e1127e971621fb617b04bd33d&quot;&gt;&lt;code&gt;3c58e39&lt;/code&gt;&lt;/a> Bump version number</li>
<li><a href="https://github.com/Pylons/waitress/commit/de3324dd2126ce7ae1e55411f2684c333d96d62b&quot;&gt;&lt;code&gt;de3324d&lt;/code&gt;&lt;/a> Add documentation for security issue</li>
<li><a href="https://github.com/Pylons/waitress/commit/3bcd690f3a068e63faae898f255df047e1ae884c&quot;&gt;&lt;code&gt;3bcd690&lt;/code&gt;&lt;/a> Define VCHAR/OBS_TEXT once</li>
<li><a href="https://github.com/Pylons/waitress/commit/2e46f2426e2845e6a088e21451d3d0031b804cea&quot;&gt;&lt;code&gt;2e46f24&lt;/code&gt;&lt;/a> Validate HTTP header-field more completely</li>
<li><a href="https://github.com/Pylons/waitress/commit/2a11d6812f703e01150c2aedbca7ec2a6590f254&quot;&gt;&lt;code&gt;2a11d68&lt;/code&gt;&lt;/a> Add file with RFC7230 definitions/ABNF -&gt; regex</li>
<li><a href="https://github.com/Pylons/waitress/commit/f11093a6b3240fc26830b6111e826128af7771c3&quot;&gt;&lt;code&gt;f11093a&lt;/code&gt;&lt;/a> Merge pull request from GHSA-g2xc-35jw-c63p</li>
<li><a href="https://github.com/Pylons/waitress/commit/e586be8f43dbb266b9ef28bb285408b3ac3dacd4&quot;&gt;&lt;code&gt;e586be8&lt;/code&gt;&lt;/a> Version 1.4.0</li>
<li>Additional commits viewable in <a href="https://github.com/Pylons/waitress/compare/0.8.10...v1.4.1&quot;&gt;compare view</a></li>
</ul>
</details>

<br />

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot merge will merge this PR after your CI passes on it
  • @dependabot squash and merge will squash and merge this PR after your CI passes on it
  • @dependabot cancel merge will cancel a previously requested merge and block automerging
  • @dependabot reopen will reopen this PR if it is closed
  • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
  • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
  • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
  • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
  • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

Additionally, you can set the following in your Dependabot dashboard:

  • Update frequency (including time of day and day of week)
  • Pull request limits (per update run and/or open at any time)
  • Automerge options (never/patch/minor, and dev/runtime dependencies)
  • Out-of-range updates (receive only lockfile updates, if desired)
  • Security updates (receive only security updates, if desired)

Bumps [waitress](https://github.com/Pylons/waitress) from 0.8.10 to 1.4.1. **This update includes security fixes.**
- [Release notes](https://github.com/Pylons/waitress/releases)
- [Changelog](https://github.com/Pylons/waitress/blob/master/CHANGES.txt)
- [Commits](Pylons/waitress@0.8.10...v1.4.1)

Signed-off-by: dependabot-preview[bot] <[email protected]>
@dependabot-preview dependabot-preview bot added dependencies security Pull requests that address a security vulnerability labels Dec 26, 2019
@dependabot-preview
Copy link
Author

Superseded by #56.

@dependabot-preview dependabot-preview bot deleted the dependabot/pip/waitress-1.4.1 branch January 6, 2020 18:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
dependencies security Pull requests that address a security vulnerability
Projects
None yet
Development

Successfully merging this pull request may close these issues.

0 participants