CVE-2019-16786: HTTP Request Smuggling in Waitress

waitress Updated 02 Oct 2025

Summary

20/12/2019
Yes i
Moderate
7.1

CVE-2019-16786: HTTP Request Smuggling: Invalid Transfer-Encoding in Waitress. Affects waitress versions < 1.4.0. Fixed in 1.4.0. How to fix ↓

Also tracked for

The same CVE-2019-16786 is tracked separately for each ecosystem and vendor. Its fix information is the same; the package and affected versions differ.

Free scan

Check if this vulnerability affects your application

Upload a manifest or SBOM and we'll show whether you're affected, plus every other risky package in the same scan.

Check my app free

No signup required · Results in about 60 seconds

Upload your dependency manifest or SBOM

Drag & drop your file here or

Java Javascript PHP Python Go Rust Ruby Dart C/C++ Elixir CycloneDX SPDX

Upload a supported dependency manifest or SBOM. No installation or source-code access required.

See supported files and SBOM formats
SBOM sbom.json · bom.json · bom.xml · *.spdx.json · *.cdx.json · *.cdx.xml
Java pom.xml · gradle.lockfile · buildscript-gradle.lockfile
Javascript package-lock.json · yarn.lock · pnpm-lock.yaml
PHP composer.lock
Python poetry.lock · requirements.txt · Pipfile.lock
Go go.mod
Rust Cargo.lock
Ruby Gemfile.lock
Dart pubspec.lock
C/C++ conan.lock
Elixir mix.lock
Enter your work email to receive your report link.

Verify your email to view the full report and start 30 days of continuous monitoring. No credit card required.

Sponsored Devnack Penetration testing for web, API and mobile Manual testing by engineers who build software, not an auditor's checklist. Trusted by teams at Swift and Google Talk to Devnack

Background

Waitress is a Python web server that serves web applications written in Python. It is designed to be efficient and easy to use. Waitress parses HTTP requests and handles the transfer of data between the client and the server. However, it was found that Waitress did not properly handle the Transfer-Encoding header, allowing for potential HTTP request smuggling attacks.

Vulnerability Detail

The vulnerability in Waitress arises from its incorrect parsing of the Transfer-Encoding header. According to the HTTP standard, Transfer-Encoding should be a comma-separated list of encoding values, with chunked being the last element. However, Waitress only looked for a single string value and ignored any additional encodings. This could lead to the server treating a single request as multiple requests, potentially allowing for HTTP request smuggling attacks. An attacker could exploit this vulnerability to bypass security measures or perform other malicious activities.

How To Fix

Latest published version: 3.0.2 as of 22 Oct 2026

pip install --upgrade "waitress==3.0.2"

Upgrading to it may include breaking changes; the version below is the minimum fixed release for this vulnerability.

If you need the minimum change

1.4.0

This is the first release that contains the fix.

pip install --upgrade "waitress==1.4.0"

Tip — Not sure which version your app runs? Vulert can match this fix to it. Scan free →

Workaround

If upgrading Waitress is not immediately feasible, using a reverse proxy that has protections against sending potentially bad HTTP requests to the backend can provide some mitigation. Additionally, ensuring that the reverse proxy uses HTTP/1.1 for connecting to the backend can help as HTTP pipelining does not exist in HTTP/1.0. However, this is not a foolproof security method and upgrading to the latest version of Waitress is still recommended.

Conclusion

The vulnerability in Waitress that allows for HTTP request smuggling can be mitigated by upgrading to version 1.4.0 or later. It is important to promptly apply the recommended fix to ensure the security and integrity of web applications served by Waitress. For further assistance or support in vulnerability remediation, please contact DevNack.com.

See every vulnerability recorded for waitress →

Share this vulnerability

FAQ

Waitress is a Python web server that serves web applications written in Python. It is designed to be efficient and easy to use.

HTTP request smuggling is a technique where an attacker manipulates the way a web server processes HTTP requests, leading to security vulnerabilities such as bypassing security measures or performing unauthorized actions.

An attacker can exploit this vulnerability by sending specially crafted HTTP requests with an invalid Transfer-Encoding header. This can trick Waitress into treating a single request as multiple requests, potentially bypassing security measures or causing other issues.

The impact of this vulnerability can vary depending on the specific application and server setup. It could potentially allow an attacker to bypass security measures, perform unauthorized actions, or cause other issues by manipulating the way Waitress processes HTTP requests.

The recommended mitigation is to upgrade to Waitress version 1.4.0 or later. This version includes fixes to handle potential HTTP request confusions and enforces stricter adherence to the HTTP standard. Using a reverse proxy with protections against bad HTTP requests can also provide some mitigation.

Related vulnerabilities

Recent vulnerabilities recorded for waitress.

How To Fix

Latest published version: 3.0.2 as of 22 Oct 2026

pip install --upgrade "waitress==3.0.2"

Upgrading to it may include breaking changes; the version below is the minimum fixed release for this vulnerability.

If you need the minimum change

1.4.0

This is the first release that contains the fix.

pip install --upgrade "waitress==1.4.0"

Tip — Not sure which version your app runs? Vulert can match this fix to it. Scan free →

Subscribe to Vulert on Telegram
Daily digest of new CVEs, critical and high severity, affected packages and fixes — plus a weekly roundup.
Join the channel →
Help improve this record
Report an issue or send feedback