Executive brief
QD is an HTTP task automation framework used to schedule and execute HTTP requests based on HAR templates. A stored XSS vulnerability in the task execution handler allows a low-privileged attacker to inject malicious JavaScript that executes when another user runs a task, enabling cookie theft, session hijacking, or unauthorized actions within the application.
Technical details
A stored XSS vulnerability exists in TaskRunHandler.post() (web/handlers/task.py) where task log content is rendered into HTML responses using Python % string formatting without HTML encoding. The vulnerability stems from rendering untrusted data from the logtmp variable, which is populated either from exception strings or from new_env["variables"]["__log__"] — a value controlled by attackers through the template extract_variables mechanism. An authenticated attacker can craft a malicious HAR template that extracts arbitrary HTML/JavaScript via the api://util/unicode endpoint and stores it in the __log__ variable; when a victim runs the task via /task/<taskid>/run, the embedded script executes in the victim's browser with full application context. The attack requires low-level authentication but not administrative privileges; a user interaction (task execution) is needed for the stored payload to execute.
Affected products
- QD QD 20220208 through 20250803
Timeline
- 2026-08-31: disclosed
- 2026-07-28: other: Public proof-of-concept published on GitHub