Lieferketten-Hygiene
Ein Entwickler-Mac sammelt Software, wie eine Garage Werkzeug sammelt. Das meiste davon wurde vor Jahren für eine einzige Aufgabe installiert und seitdem nicht mehr angesehen. Homebrew ist sehr gut darin, diese Software auf Ihre Maschine zu bringen. Was danach mit ihr geschieht, dazu sagt es nichts — und für manches davon gibt es inzwischen veröffentlichte CVEs.
brew outdated sagt Ihnen, wofür es eine neuere Version gibt. brew doctor sagt Ihnen, wenn die Installation selbst nicht gesund ist. Beides ist wirklich nützlich, und beides ist keine Sicherheitsprüfung — „es gibt etwas Neueres“ und „was Sie haben, ist angreifbar“ sind verschiedene Fragen mit verschiedener Dringlichkeit.
brew audit ist der Befehl, zu dem alle greifen, und der am meisten in die Irre führt: Er prüft, ob eine Formula für die Einreichung bei Homebrew wohlgeformt ist. Das ist eine Prüfung des Rezepts, nicht der Software auf Ihrer Festplatte. Nichts in der Standard-Werkzeugkette vergleicht Ihre installierten Versionen mit einer Datenbank von Sicherheitsmeldungen.
So funktioniert es
Jede installierte Formula und jeder Cask wird mit Version erfasst — dieselbe Liste, die brew list --versions liefern würde, ohne Copy-and-paste.
Diese Pakete werden gebündelt gegen OSV abgefragt. Die Abfrage läuft live, eine Prüfung bildet also die bis zu diesem Moment veröffentlichten Meldungen ab.
Jeder Treffer trägt den Schweregrad der Meldung selbst, sofern sie einen veröffentlicht, ersatzweise deren CVSS-Wert. In der Paketzeile steht der schwerwiegendste Treffer.
Jeder Treffer verlinkt auf die offizielle Meldung, und die Liste der veralteten Pakete ist einen Klick entfernt — die Lösung ist meist schlicht die gepatchte Version.
Die Treffer stammen von OSV, der von Google gepflegten Open-Source-Schwachstellendatenbank, live abgefragt statt als Momentaufnahme in der App ausgeliefert. Genau darum geht es auf dieser Seite: Eine zum Erscheinungstermin eingebackene Datenbank ist schon veraltet, wenn Sie die App installieren — und diese Veraltung ist genau der Fehlerfall, um den es geht.
Einen Treffer lesen
Aus der Ferne ausnutzbar, oder mit minimalem Aufwand. Heute angehen.
Ernst, meist mit Bedingungen verknüpft. Diese Woche angehen.
Real, aber eng begrenzt — braucht oft lokalen Zugriff oder eine ungewöhnliche Konfiguration.
Der Schweregrad stammt aus der Meldung selbst, wo der Herausgeber einen angibt, ersatzweise aus deren CVSS-Wert. Ein Paket mit mehreren Treffern wird nach dem schwerwiegendsten eingestuft — die Zeile, die Sie in der Liste sehen, ist also die, nach der Sie es beurteilen sollten.
Brew Doctor deckt die andere Hälfte der Maschinenhygiene ab — den Zustand von Homebrew statt der Pakete darin. Er unterscheidet zwei Arten von Warnung, und der Unterschied ist Absicht:
Nicht verknüpfte Kegs, fehlende Abhängigkeiten, veraltete Formulae, ungültige Cask-Metadaten — dafür bietet brew einen Befehl an, also gibt Doctor Ihnen einen „Reparieren“-Knopf und wiederholt die Prüfung anschließend.
Ein sudo-Befehl, eine PATH-Änderung, ein Aufruf von xcode-select — das gehört in Ihre Shell, nicht in eine App, die Befehle in Ihrem Namen ausführt. Doctor zeigt sie als kopierbare Befehle und überlässt Ihnen die Entscheidung.
Hier entscheidet sich, ob das Ganze funktioniert. Eine Prüfung auf Zuruf beantwortet die Frage „bin ich gerade angreifbar“ — aber Meldungen erscheinen fortlaufend, und im Abstand zwischen Veröffentlichung und Entdeckung liegt die Gefährdung. Eine Schwachstelle, von der Sie drei Monate zu spät erfahren, unterscheidet sich kaum von einer, von der Sie nie erfahren haben.
Deshalb läuft die Prüfung standardmäßig beim Start, und ein Menüleisten-Agent prüft im von Ihnen gesetzten Takt nach und markiert sich, wenn etwas auftaucht. Sie müssen an nichts denken. Das ist der ganze Entwurf: Die Warnung findet Sie, statt darauf zu warten, dass Sie nach ihr suchen.
Erfordert macOS 14 (Sonoma) oder neuer, Apple Silicon oder Intel.
Eine Prüfung sagt Ihnen, ob auf Ihrem Mac etwas eine bekannte Schwachstelle hat — und der Menüleisten-Agent sagt es Ihnen von da an weiter. Ein einmaliger Kauf für 10 €.