Wir haben den Bug bereits vor 2-3 Wochen gefunden und auch schon im Proxmox-Bug-Center gelistet! Es ist bisher jedoch keine Reaktion erfolgt! Offensichtlich wird das Risiko nicht richtig eingeschätzt!
In Proxmox 4.x gibt es in der Firewall in den Optionen ein Flag für IP-Filter. In der Vorversion 3.x mußten diese IP-Filter via IPSets manuell gesetzt werden, insbesondere bei den KVM-Maschinen, da diese bereits über bridge mit MAC arbeiteten und nicht via venet direkt adressiert wurden!
Die neue Version 4.x will es den Hostern einfach machen, die IP auch für die bridged – Technik, einfach zu setzen. Dabei werden dann im Container, die notwendigen Konfigurations-Scripte beim Erzeugen des LXC-Containers automatisch generiert! Leider ignorieren manche OS-Varianten und dies sogar bei Einsatz der vorgefertigten OS-Templates, dann das Gateway, wenn dem LXC-Container eine Single-IP als /32 zugewiesen wird und das Gateway im dann übergeordneten IP-Block selbst vorhanden ist! Die Hoster, die Proxmox verwenden, müssen also in diesem Fall die IP als CIDR für den gesamten Block eingeben und weisen somit dem LXC-Container einen IP-Block zu, statt eine Single-IP! Evtl. wird dies von den Hostern sogar aus Mißverständnis, dann sogar generell so gemacht?!
Der IP-Filter arbeitet dann allerdings auch mit dem gesamten IP-Block und somit könnte in den LXC-Containern von den LXC-Admins (z.B. Kunden) ein IP-Spoofing ausgenutzt werden!
Ein Workarround, den wir einsetzen, verhindert dies auf Firewall – Ebene, aber es ist durchaus möglich, daß diverse Proxmox-Hoster dieses Problem noch nicht erkannt haben und jetzt deren Systeme unsicher konfiguriert sind, zumindest ermöglichen diese unter Umständen, Hacking von innen durch „Freischaltung“ von IP-Spoofing!
Wir sehen dieses Sicherheitsproblem nicht als „echten Bug“, sondern als „Design-Bug“, der es allerdings in sich hat, denn in 99% aller Fälle erhalten LXC-Container eine Single-IP und nicht einen IP-Block!
Beispiel (257 gibt es nicht in einer IP, ist nur für das Beisiel hier so):
IP: 223.12.257.2/32 und Gateway 223.12.257.62 wird im LXC-Container als Fehler abgelehnt. Also verwendet der Hoster die
IP: 223.12.257.2/28 und dann wird das Gateway 223.12.257.62 akzeptiert! Fatal, denn wenn der Hoster nun dem IP-Filter vertraut, so filtert dieser alle IPs. von 223.12.257.0 bis 223.12.257.63 und nicht nur die IP 223.12.257.2 und der Inhaber des LXC-Containers (Mieter/Kunde) kann jetzt die IPs in der Netzkonfiguration ändern und alle IPs, die er eigentlich nicht bekommen sollte, verwenden von 223.12.257.0 bis 223.12.257.63 und damit IP-Spoofing betreiben!
Dieses läuft auf jeden Fall eine Weile gut und damit kann sich ein LXC-Container als der Nachbar ausgeben und Daten des Nachbarn abziehen, ggf. manipulieren, als Nachbar Attacken durchführen und bis erkannt wird, daß es gar nicht der eigentliche Inhaber des LXC-Containers ist, der die Attacken verübt hat, vergeht Zeit, die im Rechenzentrum unter Umständen zur Sperrung des gesamten Hosts führen können!
Workarround, der im Moment mehr Arbeit kostet, aber alles sauber absichert:
In Firewall-Optionen den Traffic ausgehend auf DISABLE setzen und in eine eigene Firewall-Rule manuell hinzu zu setzen, die nur die Single IP durchläßt! Gibt es jedoch mehrere Rules für ausgehenden Traffic, muß genau die richtige Reihenfolge der Rules gesetzt werden, damit die zugefügte Rule für die IP nicht alle ausgehenden Rules zu aushebelt!
Also die IP-Rule, die die IP durchlässt, muß eine größere Prioritäts-Nummer haben, als die Rules, die bestimmte Ports ausgehend verbieten!
Falsch gesetzt, als Beispiel, läßt alle Ports nach Außen durch, obwohl dies nicht gewollt ist, also wird auch Port 22 von innen nach außen durch gelassen!
Prio 0: Out Accept <IP>
Prio 1: Out Drop Port 22
Richtig gesetzt, wobei wir hier die IP auf die letzte Priorität gesetzt haben :
Prio 0: Out Drop Port 22
Prio 25: Out Accept <IP>
Witziger Weise, haben wir vor 3 Jahren, nach Neuveröffentlichung einer neuen Version von Proxmox, hier ebenfalls einen gefährlichen Bug in der Firewall gefunden, nach zu lesen im Artikel:
In 2015 führte eine Fehlkonfiguration der Firewall zu extremen Problemen, nach zu lesen in Artikel: https://blog.1awww.com/2015/05/07/proxmox-in-neuem-kernel-2-6-32-37-ploetzlich-mit-fehlfunktionen-ipv6-fehlt-pve-firewall-startet-nicht/
Wir sind sicher, daß Proxmox diesen Bug, wie auch noch andere offene Bugs, bald beseitigen werden!