Ubuntu logo

Packaging Guide

7. Actualizaciones de seguridad y de versiones estables

7.1. Corregir un error de seguridad en Ubuntu

7.1.1. Introducción

Fixing security bugs in Ubuntu is not really any different than fixing a regular bug in Ubuntu, and it is assumed that you are familiar with patching normal bugs. To demonstrate where things are different, we will be updating the dbus package in Ubuntu 12.04 LTS (Precise Pangolin) for a security update.

7.1.2. Obtener el código fuente

In this example, we already know we want to fix the dbus package in Ubuntu 12.04 LTS (Precise Pangolin). So first you need to determine the version of the package you want to download. We can use the rmadison to help with this:

$ 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

Typically you will want to choose the highest version for the release you want to patch that is not in -proposed or -backports. Since we are updating Precise’s dbus, you’ll download 1.4.18-1ubuntu1.4 from precise-updates:

$ bzr branch ubuntu:precise-updates/dbus

7.1.3. Parchear el código fuente

Ahora que ya tenemos el paquete fuente, necesitamos parchearlo para corregir la vulnerabilidad. Puede usar cualquier método que sea adecuado para el paquete, incluyendo técnicas UDD, pero para este ejemplo se usará edit-patch (del paquete ubuntu-dev-tools). edit-patch es la forma más sencilla de parchear paquetes y básicamente se trata de un envoltorio alrededor de todos los demás sistemas de parches que pueda imaginar.

Para crear un parche usando edit-patch:

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

Esto aplicará los parches existentes y dejará el empaquetado en un directorio temporal. Ahora edite los archivos necesarios para solucionar la vulnerabilidad. Frecuentemente se habrá proporcionado un parche desde aguas arriba de forma que pueda aplicarlo:

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

Después de hacer los cambios necesarios, simplemente pulse Ctrl+D o escriba «exit» para dejar el intérprete de órdenes temporal.

7.1.4. Formatear el registro de cambios («changelog») y los parches

After applying your patches you will want to update the changelog. The dch command is used to edit the debian/changelog file and edit-patch will launch dch automatically after un-applying all the patches. If you are not using edit-patch, you can launch dch -i manually. Unlike with regular patches, you should use the following format (note the distribution name uses precise-security since this is a security update for Precise) for security updates:

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]
...

Actualice su parche para usar las etiquetas de parche adecuadas. Su parche debería tener por lo menos las etiquetas «Origin», «Description» y «Bug-Ubuntu». Por ejemplo, edite debian/patches/99-fix-a-vulnerability.patch para que tenga es siguiente aspecto:

## 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
...

Muchas vulnerabilidades se puede solucionar en la misma carga de seguridad, pero asegúrese de usar parches distintos para las diferentes vulnerabilidades.

7.1.5. Probar y enviar el trabajo

En este punto el proceso es el mismo que para arreglar un bug normal de Ubuntu. Más concretamente, deseará:

  1. Construir el paquete y comprobar que compila sin errores y sin ningún aviso del compilador añadido.

  2. Actualizar a la nueva versión del paquete desde la versión anterior

  3. Probar que el nuevo paquete corrige la vulnerabilidad y no introduce ninguna regresión

  4. Enviar el trabajo mediante una propuesta de integración de Launchpad y rellenar un error en Launchpad asegurándose de marcar el error como un fallo de seguridad y de suscribirse a ubuntu-security-sponsors.

Si la vulnerabilidad de seguridad no es pública todavía no presente una propuesta de integración y asegúrese de marcar el error como privado.

El presentado debe incluir un caso de prueba, es decir, un comentario que indique claramente cómo recrear el error ejecutando la versión antigua y luego cómo asegurarse de que el error no existe en la nueva versión.

The bug report should also confirm that the issue is fixed in Ubuntu versions newer than the one with the proposed fix (in the above example newer than Precise). If the issue is not fixed in newer Ubuntu versions you should prepare updates for those versions too.

7.2. Actualizaciones de versiones estables

También se permite actualizaciones de emisiones en las que un paquete tiene un error de gran impacto, como por ejemplo una regresión severa de una emisión anterior o un error que podría causar pérdida de datos. Debido al potencia de que esas actualizaciones a su vez introduzcan errores solo se permiten cuando los cambios pueden ser fácilmente comprendidos y verificados.

El proceso de actualizaciones de versiones estables es el mismo que el proceso para errores de seguridad excepto que debería suscribir ubuntu-sru al error.

The update will go into the proposed archive (for example precise-proposed) where it will need to be checked that it fixes the problem and does not introduce new problems. After a week without reported problems it can be moved to updates.

See the Stable Release Updates wiki page for more information.