Ubuntu logo

Packaging Guide

5. Security und Stable Release Updates

5.1. Einen sicherheitstechnischen Fehler in Ubuntu beheben

5.1.1. Einleitung

Beheben von Sicherheitslücken und Bugs ist nicht wirklich anders als fixing a regular bug in Ubuntu und es wird angenommen, dass Ihnen das Patchen von normalen Bugs bekannt ist. Um zu demonstrieren, wo Dinge anders ablaufen, werden wir das dbus Paket in Ubuntu 12.04 LTS (Precise Pangolin) einem Sicherheitsupdate unterziehen.

5.1.2. Den Quelltext bekommen

In diesem Beispiel wissen wir bereits, dass wir das dbus-Paket in Ubuntu 12.04 LTS (Precise Pangolin) beheben möchten. Somit müssen Sie zuerst die Version des Pakets, welches Sie herunterladen möchten, bestimmen: Wir können rmadison hier zur Hilfe verwenden:

$ rmadison dbus | grep precise
dbus | 1.4.18-1ubuntu1   | precise          | source, amd64, armel, armhf, i386, powerpc
dbus | 1.4.18-1ubuntu1.4 | precise-security | source, amd64, armel, armhf, i386, powerpc
dbus | 1.4.18-1ubuntu1.4 | precise-updates  | source, amd64, armel, armhf, i386, powerpc

Normalerweise sollten Sie die höchste Version für die Veröffentlichung die Sie patchen möchten wählen, die nicht in -proposed oder -backports ist. Da wird Precise’s dbus aktualisieren, laden Sie 1.4.18-1ubuntu1.4 aus precise-updates herunter:

$ bzr branch ubuntu:precise-updates/dbus

5.1.3. Den Quelltext patchen

Now that we have the source package, we need to patch it to fix the vulnerability. You may use whatever patch method that is appropriate for the package, but this example will use edit-patch (from the ubuntu-dev-tools package). edit-patch is the easiest way to patch packages and it is basically a wrapper around every other patch system you can imagine.

Um einen Patch mit edit-patch anzulegen:

$ cd dbus
$ edit-patch 99-fix-a-vulnerability

Dies wird die existerenden Patches anwenden und die Paketierung in einem temporären Verzeichnis platzieren. Bearbeiten Sie nun die Dateien, die benötigt werden, die Lücke zu beheben. Oft bietet Upsteam einen Patch an so dass Sie diesen anwenden können:

$ patch -p1 < /home/user/dbus-vulnerability.diff

Nachdem die nötigen Änderungen gemacht sind, drücken Sie einfach Strg-D oder geben exit ein um die temporäre Shell zu verlassen.

5.1.4. Das Changelog und die Patches formatieren

Nachdem Ihre Patches angewendet wurden, ist es sinnvoll, das Changelog zu überarbeiten. Der dch Befehl wird verwendet um die debian/changelog Datei zu bearbeiten und edit-patch wird dch``automatisch starten sobald alle Patches rück-angewendet wurden. Wenn Sie ``edit-patch nicht verwenden, können Sie dch -i manuell starten. Nicht wie bei regulären Patches sollten Sie das folgende Format benutzen (beachten Sie, dass der Distributionsname precise-security für Sicherheitsupdates verwendet, da es ein Sicherheitsupdate für Precise ist):

dbus (1.4.18-2ubuntu1.5) precise-security; urgency=low

  * SECURITY UPDATE: [DESCRIBE VULNERABILITY HERE]
    - debian/patches/99-fix-a-vulnerability.patch: [DESCRIBE CHANGES HERE]
    - [CVE IDENTIFIER]
    - [LINK TO UPSTREAM BUG OR SECURITY NOTICE]
    - LP: #[BUG NUMBER]
...

Aktualisieren Sie Ihren Patch und verwenden die passenden Patchtags. Ihr Patch sollte mindest die Origin, Description und Bug-Ubuntu-Tags haben. Editieren Sie beispielsweise debian/patches/99-fix-a-vulnerability.patch dass es etwas wie folgt enthält:

## Description: [DESCRIBE VULNERABILITY HERE]
## Origin/Author: [COMMIT ID, URL OR EMAIL ADDRESS OF AUTHOR]
## Bug: [UPSTREAM BUG URL]
## Bug-Ubuntu: https://launchpad.net/bugs/[BUG NUMBER]
Index: dbus-1.4.18/dbus/dbus-marshal-validate.c
...

Mehrere Sicherheitslücken können im gleichen Security Upload behoben werden; vergewisseren Sie sich nur, dass Sie verschiedene Patches für verschedene Sicherheitslücken verwendest.

5.1.5. Ihre Arbeit testen und einsenden

Ab diesem Zeitpunkt entspricht der Prozess dem in fixing a regular bug in Ubuntu. Insbesondere sollten Sie:

  1. Ihre Pakete bauen und überprüfen, dass es fehlerfrei kompiliert und ohne zusätzliche Compilerwarnungen

  2. Aktualisieren Sie auf die neueste Version des Pakets von der vorherigen Version

  3. Testen Sie, dass das neue Paket die Verwundbarkeit behebt und keine neue Regressionen einführt

  4. Reichen Sie Ihre Arbeit über einen Launchpad Merge Proposal ein und geben einen Launchpad Bug ein, wobei Sie sich vergewissern sollten, dass dieser Bug als Security Bug markiert wird und ubuntu-security-sponsors abonniert wird.

Wenn die Sicherheitslücke noch nicht öffentlich ist, dann geben Sie keinen Merge-Vorschlag auf und vergewisseren sich, dass Sie den Bug als privat markieren.

Der aufgegebene Bug sollte einen Testfall einhalten, beispielsweise einen Kommentar der klar zeigt, wie der Bug durch Aufruf der alten Version nachgestellt werden kann und dann wie der Bug nicht mehr in der neuen Version existiert.

Der Bugreport sollte auch bestätigen, dass diese Problematik in Ubuntu-Versionen behoben ist, die neuer sind als die Version mit der vorgeschlagenen Behebung (im oberen Beispiel neuer als Precise). Wenn diese Problematik nicht in neueren Ubuntu-Versionen behoben ist, sollten Sie Aktualisierungen für diese Versionen ebenfalls vorbereiten.

5.2. Updates für stabile Releases

Wir erlauben auch Updates auf Veröffentlichungen, wo ein Paket einen Bug mit großem Einfluss hat, wie beispielsweise schwere Regressionen von einer vorherigen Veröffentlichung oder einen Bug der Datenverlust verursachen könnte. Aufgrund der Schwere für solche Aktualisierungen auf sich selbst, wo sie selbst Bugs einführen erlauben wir dies nur, wenn die Änderung leicht verständlich und überprüft ist.

Der Prozess für Stable Release Updates ist genau gleich wie der Prozess für Sicherheitsprobleme nur dass man ubuntu-sru beim Bug abonnieren sollte.

Die Aktualisierung wird das proposed Archiv gehen (beispielsweise precise-proposed). Dort wird eine Überprüfung notwendig, dass das Problem behoben wird und keine weiteren Probleme mit sich bringt. Nach einer Woche ohne gemeldete Probleme kann es in updates verschoben werden.

Schauen Sie sich die Stable Release Updates Wikiseite für weitere Informationen an.