<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>fd reopening-Archiv - Ivan Ivanov</title>
	<atom:link href="https://ivanivanov.de/blog/tag/fd-reopening/feed/" rel="self" type="application/rss+xml" />
	<link>https://ivanivanov.de/blog/tag/fd-reopening/</link>
	<description>Have you tried turning it off and on again?</description>
	<lastBuildDate>Fri, 28 Nov 2025 12:03:08 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
<site xmlns="com-wordpress:feed-additions:1">121858272</site>	<item>
		<title>CVE-2025-52881 und AppArmor-Probleme unter Proxmox</title>
		<link>https://ivanivanov.de/blog/cve-2025-52881-und-apparmor-probleme-unter-proxmox/</link>
		
		<dc:creator><![CDATA[Ivan]]></dc:creator>
		<pubDate>Sun, 09 Nov 2025 13:27:55 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[AppArmor Fix Proxmox]]></category>
		<category><![CDATA[AppArmor Profile anpassen]]></category>
		<category><![CDATA[AppArmor unconfined]]></category>
		<category><![CDATA[Container-Sicherheit]]></category>
		<category><![CDATA[Containerd Permission Denied]]></category>
		<category><![CDATA[CVE-2025-52881]]></category>
		<category><![CDATA[Docker in LXC]]></category>
		<category><![CDATA[fd reopening]]></category>
		<category><![CDATA[LXC Container Escape]]></category>
		<category><![CDATA[LXC Konfiguration]]></category>
		<category><![CDATA[net.ipv4.ip_unprivileged_port_start]]></category>
		<category><![CDATA[Proxmox AppArmor]]></category>
		<category><![CDATA[Proxmox LXC Docker]]></category>
		<category><![CDATA[runc Sicherheitslücke]]></category>
		<category><![CDATA[verschachtelte Container]]></category>
		<guid isPermaLink="false">https://ivanivanov.de/?p=5063</guid>

					<description><![CDATA[<p>Kritische Sicherheitslücke und ihre Auswirkungen auf Proxmox LXC-Container In den letzten Tagen hat die Sicherheitslücke CVE-2025-52881 in der Container-Runtime runc für Aufsehen gesorgt. Diese Lücke, die einen Container-Escape und eine Denial-of-Service (DoS) ermöglichen kann, wurde durch ein wichtiges Sicherheitsupdate behoben. Leider führt die Art und Weise, wie dieser Fix implementiert ist – nämlich das erneute [&#8230;]</p>
<p>Der Beitrag <a href="https://ivanivanov.de/blog/cve-2025-52881-und-apparmor-probleme-unter-proxmox/">CVE-2025-52881 und AppArmor-Probleme unter Proxmox</a> erschien zuerst auf <a href="https://ivanivanov.de">Ivan Ivanov</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Kritische Sicherheitslücke und ihre Auswirkungen auf Proxmox LXC-Container</h2>
<p>In den letzten Tagen hat die Sicherheitslücke <b>CVE-2025-52881</b> in der Container-Runtime <b><code>runc</code></b> für Aufsehen gesorgt. Diese Lücke, die einen <b>Container-Escape</b> und eine <b>Denial-of-Service (DoS)</b> ermöglichen kann, wurde durch ein wichtiges Sicherheitsupdate behoben. Leider führt die Art und Weise, wie dieser Fix implementiert ist – nämlich das erneute Öffnen von Dateideskriptoren (FD reopening) für <code>procfs</code>-Operationen – zu Konflikten mit den standardmäßigen <b>AppArmor-Profilen</b> von <b>LXC-Containern</b> unter Proxmox, insbesondere wenn Sie <b>Docker</b> oder andere Container-Engines <i>innerhalb</i> eines LXC-Containers betreiben (sogenanntes &#8222;Nested&#8220; oder verschachteltes Container-Setup).</p>
<h3>Was passiert?</h3>
<p>Die Fehlermeldung, die Sie möglicherweise beim Starten oder Initialisieren von Containern sehen, sieht in etwa so aus:</p>
<blockquote><p><code>open sysctl net.ipv4.ip_unprivileged_port_start file: reopen fd 8: permission denied</code></p></blockquote>
<p>Dies tritt auf, weil der Sicherheitspatch in <code>runc</code> (oder einer abhängigen Komponente wie <code>containerd.io</code>, die durch das Update auf eine anfällige Version aktualisiert wurde) versucht, eine Systemdatei unter <code>/proc/sys/net/ipv4/ip_unprivileged_port_start</code> zu öffnen. Das <b>AppArmor-Profil</b> des Proxmox LXC-Containers blockiert jedoch diesen Zugriff, da es Schreibvorgänge auf die meisten <code>/sys</code>-Dateien unterbindet. Da <code>/proc/sys</code> oft auf <code>/sys/</code> gemappt wird, interpretiert AppArmor den Zugriff als verbotenen <code>/sys</code>-Schreibvorgang.<br />
Siehe auch: <a href="https://github.com/opencontainers/runc/issues/4968#issue-3593655843" target="_blank" rel="noopener">https://github.com/opencontainers/runc/issues/4968#issue-3593655843</a></p>
<hr />
<h2> Lösungsmöglichkeiten unter Proxmox</h2>
<p>Da die Deaktivierung des Sicherheitsupdates keine Option ist (da es kritische Container-Escape-Schwachstellen behebt), müssen wir die <b>LXC-Konfiguration</b> anpassen. Ich würde euch hier die Lösung 3 eher ans Herz legen.</p>
<h3>1. <b>Empfohlene Lösung: Downgrade des betroffenen Pakets (Temporäre Lösung)</b></h3>
<p>Die schnellste Lösung, die das Problem umgeht, besteht darin, das aktualisierte Paket, das den Fix enthält und den Konflikt verursacht, auf eine funktionierende, aber ältere (und potenziell anfällige) Version zurückzusetzen. Dies wird oft für <code>containerd.io</code> beobachtet, das die aktualisierte <code>runc</code>-Bibliothek enthält.</p>
<ul>
<li><b><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Wichtig:</b> Beachten Sie, dass dies die Sicherheitslücke <b>CVE-2025-52881</b> <i>wieder öffnet</i>. Dies ist nur eine <b>temporäre Notlösung</b>, bis eine offizielle Korrektur des AppArmor-Profils in Proxmox/LXC verfügbar ist. <b>Verwenden Sie dies nur, wenn Sie keine andere Wahl haben, und aktualisieren Sie sofort, wenn ein offizieller Fix herauskommt.</b></li>
</ul>
<p><b>Beispiel für Ubuntu/Debian in Ihrem LXC-Container:</b></p>
<ol start="1">
<li>Prüfen Sie, welche Versionen verfügbar sind (ersetzen Sie das Release, z. B. <code>jammy</code> oder <code>noble</code>):
<div class="code-block ng-tns-c966192672-32 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahcKEwjb9vmpleWQAxUAAAAAHQAAAAAQbA">
<div class="code-block-decoration header-formatted gds-title-s ng-tns-c966192672-32 ng-star-inserted">
<p><span class="ng-tns-c966192672-32">Bash</span></p>
<div class="buttons ng-tns-c966192672-32 ng-star-inserted"></div>
</div>
<div class="formatted-code-block-internal-container ng-tns-c966192672-32">
<div class="animated-opacity ng-tns-c966192672-32">
<pre class="ng-tns-c966192672-32"><code class="code-container formatted ng-tns-c966192672-32" role="text" data-test-id="code-content">apt list -a containerd.io
</code></pre>
</div>
</div>
</div>
</li>
<li>Installieren Sie die letzte funktionierende Version (z. B. <code>1.7.28-1</code> anstelle von <code>1.7.29-1</code>):
<div class="code-block ng-tns-c966192672-33 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahcKEwjb9vmpleWQAxUAAAAAHQAAAAAQbQ">
<div class="code-block-decoration header-formatted gds-title-s ng-tns-c966192672-33 ng-star-inserted">
<div class="buttons ng-tns-c966192672-33 ng-star-inserted"></div>
</div>
<div class="formatted-code-block-internal-container ng-tns-c966192672-33">
<div class="animated-opacity ng-tns-c966192672-33">
<pre class="ng-tns-c966192672-33"><code class="code-container formatted ng-tns-c966192672-33" role="text" data-test-id="code-content"><span class="hljs-comment"># Für Ubuntu 22.04 Jammy:</span>
apt install containerd.io=1.7.28-1~ubuntu.22.04~jammy
<span class="hljs-comment"># Für Ubuntu 24.04 Noble:</span>
apt install containerd.io=1.7.28-1~ubuntu.24.04~noble
</code></pre>
</div>
</div>
</div>
</li>
<li>Starten Sie den Dienst neu:
<div class="code-block ng-tns-c966192672-34 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahcKEwjb9vmpleWQAxUAAAAAHQAAAAAQbg">
<div class="code-block-decoration header-formatted gds-title-s ng-tns-c966192672-34 ng-star-inserted">
<div class="buttons ng-tns-c966192672-34 ng-star-inserted"></div>
</div>
<div class="formatted-code-block-internal-container ng-tns-c966192672-34">
<div class="animated-opacity ng-tns-c966192672-34">
<pre class="ng-tns-c966192672-34"><code class="code-container formatted ng-tns-c966192672-34" role="text" data-test-id="code-content">systemctl restart docker
</code></pre>
</div>
</div>
</div>
</li>
</ol>
<p>&nbsp;</p>
<h3>2. <b>Alternative: AppArmor im Container umgehen (Hotfix)</b></h3>
<p>&nbsp;</p>
<p>Eine andere schnelle, aber <b>nicht empfohlene</b> Methode als Hotfix ist, Docker vorzugaukeln, dass AppArmor deaktiviert ist. Auch hier gilt: <b>Dies reduziert Ihre Sicherheit.</b></p>
<p>Führen Sie diesen Befehl <b>im betroffenen LXC-Container</b> aus:</p>
<div class="code-block ng-tns-c966192672-35 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahcKEwjb9vmpleWQAxUAAAAAHQAAAAAQbw">
<div class="code-block-decoration header-formatted gds-title-s ng-tns-c966192672-35 ng-star-inserted">
<p><span class="ng-tns-c966192672-35">Bash</span></p>
<div class="buttons ng-tns-c966192672-35 ng-star-inserted"></div>
</div>
<div class="formatted-code-block-internal-container ng-tns-c966192672-35">
<div class="animated-opacity ng-tns-c966192672-35">
<pre class="ng-tns-c966192672-35"><code class="code-container formatted ng-tns-c966192672-35" role="text" data-test-id="code-content">mount --<span class="hljs-built_in">bind</span> /dev/null /sys/module/apparmor/parameters/enabled
systemctl restart docker
</code></pre>
</div>
</div>
</div>
<p><i>Dies bindet <code>/dev/null</code> über die AppArmor-Statusdatei, was den Kernel glauben lässt, AppArmor sei im Container deaktiviert.</i></p>
<p>&nbsp;</p>
<h3>3. <b>Die bessere, aber komplexere Lösung: Anpassung der LXC-Konfiguration</b></h3>
<p>&nbsp;</p>
<p>Die sicherste Langzeitlösung besteht darin, die AppArmor-Einschränkungen für den Container so anzupassen, dass der Zugriff auf die betroffene <code>sysctl</code>-Datei zugelassen wird, ohne die allgemeine Sicherheit zu stark zu schwächen.</p>
<p><b>Schritt 1: LXC-Konfigurationsdatei bearbeiten</b></p>
<p>Bearbeiten Sie auf dem <b>Proxmox Host</b> die Konfigurationsdatei Ihres Containers (ersetzen Sie <code>VMID</code> durch die ID Ihres Containers, z. B. <code>101</code>):</p>
<div class="code-block ng-tns-c966192672-36 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahcKEwjb9vmpleWQAxUAAAAAHQAAAAAQcA">
<div class="formatted-code-block-internal-container ng-tns-c966192672-36">
<div class="animated-opacity ng-tns-c966192672-36">
<pre class="ng-tns-c966192672-36"><code class="code-container formatted ng-tns-c966192672-36" role="text" data-test-id="code-content">nano /etc/pve/lxc/VMID.conf
</code></pre>
</div>
</div>
</div>
<p><b>Schritt 2: <code>nesting</code> aktivieren und AppArmor-Regeln hinzufügen</b></p>
<p>Stellen Sie sicher, dass die <b>Nesting-Funktion</b> aktiviert ist (dies ist oft für Docker in LXC erforderlich) und fügen Sie eine oder beide der folgenden Zeilen hinzu, um die AppArmor-Regeln zu modifizieren:</p>
<div class="code-block ng-tns-c966192672-37 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahcKEwjb9vmpleWQAxUAAAAAHQAAAAAQcQ">
<div class="code-block-decoration header-formatted gds-title-s ng-tns-c966192672-37 ng-star-inserted">
<p><span class="ng-tns-c966192672-37">Ini, TOML</span></p>
<div class="buttons ng-tns-c966192672-37 ng-star-inserted"></div>
</div>
<div class="formatted-code-block-internal-container ng-tns-c966192672-37">
<div class="animated-opacity ng-tns-c966192672-37">
<pre class="ng-tns-c966192672-37"><code class="code-container formatted ng-tns-c966192672-37" role="text" data-test-id="code-content"><span class="hljs-comment"># Notwendig für verschachtelte Container (Docker in LXC)</span>
features: <span class="hljs-attr">nesting</span>=<span class="hljs-number">1</span>

<span class="hljs-comment"># Fügen Sie diese Zeile hinzu, um das Schreiben von Sysctls zu erlauben</span>
lxc.apparmor.profile: unconfined

<span class="hljs-comment"># ODER, spezifischer (nur, wenn 'unconfined' nicht funktioniert oder zu offen ist):</span>
<span class="hljs-comment"># lxc.apparmor.profile: generated</span>
<span class="hljs-comment"># lxc.apparmor.allow-incomplete: 1</span>
<span class="hljs-comment"># lxc.mount.entry: /proc/sys/net/ipv4/ip_unprivileged_port_start proc/sys/net/ipv4/ip_unprivileged_port_start none bind,optional,create=file</span>
</code></pre>
</div>
</div>
</div>
<p><i>Hinweis: <code>unconfined</code> deaktiviert AppArmor für diesen Container. Dies ist aus Sicherheitsgründen <b>nicht ideal</b>, aber eine gängige Lösung für tief verschachtelte Containerprobleme. Die spezifischere Bindung funktioniert möglicherweise nur, wenn AppArmor bestimmte Pfade zulässt.</i></p>
<p><b>Schritt 3: Container neu starten</b></p>
<p>Starten Sie den LXC-Container neu, damit die Änderungen wirksam werden.</p>
<div class="code-block ng-tns-c966192672-38 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahcKEwjb9vmpleWQAxUAAAAAHQAAAAAQcg">
<div class="formatted-code-block-internal-container ng-tns-c966192672-38">
<div class="animated-opacity ng-tns-c966192672-38">
<pre class="ng-tns-c966192672-38"><code class="code-container formatted ng-tns-c966192672-38" role="text" data-test-id="code-content">pct stop VMID
pct start VMID
</code></pre>
</div>
</div>
</div>
<hr />
<h2>Fazit und Ausblick</h2>
<p>Das Problem <b>CVE-2025-52881</b> zeigt einmal mehr die Komplexität des Betriebs von Containern in Containern. Während die Sicherheitsupdates in <code>runc</code> essenziell sind, verursachen sie aufgrund der restriktiven AppArmor-Profile der LXC-Umgebung Probleme unter Proxmox.</p>
<p>Die <b>beste langfristige Lösung</b> ist eine Aktualisierung der Proxmox-Basis oder der LXC-AppArmor-Profile, um den notwendigen Zugriff zu gewähren, ohne die Sicherheit des Hosts zu gefährden. Bis dahin müssen Benutzer möglicherweise eine der genannten Workarounds anwenden und dabei stets das <b>Risiko einer vorübergehenden Sicherheitsminderung</b> im Auge behalten.</p>
<p>Der Beitrag <a href="https://ivanivanov.de/blog/cve-2025-52881-und-apparmor-probleme-unter-proxmox/">CVE-2025-52881 und AppArmor-Probleme unter Proxmox</a> erschien zuerst auf <a href="https://ivanivanov.de">Ivan Ivanov</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5063</post-id>	</item>
	</channel>
</rss>
