| Titolo | philz1337x clarity-upscaler up to main commit cfbdb842c6c839c8e97741722b8cf9a4b7662d98 (last push 2025-03-06) Cross Site Scripting |
|---|
| Descrizione | A vulnerability was found in clarity-upscaler up to main commit cfbdb842c6c839c8e97741722b8cf9a4b7662d98 and classified as high 7.8. Affected is the extra-networks card rendering component. The manipulation of the model sidecar description file content leads to cross-site scripting. The attack is launched locally: the victim has to import an attacker-supplied model package (model file plus .txt/.description.txt/.json sidecar) into the models directory and open the Extra networks tab of the WebUI.
Technical Details
- Affected file/function (all verified at the current default branch cfbdb842c6c839c8e97741722b8cf9a4b7662d98):
modules/ui_extra_networks.py:265 (create_html_for_item()) interpolates item["description"] without html.escape, while the sibling fields name (:264) and save_card_preview (:267) in the same dict are escaped — the omission is unintended rather than policy.
modules/ui_extra_networks.py:303 (find_description()) reads <model>.txt and <model>.description.txt verbatim; modules/ui_extra_networks.py:114 (read_user_metadata()) reads <model>.json, whose description overrides the item description.
html/extra-networks-card.html:12 renders {description} raw into the card template.
Delivery path A: modules/ui_extra_networks.py:382 and :431 wire the card HTML into a gr.HTML component fetched on page load. Delivery path B: javascript/extraNetworks.js:386 assigns the response of /sd_extra_networks/get-single-card to newDiv.innerHTML.
- Vulnerable parameter: the description field of model sidecar files (.txt, .description.txt, .json) shipped next to a model file
- Attack vector: Local
- Privileges required: None
- Trigger condition: default configuration. extra_networks_card_show_desc defaults to true (modules/shared_options.py:244) and the card HTML is fetched on page load via interface.load(fn=pages_html), so opening the Extra networks tab fires the payload without any additional click.
- Origin of the weakness: the code is inherited from the AUTOMATIC1111/stable-diffusion-webui v1.7.0 lineage. Upstream later added default escaping for this exact field (commit 726aaea0fe, released in v1.8.0); this copy has not followed the hardening and the current default branch is still affected.
- Escalation context (not part of the submitted exploit): the same origin can call install_extension_from_url (modules/ui_extensions.py:343), whose only gate check_access() (:22-23) passes by default, so XSS can stage arbitrary extension installation whose code executes after restart. No weaponized payload was published.
Impact
- Confidentiality: High (same-origin access to the WebUI API; the staged extension-installation primitive leads to code execution in the loading process)
- Integrity: High (arbitrary same-origin actions and staged code execution)
- Availability: High (the UI session and the loading process can be disrupted at will)
CVSS v3.1
Score: 7.8 (High)
Vector: CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
Timeline
- Discovered: 2026-09-18
- Vendor notified: 2026-09-24 (issue 72 opened; mechanism only with a benign alert marker, no weaponized payload)
- Patch released: [pending]
- Public disclosure: 2026-09-24 (issue 72 published; exploit not released)
Countermeasure
Escape the field exactly like its sibling fields: html.escape the description in create_html_for_item(), or sync the upstream hardening commit 726aaea0fe (v1.8.0). Until a fix is released, only import model packages from trusted sources, or set extra_networks_card_show_desc=false. |
|---|
| Fonte | ⚠️ https://github.com/philz1337x/clarity-upscaler/issues/72 |
|---|
| Utente | dem0000 (UID 98390) |
|---|
| Sottomissione | 24/09/2026 14:22 (29 giorni fa) |
|---|
| Moderazione | 11/10/2026 20:42 (17 days later) |
|---|
| Stato | Accettato |
|---|
| Voce VulDB | 416767 [philz1337x clarity-upscaler fino a cfbdb842c6c839c8e97741722b8cf9a4b7662d98 Extra Networks Card Rendering ui_extra_networks.py create_html_for_item description cross site scripting] |
|---|
| Punti | 20 |
|---|