Die Copy-Fail-Schwachstelle im Linux Kernel ist ein Logikfehler, der aus einer fehlerhaften Kombination mehrerer Kernel-Mechanismen resultiert. Ein Angreifer kann damit Root-Rechte auf dem System erlangen.
Das Problem betrifft den Datentransfer zwischen Benutzer- und Kernel-Speicher, insbesondere in Verbindung mit internen Kopierfunktionen und der Verarbeitung von Speicherbereichen im sogenannten Page-Cache. Dieser Cache dient dazu, Dateiinhalte im Arbeitsspeicher vorzuhalten, um langsame Festplattenzugriffe zu vermeiden. Ein Fehler in diesen Abläufen, der unbehandelt bleibt, kann dazu führen, dass der Rechner mit manipulierten oder inkonsistenten Daten weiterarbeitet, was die Grundlage für nachfolgende Angriffe bildet.
Sicherheitsforscher konnten zeigen, dass sich aus diesem Verhalten eine äußerst zuverlässige Angriffstechnik ableiten lässt. Die Schwachstelle betrifft praktisch alle Linux-Systeme, die seit 2017 veröffentlicht wurden, und erlaubt lokalen Nutzern eine Privilegieneskalation bis hin zu Root-Rechten. Entdeckt wurde die Lücke unter anderem mit einem KI-Analysewerkzeug, das gezielt den Krypto-Code des Kernels untersuchte.
Konkret ermöglicht die Schwachstelle einem nicht privilegierten Nutzer, gezielt vier Bytes im Page-Cache einer beliebigen lesbaren Datei zu überschreiben. Das geschieht, weil der Systemaufruf »splice()« Daten nicht klassisch kopiert, sondern sogenannte Zero-Copy-Mechanismen nutzt: Statt Bytes zu duplizieren, werden Referenzen auf bereits vorhandene Speicherseiten weitergereicht. Diese Seiten werden in internen Datenstrukturen wie der Scatter-Gather-Liste gesammelt, die dem Krypto-Subsystem beschreibt, wo die zu verarbeitenden Daten im Speicher liegen. Durch eine fehlerhafte Behandlung dieser Liste interpretiert der Kernel bestimmte Speicherbereiche als beschreibbar, obwohl sie eigentlich auf schreibgeschützte Dateidaten im Page-Cache zeigen. So entsteht ein kontrollierbarer Schreibzugriff.
Ein entscheidender Aspekt ist dabei das sogenannte In-Place-Verhalten: Eingabe- und Ausgabepuffer werden im selben Speicherbereich verarbeitet, um Kopieraufwand zu vermeiden. Technisch bedeutet das, dass ein Puffer gleichzeitig als Quelle und Ziel einer Operation dient. Wenn dabei keine strikte Begrenzung erfolgt, können Schreiboperationen über die ursprünglich vorgesehenen Grenzen hinausgehen. Genau das passiert hier.
Der Fehler entstand historisch durch das Zusammenspiel mehrerer Änderungen im Kernel, unter anderem einer Optimierung aus dem Jahr 2017, die diese In-Place-Verarbeitung eingeführt hat, ohne alle Seiteneffekte auf gemeinsam genutzte Speicherstrukturen wie den Page-Cache vollständig abzusichern. Die praktische Ausnutzung gestaltet sich vergleichsweise einfach und erfordert weder Race Conditions noch systemspezifische Anpassungen, da der Angriff deterministisch funktioniert. Ein kleines Python-Skript genügt, um eine setuid-Binärdatei wie »/usr/bin/su« im Arbeitsspeicher gezielt zu verändern. Wird deren Code im Page-Cache manipuliert, führt das Betriebssystem beim Start nicht mehr die unveränderte Datei von der Festplatte aus, sondern die manipulierte Version aus dem Cache. Besonders kritisch ist, dass diese Veränderung nicht zurückgeschrieben werden und klassische Prüfmechanismen wie Checksummen oder Datei-Hashes deswegen keine Abweichung erkennen.
Zur Behebung des Problems wurde der Kernel so angepasst, dass die problematische In-Place-Verarbeitung eingeschränkt und zusätzliche Prüfungen bei der Nutzung von Scatterlists und Page-Cache-Seiten eingeführt wurden. Insbesondere wird verhindert, dass schreibgeschützte Seiten in Kontexte gelangen, in denen Schreiboperationen stattfinden können. Insgesamt zeigt diese Schwachstelle eindrücklich, wie aus scheinbar kleinen Logikfehlern in zentralen Systemkomponenten gravierende Sicherheitsrisiken entstehen können, insbesondere wenn Optimierungen wie Zero-Copy und In-Place-Verarbeitung nicht ausreichend abgesichert sind. (jcb)
Infos
- Copy-Fail-Beschreibung: https://xint.io/blog/copy-fail-linux-distributions






