von Yanick Witschi

Contao Manager 1.10 - composer.lock Validierung

Nachdem der Contao Manager mit der Version 1.9.0 bereits neue Sicherheitsfeatures erhalten hat, setzen wir jetzt mit Version 1.10 noch einen drauf!

Hinweis: Gleich wird es ein bisschen technisch, ist aber für diese Version leider nicht anders möglich.
Die Kurzfassung, falls es dir doch ein bisschen zu sehr ins Detail geht: Die Version 1.10 ist jetzt noch sicherer und verhindert neuerdings auch gewisse Man-In-the-Middle-Attacken.

Grundlagen: Paketverwaltung

Die Grundfunktion des Contao Managers besteht darin, Extensions (oder in allgemeiner Composer-Sprache einfach nur «Pakete») zu installieren, zu aktualisieren und natürlich auch zu entfernen.

Bei der Paketverwaltung gibt es zwei grundsätzlich verschiedene Informationen, die technisch von Composer auch in zwei unterschiedlichen Dateien verwaltet und vom Contao Manager entsprechend visuell dargestellt werden:

  • In der composer.json bestimmst du, was du brauchst (z. B. «Ich will Contao, Version 5.3 oder höher aber nie eine 6er-Version»). Für die Composer-Vertrauten also ^5.3.
  • Die composer.lock hingegen bestimmt, was du bekommst (z. B. «Du bekommst Contao in Version 5.3.33»).

Oder anders ausgedrückt:

composer.json = Einkaufszettel mit ungefähren Angaben
composer.lock = Einkaufskorb mit genauen Produkten

Dabei übernimmt Composer die Aufgabe, aus den Angaben deiner composer.json die bestmögliche Kombination aller Pakete und deren Abhängigkeiten herauszufinden und diese dann in der composer.lock festzuhalten.
Sind die Paketinformationen (nicht nur die Versionen sondern z. B. auch die URLs wo diese Pakete heruntergeladen werden können) erstmal in der composer.lock gelandet, findet keine weitere Validierung mehr statt.

Möchtest du dein Wissen vertiefen? Dann kann ich dir folgenden Beitrag composer.json - Versionsbedingungen und Abhängigkeiten ans Herz legen. Darin erklärt Christian dir das Thema Versionsbedingungen und gibt dir Tipps, wie du mit Fehlermeldungen umgehst, wenn bestimmte Versionen nicht installiert werden können.

Die Composer Resolver Cloud und die Contao Manager API

Bei einer Aktualisierung der Pakete bedient der Contao Manager standardmässig die Composer Resolver Cloud. Dies ganz einfach deswegen, weil die Auflösung der Abhängigkeiten potenziell mehr RAM benötigt, als auf deinem Hosting zur Verfügung steht.
Die Cloud antwortet mit der finalen composer.lock, deren Inhalte der Contao Manager via Composer im Anschluss installiert. Die Informationen werden also ungeprüft verarbeitet.
Würde es ein Angreifer schaffen, die Composer Resolver Cloud zu übernehmen, könnte er dir ein bösartiges Paket unterjubeln. Mit grösster Wahrscheinlichkeit so, dass du es niemals bemerken würdest.

Aber damit nicht genug. Der Contao Manager verfügt auch über eine Schnittstelle (API), womit direkt composer.json bzw. composer.lock Dateien an den Contao Manager geschickt werden können und somit eine Installation aktualisiert bzw. verändert werden kann.
Ein solcher Dienst, der diese API nutzt, ist z. B. trakked.io. Auch dort wäre es so, dass wenn ein Angreifer es schafft, sich beim Service einzuschleusen, er dir ungewünschte Pakete unterjubeln könnte.

Die Lösung: Validierung der composer.lock

Getrieben durch diesen Angriffsvektor haben wir in den vergangenen Wochen an einer Validierungs-Bibliothek gearbeitet, welche in der Lage ist zu prüfen, ob der Inhalt einer composer.lock zur Definition der composer.json und den konfigurierten Repositories passt.
Entstanden ist dabei terminal42/composer-lock-validator welche diverse Angriffsszenarien korrekt erkennt. Es ist somit nicht mehr möglich:

  • Pakete hinzuzufügen, obwohl sie in der composer.json gar nicht erwähnt werden.
  • Pakete hinzuzufügen, obwohl sie von keinem anderen Paket gewünscht werden.
  • Pakete zu entfernen, die da sein müssten.
  • Die Metadaten eines Pakets zu verändern.

Der soeben veröffentlichte Contao Manager in Version 1.10 nutzt diese Bibliothek nun überall und verhindert diesen Angriffsvektor ab sofort!
Also auch wenn du keinen Dienst nutzt, der von der API Gebrauch macht, so bleibst du ab sofort von der Gefahr einer feindlichen Übernahme der Composer Resolver Cloud geschützt.

Weiterhin viel Spass beim neuerdings viel sichereren Updaten von Paketabhängigkeiten! 😎 🔐

Yanick Witschi

Über Yanick Witschi

Yanick ist Caching- und Resolverheld von Contao und dafür mitverantwortlich, dass deine Kaffeepause seit der Umstellung auf Composer 2 um einiges kürzer ausfällt. Er war Mitbegründer und der erste Präsident des Vorgängervereins der Contao Association. Als Core-Entwickler steckt er viel Herzblut in Contao. Bei terminal42 hebt er mit den Kunden regelmässig ab. Ausserdem liebt er die Küche, Basketball, Tennis, Politik, den afrikanischen Kontinent und Astrophysik.

Kommentare

Kommentar von Franko |

Wie immer informativ & dabei die Komplexität einfach erklärt u. auf den Punkt gebracht.
Mein Dank an Yanick/Andreas (& weitere) für diese Beiträge & Pflege des Contao Manager.
Franko

Kommentar von Philipp |

Mega!!!

Kommentar von Bernhard |

Alle Daumen hoch! Danke für die Info und natürlich auch für die stetige Weiterentwicklung des CM.
Bernhard

Kommentar von Erich Jännert |

Super anschauliche Erklärung. Passt zu Contao!

Einen Kommentar schreiben

Bitte rechnen Sie 8 plus 4.