Zwei vollständige Exploits gegen den Linux-Kernel haben die Forscher entwickelt. Beide nutzen den klassischen BPF (cBPF) aus: Während der leistungsfähigere eBPF-JIT nur privilegierten Nutzern offensteht, bleibt cBPF auch unprivilegierten Programmen zugänglich. Seccomp, Socket-Filterung und Paketfilterung in Anwendungen wie Docker und Chrome setzen weiterhin darauf.
Auf aktuellen Intel-Prozessoren liest der Exploit beliebigen Speicher aus und umgeht sämtliche aktivierten Gegenmaßnahmen. Nach Angaben der Forscher lassen sich selbst auf vollständig aktualisierten Systemen mit voreingestellten Sicherheitsoptionen sensible Informationen abziehen. “Unser Exploit leckt 8 Byte pro Sekunde. Das mag langsam klingen, aber mit sorgfältigem Verfolgen von Zeigern müssen wir nur eine kleine Datenmenge auslesen, um an das Geheimnis zu gelangen”, so die Forscher. In einer Demonstration lokalisierten und extrahierten sie den Passwort-Hash des Root-Nutzers, nachdem dieser in den Speicher geladen worden war.
In Firefox liefe der Angriff über eine bösartige Webseite, die JavaScript im Browser des Opfers ausführt. Da Mozilla die Einführung der Site-Isolation noch nicht abgeschlossen hat, können sich Inhalte anderer Tabs den Adressraum des Angreifers teilen. Ein Proof of Concept zeigte, dass veraltete Sprungeinträge in SpiderMonkey auf Intel-Prozessoren lange genug bestehen bleiben, um wiederverwendet zu werden; die geschätzte Leckrate liegt bei einigen Dutzend Byte pro Sekunde.
Bei GraalVM könnte BTR die Speichermaskierung überspringen, die den striktesten Sandbox-Modus der Laufzeitumgebung gegen Spectre absichert. Die zuverlässige Wiederverwendung von Speicheradressen gelang, doch die eigene Codekompilierung und die Garbage Collection von GraalVM löschten die veralteten Sprungeinträge, bevor sie ausgenutzt werden konnten. Diese Einschränkung erscheint den Forschern jedoch “nicht grundsätzlicher Natur”.
Die Ergebnisse wurden an die betroffenen Chiphersteller und Softwareentwickler gemeldet, die die Forschung allesamt anerkannten. Die CPU-Hersteller verwiesen darauf, dass bestehende Mechanismen wie die Indirect Branch Prediction Barrier (IBPB) BTR entschärfen können und Korrekturen in Software erfolgen müssen. Die Linux-Kernel-Entwickler haben eine x86-Gegenmaßnahme eingeführt, die auf allen CPU-Kernen eine IBPB auslöst, sobald ein cBPF-Programm in einen Speicherbereich gelegt wird, der bereits von zuvor ausgeführtem BPF-Code genutzt wurde. Oracle hat einige Gegenmaßnahmen ausgerollt, Mozilla priorisiert den Abschluss der Site-Isolation gegenüber IBPB-basierten Maßnahmen.
Die Ursache sehen die Forscher darin, dass der Sprungvorhersager einer CPU mit dem tatsächlich im Speicher liegenden Code auseinanderlaufen kann. “Keine aktuelle CPU verfügt über einen Mechanismus, um beide synchron zu halten — solange die Hersteller keinen hinzufügen, ist Ihre CPU verwundbar”, warnen sie.
Hardwareseitige Kontrollflussschutzmechanismen wie IBT auf x86 und Arms BTI erschweren die Ausnutzung, beseitigen sie aber nicht: Ältere Intel-CPUs können Instruktionen spekulativ vor der Prüfung ausführen; Lion Cove ist die früheste Intel-Generation, die die Forscher frei von dieser Race Condition fanden. Selbst auf davon freien CPUs ließ sich IBT umgehen, wenn Constant Blinding deaktiviert war — die Kombination aus race-freiem IBT und Constant Blinding bezeichnen sie als deutlich stärkere Verteidigung.
SecurityWeek bat Intel, AMD und Arm um Stellungnahme. AMD erklärte, die Arbeit offenbare keine neue Schwachstelle in seinen Produkten, und die beschriebene Technik werde durch die bestehenden Empfehlungen zu Spectre-v2-Angriffen entschärft. Intel und Arm haben bislang nicht geantwortet.
