Linux- und FreeBSD-Kernel verwundbar
Foto: Unsplash

Netflix-Entwickler haben vier Sicherheitslücken im TCP-Code der Kernel von Linux und FreeBSD entdeckt. Eine davon kann per Denial-of-Service Attacke zum Auslösen eines Kernel-Panic genutzt werden.

TCP steht für Transmission Control Protocol und ist ein Netzwerkprotokoll, das bestimmt, wie Daten zwischen Netzwerkkomponenten ausgetauscht werden. Im Gegensatz zum verbindungslosen UDP (User Datagram Protocol) stellt TCP dazu eine Verbindung zwischen zwei Endpunkten einer Netzverbindung her, auf der in beide Richtungen Daten übertragen werden können.

Angriff per Integerüberlauf

Die vier Lücken bieten einen Angriffsvektor in der Art, wie die TCP-Implementation im Kernel das Selective Acknowledgement (SACK) gehandhabt wird. Dabei handelt es sich um eine Erweiterung des TCP-Protokolls zur Steigerung des Datendurchsatzes bei Paketverlusten. Dabei wird per SACK nur das neue Paket und nicht der gesamte Inhalt des jeweiligen TCP Receive Window neu angefordert.

Die Lücke, die durch einen Integerüberlauf beim Verarbeiten des TCP-SACK einen Kernel-Panic und damit den Absturz von Servern herbeiführen kann ist als CVE-2019-11477 katalogisiert. Die anderen drei Verwundbarkeiten erreichen durch Denial-of-Service Attacken eine Ressourcenverknappung, der zum Verlangsamen des Systems, zum Systemstillstand oder -Absturz führen kann.

Die beiden anderen Linux betreffenden Lücken sind unter CVE-2019-11478 und CVE-2019-11479 katalogisiert. Die Lücke im Kernel von FreeBSD trägt die CVE-Nummer 2019-5599. Die mit Priorität hoch kategorisierte Lücke CVE-2019-11477 ist in allen Linux-Kerneln seit 2.6.29 aus dem Jahr 2009 vertreten.

Bereits geschlossen

Unter Linux wurden die Lücken bereits für die stabilen Kernel-Versionen 4.4.182, 4.9.182, 4.14.127, 4.19.52, sowie 5.1.11 geschlossen. Anwender, die nicht auf einen dieser Kernel aktualisieren können, behelfen sich mit einem Workaround, indem sie mittels

sudo echo "0" > /proc/sys/net/ipv4/tcp_sack
sudo echo "0" > /proc/sys/net/ipv6/tcp_sack

die Unterstützung für TCP-SACK deaktivieren. Der Hack ist nicht permanent und muss nach einem Neustart wiederholt werden.

Linux- und FreeBSD-Kernel über TCP verwundbar

Verwandte Themen

Linux 5.1 kann zu Datenverlust führen
views 4.6k
Bild: Penguins | Quelle: pxhere | Lizenz: CC0Kernel 5.1 hat einen Fehler im Device Mapper eingeführt, der unter bestimmten Umständen zu massive...
Linux 5.0 – was ist neu?
views 1.3k
Bild: Krd Lizenz: CC BY-SA 3.0Linus Torvalds hat am gestrigen Sonntag Linux 5.0 freigegeben, den ersten offiziellen Kernel, der mit einer 5 begin...
Linux 5.0 anstatt 4.21
views 920
Bild: Krd Lizenz: CC BY-SA 3.0Linus Torvalds hat am Wochenende Linux 5.0-rc1 veröffentlicht und damit den Umstieg vom Vorgänger 4.20 auf eine neu...
Linux 4.20 unterm Weihnachtsbaum
views 486
Photo by Aaron Burden on UnsplashAm gestrigen Sonntag hat Linus Torvalds Linux 4.20 freigegeben. Der neue Kernel wuchs um über 350.000 neue Zeile...
Der Code of Conduct und ein fehlender Kernel
views 472
Bild: Penguins | Quelle: pxhere | Lizenz: CC0 Eigentlich haben viele im Linux-Dunstkreis heute Morgen beim Öffnen ihres Feed-Readers erw...

Beitrag kommentieren

Alle Kommentare
  • Christoph

    20.06.2019, 11:44 Uhr

    Danke für den Beitrag.

    Sicher, dass der Befehl so stimmt?

    • Ferdinand Thommes

      20.06.2019, 12:15 Uhr

      Hallo Christoph,
      eigentlich müsste der so funktionieren, stand zumindest so bei Red Hat. Auch im Netz ist diese Variante zu finden. Geht aber zumindest bei Debian nicht. Ich hab das mal auf so abgeändert, dass es überall funktionieren sollte. Danke fürs finden.

  • Micha

    20.06.2019, 12:52 Uhr

    Den Befehl musste ich unter Fedora mit sudo -i ausführen.

    Man kann aber auch eine Service-Datei anlegen, müsste dann so in etwa aussehen.

    sudo nano /etc/systemd/system/tcp.service

    [Unit]
    Description=TCP-SACK für IPv4 und IPv6 deaktivieren

    [Service]
    Type=oneshot
    RemainAfterExit=yes

    ExecStart=/bin/sh -c “echo “0” > /proc/sys/net/ipv4/tcp_sack;”
    ExecStart=/bin/sh -c “echo “0” > /proc/sys/net/ipv6/tcp_sack;”

    [Install]
    WantedBy=multi-user.target

    (ohne ” in nano einfügen)

    Dann nano schließen und service aktivieren mit:
    sudo systemctl enable tcp.service

    Ich habe es nicht probiert, sollte aber so klappen.

  • Nick

    20.06.2019, 13:36 Uhr

    Ziemlich übertrieben extra einen Dienst für Systemd zu schreiben. Ein temporärer Cronjob hätte es auch getan, bis zum nächsten Kernel-Update.

    • Ferdinand Thommes

      20.06.2019, 13:48 Uhr

      Ist doch nette Fingerübung. Systemd machts einfach möglich.