<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Alessandro Pogliaghi's Blog</title><image><url>https://apogliaghi.com/img/favicon/favicon.png</url><title>Security on Alessandro Pogliaghi</title><link>https://apogliaghi.com/categories/security/</link></image><link>https://apogliaghi.com/categories/security/</link><description>Recent content in Security on Alessandro Pogliaghi</description><generator>Hugo -- gohugo.io</generator><language>en</language><managingEditor>apogliaghi@gmail.com (Alessandro Pogliaghi)</managingEditor><webMaster>apogliaghi@gmail.com (Alessandro Pogliaghi)</webMaster><copyright>Alessandro Pogliaghi ~ 2026 | Made with ❤️ in<span class='emoji'>🇪🇺</span></copyright><lastBuildDate>Tue, 23 Sep 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://apogliaghi.com/categories/security/index.xml" rel="self" type="application/rss+xml"/><atom:link href="https://apogliaghi.com/" rel="alternate" type="text/html"/><item><title>Crypto Miner in hotio/qbittorrent</title><link>https://apogliaghi.com/2025/09/crypto-miner-in-hotio/qbittorrent/</link><pubDate>Tue, 23 Sep 2025 00:00:00 +0000</pubDate><author>apogliaghi@gmail.com (Alessandro Pogliaghi)</author><guid>https://apogliaghi.com/2025/09/crypto-miner-in-hotio/qbittorrent/</guid><description>
&lt;div style="background: linear-gradient(135deg, #ff6b35, #f7931e); padding: 20px; border-radius: 10px; margin: 30px 0; text-align: center; box-shadow: 0 4px 15px rgba(0,0,0,0.1);">
&lt;h3 style="margin: 0 0 15px 0; color: white; font-size: 1.3em;">🗣️ Join the Discussion 🗣️&lt;/h3>
&lt;div style="display: flex; justify-content: center; gap: 20px; flex-wrap: wrap; margin-bottom: 15px;">
&lt;a href="https://news.ycombinator.com/item?id=45345233" style="display: inline-flex; align-items: center; padding: 10px 20px; background: rgba(255,255,255,0.2); border-radius: 25px; text-decoration: none; color: white; font-weight: bold; transition: all 0.3s ease; backdrop-filter: blur(10px);" onmouseover="this.style.background='rgba(255,255,255,0.3)'; this.style.transform='translateY(-2px)'" onmouseout="this.style.background='rgba(255,255,255,0.2)'; this.style.transform='translateY(0)'">
&lt;img src="https://news.ycombinator.com/favicon.ico" alt="HN" style="width: 16px; height: 16px; margin-right: 8px;">
Hacker News
&lt;/a>
&lt;a href="https://lobste.rs/s/6wzpji/crypto_miner_hotio_qbittorrent" style="display: inline-flex; align-items: center; padding: 10px 20px; background: rgba(255,255,255,0.2); border-radius: 25px; text-decoration: none; color: white; font-weight: bold; transition: all 0.3s ease; backdrop-filter: blur(10px);" onmouseover="this.style.background='rgba(255,255,255,0.3)'; this.style.transform='translateY(-2px)'" onmouseout="this.style.background='rgba(255,255,255,0.2)'; this.style.transform='translateY(0)'">
&lt;span style="font-size: 1.2em; margin-right: 8px;">🦞&lt;/span>
Lobste.rs
&lt;/a>
&lt;/div>
&lt;/div>
&lt;hr>
&lt;h3 id="infected-container-image">
Infected Container Image
&lt;a href="#infected-container-image" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>Registry:&lt;/strong> &lt;code>ghcr.io/hotio/qbittorrent&lt;/code>&lt;/li>
&lt;li>&lt;strong>Tag:&lt;/strong> &lt;code>release&lt;/code>&lt;/li>
&lt;li>&lt;strong>Digest:&lt;/strong> &lt;code>sha256:3779f89712dbaa8b25fc22897d0b471ee&lt;/code>
&lt;code>29049b2b0f8d3c192df83b098c84fc5&lt;/code>&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>Recently, while migrating to a new server, I discovered a suspicious process running inside a &lt;a href="https://hotio.dev/containers/qbittorrent/">hotio/qbittorrent&lt;/a> Docker container.&lt;/p>
&lt;p>I mainly use this to download Linux ISOs, as anybody else, right?&lt;/p>
&lt;p>I just want to get that sweet sweet &lt;a href="https://omarchy.org/">Omarchy&lt;/a> ISO.&lt;/p>
&lt;h2 id="the-problem">
The Problem
&lt;a href="#the-problem" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;p>While monitoring system resources, I noticed a process consuming unusually high CPU:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>$ ps -ef | grep netservlet
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">1000&lt;/span> &lt;span style="color:#ae81ff">758679&lt;/span> &lt;span style="color:#ae81ff">756435&lt;/span> &lt;span style="color:#ae81ff">99&lt;/span> 09:39 ? 00:13:43 ./netservlet
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;figure class="center" >
&lt;img src="https://apogliaghi.com/img/_qbittorrent-cryptominer/cpu_spike.png"
/>
&lt;/figure>
&lt;p>The binary &lt;code>netservlet&lt;/code> was unfamiliar, and attempts to inspect it via &lt;code>/proc&lt;/code> failed:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>$ docker exec qbittorrent cat /proc/758679/exe &amp;gt; /tmp/netservlet
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># Output: No such file or directory&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This indicates the binary was likely &lt;strong>unlinked from the filesystem&lt;/strong>, pretty much as expected.&lt;/p>
&lt;h2 id="investigation">
Investigation
&lt;a href="#investigation" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;p>Since direct access to the executable was blocked, I generated a core dump:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>$ gcore -o /tmp/netservlet_core &lt;span style="color:#ae81ff">758679&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>I could now simply use &lt;code>strings&lt;/code> to further have a look:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>$ strings /tmp/netservlet.elf | egrep -i &lt;span style="color:#e6db74">&amp;#39;stratum|pool|wallet|http|crypto|mining|eth|btc|pool&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Highlights included:&lt;/p>
&lt;ul>
&lt;li>References to cryptocurrency mining: &lt;code>cryptonight&lt;/code>, &lt;code>ethash_calculate_dag_item&lt;/code>, &lt;code>mining.submit&lt;/code>, &lt;code>mining.authorize&lt;/code>.&lt;/li>
&lt;li>Mining pool addresses: &lt;code>auto.c3pool.org:19999&lt;/code>.&lt;/li>
&lt;li>Miner configuration options: &lt;code>--cpu-memory-pool&lt;/code>, &lt;code>--opencl&lt;/code>, &lt;code>--cuda&lt;/code>, &lt;code>--rig-id&lt;/code>, &lt;code>http-access-token&lt;/code>.&lt;/li>
&lt;/ul>
&lt;p>This confirmed that &lt;code>netservlet&lt;/code> was &lt;strong>a stealth crypto miner&lt;/strong>, likely XMRig or a variant.
I thought we were over crypto bros and all over to AI-bros, I was mistaken 😂.&lt;/p>
&lt;figure class="center" >
&lt;img src="https://apogliaghi.com/img/_qbittorrent-cryptominer/wat.png"
/>
&lt;/figure>
&lt;p>Just for fun, I also ran &lt;code>binwalk&lt;/code> against the dump, which ended up with a &lt;code>1.3GB&lt;/code> &lt;code>gzip&lt;/code> archive.
We couldn&amp;rsquo;t just unzip it, though, due to obfuscation.&lt;/p>
&lt;p>I will analyze it via &lt;code>ghidra&lt;/code> later, today I should be OOO lol.&lt;/p>
&lt;h2 id="conclusion">
Conclusion
&lt;a href="#conclusion" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;p>Remember:&lt;/p>
&lt;ul>
&lt;li>Never trust random Docker images—your containers aren’t magic elves.&lt;/li>
&lt;li>Keep an eye on system resources—they have feelings too.&lt;/li>
&lt;li>Audit your host and containers often—because surprises are only fun at parties.&lt;/li>
&lt;/ul></description></item></channel></rss>