CVE-2026-42312
pyLoad allows non-admin users to disable SSL/TLS certificate verification.
- CVSS 6.8
- CWE-295
- Authentication, Authorization, and Session Management
- Remote
pyLoad is a free and open-source download manager written in Python. Prior to 0.5.0b3.dev100, the set_config_value() API method (@permission(Perms.SETTINGS)) in src/pyload/core/api/__init__.py gates security-sensitive options behind a hand-maintained allowlist ADMIN_ONLY_CORE_OPTIONS. The option ("general", "ssl_verify") is not on that allowlist. Any authenticated user with the non-admin SETTINGS permission can set general.ssl_verify = off, and every subsequent outbound pycurl request is made with SSL_VERIFYPEER=0 and SSL_VERIFYHOST=0 — TLS peer and hostname verification are fully disabled. An on-path attacker can then present forged certificates for any hostname pyload fetches. This is a direct continuation of the fix family CVE-2026-33509 / CVE-2026-35463 / CVE-2026-35464 / CVE-2026-35586, each of which patched a different missed option in the same allowlist. This vulnerability is fixed in 0.5.0b3.dev100.
- CWE
- CWE-295
- CVSS base score
- 6.8
- Published
- 2026-05-11
- OWASP
- A01 Broken Access Control
- Orthogonal defect classification
- Checking
- Code defect classification
- Missing Check
- Category
- Authentication, Authorization, and Session Management
- Subcategory
- Poorly Designed Access Controls
- Accessibility scope
- Remote
- Impact
- Information Disclosure
- Affected component
- pyLoad
- Fixed by upgrading
- Yes
Solution
Upgrade pyLoad to version 0.5.0b3.dev100 or later.
Vulnerable code sample
import collections
# Simplified representation of permissions for the demonstration.
Perms = collections.namedtuple("Perms", ["SETTINGS", "ADMIN"])(
"SETTINGS", "ADMIN"
)
# Simplified representation of pyLoad's core configuration state.
config = {
"general": {
"ssl_verify": True,
"secret_key": "sensitive_default_value",
}
}
# The incomplete list of options requiring admin privileges.
# The vulnerability is the omission of ("general", "ssl_verify").
ADMIN_ONLY_CORE_OPTIONS = [
("general", "secret_key"),
# Other sensitive options would be here...
]
def set_config_value(user, section, option, value):
"""
Simplified representation of the vulnerable API method from
src/pyload/core/api/__init__.py. The real method is decorated with
@permission(Perms.SETTINGS), which is simulated here by the initial check.
"""
# This check simulates the @permission(Perms.SETTINGS) decorator.
if not user.has_permission(Perms.SETTINGS):
# In a real API, this would raise an exception or return an error.
return False
config_tuple = (section, option)
# Check if the option requires admin privileges.
if config_tuple in ADMIN_ONLY_CORE_OPTIONS:
if not user.has_permission(Perms.ADMIN):
# Deny non-admins from changing these specific options.
return False
# VULNERABILITY: Since ("general", "ssl_verify") is not in the
# ADMIN_ONLY_CORE_OPTIONS list, the check above is bypassed.
# Any user with SETTINGS permission can change its value, disabling
# SSL verification for all subsequent requests.
if section in config and option in config[section]:
config[section][option] = value
return True
return FalsePatched code sample
ADMIN_ONLY_CORE_OPTIONS = { # type: Set[Tuple[str, str]]
("download", "folder"),
("download", "change_folder_name"),
("download", "create_subfolder"),
("download", "subfolder_structure"),
("general", "file_permission"),
("general", "folder_permission"),
("general", "proxy_password"),
("webui", "password"),
("webui", "user"),
("general", "ssl_verify"),
}Payload
curl -X POST --cookie "session=<AUTHENTICATED_SESSION_COOKIE>" -H "Content-Type: application/json" -d '{"section": "general", "option": "ssl_verify", "value": "off"}' http://<PYLOAD_IP>:<PORT>/api/set_config_value
Cite this entry
@misc{vaitp:cve202642312,
title = {{pyLoad allows non-admin users to disable SSL/TLS certificate verification.}},
author = {Bogaerts, Fr\'ed\'eric and Ivaki, Naghmeh and Fonseca, Jos\'e},
year = {2026},
note = {VAITP Python Vulnerability Dataset, entry CVE-2026-42312},
howpublished = {\url{https://netpack.pt/vaitp/vulnerability/CVE-2026-42312/}}
}
Introducing the "VAITP dataset": a specialized repository of Python vulnerabilities and patches, meticulously compiled for the use of the security research community. As Python's prominence grows, understanding and addressing potential security vulnerabilities become crucial. Crafted by and for the cybersecurity community, this dataset offers a valuable resource for researchers, analysts, and developers to analyze and mitigate the security risks associated with Python. Through the comprehensive exploration of vulnerabilities and corresponding patches, the VAITP dataset fosters a safer and more resilient Python ecosystem, encouraging collaborative advancements in programming security.
The supreme art of war is to subdue the enemy without fighting.
Sun Tzu – “The Art of War”
:: Shaping the future through research and ingenuity ::
