VAITP Dataset

← Back to the dataset

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.

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 False

Patched 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 ::