PT-2026-115375
تاريخ النشر
2026-10-05
·
تاريخ التحديث
2026-10-05
الوصف من
CVSS 3.1
7.5
عاليةالمقاييسAV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
Summary
Quart 0.23.0 contains a stray debug statement (
print(data)) inside Body. await in quart/wrappers/request.py. Any request whose body is awaited — await request.form, await request.get data(), WTForms validate on submit(), etc. — has its raw, unparsed body printed to stdout, including plaintext form fields such as passwords and CSRF tokens. Confirmed present in 0.23.0, confirmed absent in 0.22.0.Details
In
src/quart/wrappers/request.py, Body. await accumulates the request body into a bytearray:
python data = bytearray() while not self. queue.empty(): data.extend(self. queue.get nowait()) print(data) # <-- not present in 0.22.0 if ( self. max content length is not None and len(data) > self. max content length ): raise RequestEntityTooLarge() This fires for every request that awaits its body — the overwhelming majority of POST/PUT routes in a typical Quart app (form submissions, JSON APIs via
request.get json(), file uploads, etc.).PoC
pip install quart==0.23.0(requires Python 3.13+)- Minimal route:
python @app.route("/login", methods=["POST"]) async def login(): form data = await request.form ... - Submit a POST with form data, e.g. a login form with
staff id/passwordfields. - Observe stdout: the full raw body is printed as
bytearray(b'csrf token=...&staff id=...&password=...').
Confirmed via source diff against 0.22.0's
request.py, where this line does not exist.Impact
Any app that captures stdout in logs (terminal redirect, systemd/journald, Docker logs, cloud log aggregation, etc.) will have every submitted form body — including login credentials — written to logs in plaintext. This affects any Quart 0.23.0 app handling authentication or any sensitive form data, and is trivially triggerable by any user simply submitting a form (no attacker action required beyond normal use).
وجدت خطأً في الوصف؟ لديك ما تضيفه؟ لا تتردد في مراسلتنا 👾